如何使用Xamarin在iOs上通过USB发送多个MIDI事件



我使用Core Midi在Xamarin iOs应用程序上通过USB发送Midi事件,我是基于这个例子https://developer.xamarin.com/samples/monotouch/CoreMidiSample/

我想修改上面的例子,以便通过USB同时发送多个NoteOn MIDI事件,不幸的是,它一次只能发送一个NoteOn MIDI事件,

这是修改后的

void SendNote ()
{
for (int i = 0; i < Midi.DestinationCount; i++) {
var endpoint = MidiEndpoint.GetDestination (i);
// play note
outputPort.Send (endpoint, new MidiPacket [] { new MidiPacket (0, new byte [] { 0x90, 60, 127 }) });
outputPort.Send(endpoint, new MidiPacket[] { new MidiPacket(0, new byte[] { 0x90, 64, 127 }) });
outputPort.Send(endpoint, new MidiPacket[] { new MidiPacket(0, new byte[] { 0x90, 68, 127 }) });
}
}

有时只听一个音符,有时听两个音符,我希望这三个音符总是同时响起,我该怎么做?

MidiPacket只包含一堆要发送的字节。所以你可以把它们连接起来:

new byte [] { 0x90, 60, 127, 0x90, 64, 127, 0x90, 68, 127 }

甚至使用运行状态:

new byte [] { 0x90, 60, 127, 64, 127, 68, 127 }

请参阅下面midi.org上的页面-基本上您需要启用"poly-mode"。

通道模式信息

控制器编号124至127用于在全模式开启或关闭之间进行选择,以及在单模式或多模式操作之间进行选择。

选择Poly模式时,传入的Note On消息将以复调方式播放。这意味着,当收到多条Note On消息时,每个音符都会被分配自己的语音(取决于合成器中可用的语音数量(。结果是同时播放多个音符。

https://www.midi.org/articles-old/about-midi-part-3-midi-messages

希望能有所帮助:(

最新更新