如何控制MIDI通道的音量

时间:2011-11-04 11:04:50

标签: java midi fadeout volume channel

我有这段代码:

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 个答案:

答案 0 :(得分:6)

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

channel.controlChange(7, value);

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

答案 1 :(得分:0)

有时您在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");
    }
}}