2016-03-02 171 views
0

我想用NAudio一次播放多個MIDI樂器。我找到了關於如何演奏單個MIDI樂器的說明,並且我找到了有關如何將單個MidiEventCollection中的多個音軌導出到文件的說明。但是,我似乎無法將這些想法放在一起。使用NAudio播放(不錄製/導出)多個MIDI音軌

下面是一些愚蠢的示例代碼我通過我的所有的MIDI樂器循環,打每一個主要的第三和諧:

var midiOut = new MidiOut(0); 
for (var i = 0; i <= 127; i++) 
{ 
    midiOut.Send(MidiMessage.ChangePatch(i, 1).RawData); 
    midiOut.Send(MidiMessage.StartNote(60, 127, 1).RawData); 
    midiOut.Send(MidiMessage.StartNote(64, 127, 1).RawData); 
    Thread.Sleep(500); 
} 

這工作得很好,當然,但如果我想要一個CE要用不同的樂器演奏,我會很失敗。我只有一個MIDI設備,並且一次只能有一個連接,並且MidiOut似乎不支持添加多個音軌。

另一方面,MidiEventController代碼看起來像是我想要的或多或少,但我只看到將它導出到文件的示例,而不是實際播放事件。我放在一起這樣的事情:

var events = new MidiEventCollection(1, 120); 
var track = events.AddTrack(); 
var setInstrument = new PatchChangeEvent(0, 1, 66); 
var play = new NoteOnEvent(0, 1, 60, 127, 1000); 
track.Add(setInstrument); 
track.Add(play); 

但在這一點上,我無法弄清楚如何真正發揮軌道,而不是將其導出。請幫助!

+0

@CL。完成...... – spender

回答

1

如果您想同時播放兩個不同的音色,這就是MIDI通道的用途。

可供您使用的是16個頻道,如果您使用的是GM計劃,其中第10頻道保留用於打擊樂器。

在你的第一個代碼段,你似乎是使用 MIDI通道1

如何使用一個以上的頻道和加載不同的補丁爲每個通道?

+0

謝謝,這使得當然有噸感。我會在第一次機會嘗試這個。 – Samo