如何控制MIDI通道的音量

我有这个代码:

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()播放后更改频道的音量?

您可以使用CC 7设置通道音量。

 channel.controlChange(7, value); 

请参阅: http : //improv.sapp.org/doc/class/MidiOutput/controllers/controllers.html

有时您在midi文件中有一些音量事件,因此您无法更改频道音量。 获取序列后,删除以下事件:

 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"); } }} 
    Interesting Posts