Как контролировать громкость MIDI канала - PullRequest
4 голосов
/ 04 ноября 2011

У меня есть этот код:

Synthesizer synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();
Instrument[] instrument = synthesizer.getDefaultSoundbank().getInstruments();
synthesizer.loadInstrument(instrument[29]);
MidiChannel[] channels = synthesizer.getChannels();
MidiChannel channel = channels[1];
channel.programChange(29);
channel.noteOn(noteNumber, 127);
Teszthang.sleep(2000);
channel.noteOff(noteNumber);

так что это пример, чтобы воспроизвести звук с максимальной громкостью (127) в течение 2 секунд но я хочу контролировать громкость канала, как через 2 секунды, громкость исчезнет еще через 2 секунды. Как я мог это сделать? Я знаю эти методы:

channel.controlChange(controller, value);
channel.setPolyPressure(noteNumber, pressure);

но это не меняет громкость! Я не знаю, как использовать эти методы. Как я могу изменить громкость канала после noteOn() во время его воспроизведения?

Ответы [ 2 ]

6 голосов
/ 04 ноября 2011

Вы можете использовать CC 7 для настройки громкости канала.

channel.controlChange(7, value);

см .: http://improv.sapp.org/doc/class/MidiOutput/controllers/controllers.html

0 голосов
/ 18 сентября 2014

Иногда в миди-файле происходят некоторые события громкости, поэтому вы не можете изменить громкость канала.После получения последовательности удалите эти события:

Track[] tracks = sequence.getTracks();
for (Track track : tracks){
for(int i = 0; i < track.size(); i++){
    if(!track.remove(track.get(i))){
        System.out.println("MIDI Event not removed");
    }
}}
...