2014-09-12 3 views
0

J'ai le code ci-dessous qui devrait théoriquement couper le son (juste pour tester si le contrôle de volume fonctionne) mais il joue le son à plein volume comme si la boucle à travers les pistes n'était pas là.Volume MIDI de contrôle sans synthétiseur

File music = new File(midi); 
Sequencer sequencer; 
Sequence sequence; 
try { 
    sequence = MidiSystem.getSequence(music); 
    sequencer = MidiSystem.getSequencer(); 
    sequencer.open(); 

    for (Track track : sequence.getTracks()) 
    { 
     for (int c = 0; c < 16; c++) 
      track.add(new MidiEvent(
       new ShortMessage(ShortMessage.CONTROL_CHANGE, c, 7, 0), 
        track.ticks())); 
    } 

    sequencer.setSequence(sequence); 
    sequencer.start(); 
} catch (MidiUnavailableException | IOException | InvalidMidiDataException e) { 
    e.printStackTrace(); 
} 

Répondre

1

Pourquoi serait changer quelque chose si vous ajoutez simplement les commandes à une piste? Je parie qu'ils sont ajoutés au fin des pistes; donc le changement de contrôle ne fait rien. Essayez de régler le paramètre tick à 0, au moins. De plus, les pistes peuvent déjà contenir des modifications de contrôle par elles-mêmes; modifier le volume comme il le faut. Cette approche est pas comment vous contrôlez le volume de la musique. C'est comment vous contrôlez les pistes sélectionnées les unes par rapport aux autres.