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?
