播放(不是 recording/exporting)多个 MIDI 音轨

Playing (not recording/exporting) multiple MIDI tracks

我希望使用 NAudio 同时播放多个 MIDI 乐器。我找到了有关如何演奏单个 MIDI 乐器的说明,并且找到了有关如何将单个 MidiEventCollection 中的多个音轨导出到文件的说明。但是,我似乎无法将这些想法放在一起。

这是我的一些愚蠢的示例代码,它循环遍历我所有的 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);

但此时我不知道如何实际播放曲目,而不是导出曲目。

如果你想同时播放两个不同的音色,这就是 MIDI 通道的用途。

您可以使用 16 个频道,如果您使用 GM 方案,其中第 10 个频道保留用于打击乐。

在您的第一个代码片段中,您似乎只使用 MIDI 通道 1。

使用多个通道并为每个通道加载不同的补丁如何?