2016-03-02 49 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