Les Allergies
Alimentaires
Posez votre question Signaler

Java Sound API - Changer d'instrument

Guillaume - Dernière réponse le 30 août 2011 à 01:51
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 :
    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?
Lire la suite 

Java Sound API - Changer d'instrument »

2 réponses
Réponse
+0
moins plus
Personne?
Ajouter un commentaire
Réponse
+0
moins plus
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);
Ajouter un commentaire
Ce document intitulé « Java Sound API - Changer d'instrument » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?