我想用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);
}
这工作得很好,当然,但如果我想要一个C
和E
要用不同的乐器演奏,我会很失败。我只有一个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);
但在这一点上,我无法弄清楚如何真正发挥轨道,而不是将其导出。请帮助!
@CL。完成...... – spender