Java Sound API - Changer d'instrument
Guillaume
-
lambdav Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
lambdav Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
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
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Startup sound changer - Télécharger - Édition & Montage
- Eclipse java - Télécharger - Langages
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);