Java Sound API - Changer d'instrument
Guillaume
-
lambdav Messages postés 2 Statut Membre -
lambdav Messages postés 2 Statut Membre -
Bonjour,
Je suis en train de réaliser un projet en Java utilisant le Java Sound API pour générer des notes de musique en MIDI. J'arrive à générer les notes comme je le désire, cependant j'ai du mal à changer l'instrument qui les joues.
Je génère mes notes à l'aide d'une fonction que j'ai trouvée sur internet et personnalisée un petit peu. La voici :
Le son reste celui d'un piano quoi que je fasse.
Normalement je devrais pouvoir changer d'instruments en modifiant l'indice de mon tableau instruments[] dans la fonction loadInstrument. Mais rien ne se passe.
Quand j'affiche le contenu de mon tableau instruments[], j'obtiens des résultats sous cette forme (je ne sais pas si ça peut aider).
Quelqu'un saurait-il comment faire pour pouvoir changer d'instruments?
Je suis en train de réaliser un projet en Java utilisant le Java Sound API pour générer des notes de musique en MIDI. J'arrive à générer les notes comme je le désire, cependant j'ai du mal à changer l'instrument qui les joues.
Je génère mes notes à l'aide d'une fonction que j'ai trouvée sur internet et personnalisée un petit peu. La voici :
public Note(int note1, int note2, int intensite, int vitesse) throws MidiUnavailableException {
this.vitesse = vitesse;
this.intensite = intensite;
System.out.println("Note vitesse : " + vitesse);
System.out.println("Note intensité : " + intensite);
// initialisation midi : on déclare et on ouvre un synthétiseur
synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();
// utilisation de la banque de sons par défault
soundBank = synthesizer.getDefaultSoundbank();
// obtention d'une liste des instruments contenus dans cette banque de sons
instruments = soundBank.getInstruments();
// obtention des canaux MIDI contrôlés par ce synthétiseur
channels = synthesizer.getChannels();
/* on choisit le premier instrument de la liste, c'est-à-dire le piano, et on l'affecte sur le premier canal. */
synthesizer.loadInstrument(instruments[0]);
for(int i = 0; i< instruments.length ; i++){
System.out.println(i + " " +instruments[i]);
}
channels[0].programChange(0);
// la note est ensuite jouée
/* paramètres : le canal, le numéro de la note jouée, la velocité (la vitesse à laquelle on a pressée la touche ;), et enfin la durée (à remplacer par des threads) */
//playNote(channels[0], note1, 10, 1000);
}
Le son reste celui d'un piano quoi que je fasse.
Normalement je devrais pouvoir changer d'instruments en modifiant l'indice de mon tableau instruments[] dans la fonction loadInstrument. Mais rien ne se passe.
Quand j'affiche le contenu de mon tableau instruments[], j'obtiens des résultats sous cette forme (je ne sais pas si ça peut aider).
Instrument Piano (bank 0 program 0) Instrument Bright Piano (bank 0 program 1) Instrument Electric Grand (bank 0 program 2) Instrument Honky Tonk Piano (bank 0 program 3) Instrument Electric Piano 1 (bank 0 program 4) Instrument Electric Piano 2 (bank 0 program 5)
Quelqu'un saurait-il comment faire pour pouvoir changer d'instruments?
A voir également:
- Java Sound API - Changer d'instrument
- Changer dns - Guide
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Startup sound changer - Télécharger - Édition & Montage
- Letasoft sound booster - Télécharger - Création musicale
2 réponses
Un peu tard mais voici le code pour changer d'instrument :
MidiChannel[] channels = synth.getChannels();
synth.loadInstrument( instrument );
Patch p = instrument.getPatch();
int bank = p.getBank(), program = p.getProgram();
program |= (bank&1)<<7; bank >>>= 1; // correction d'un bug Java
channels[channel].programChange(bank, program);
MidiChannel[] channels = synth.getChannels();
synth.loadInstrument( instrument );
Patch p = instrument.getPatch();
int bank = p.getBank(), program = p.getProgram();
program |= (bank&1)<<7; bank >>>= 1; // correction d'un bug Java
channels[channel].programChange(bank, program);