2011-11-04 97 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"); 
    } 
}}