2011-11-04 66 views
4

我有这样的代码:如何控制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秒钟内淡出。我怎么能这样做?我知道这些方法:

​​

但这些不会改变任何音量!我不知道如何使用这些方法。 noteOn()在播放时如何更改频道的音量?

+0

是的,我知道,但我不知道,在controlChange“7”则是音量控制器:) – victorio

回答

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