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

时间:2018-07-11 05:41:10

标签: ios xamarin usb midi coremidi

我正在使用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 }) });
            }
        }

有时只听起来一个音符,有时两个音符, 我希望这三个音符总是总是同时发声, 我该怎么办?

2 个答案:

答案 0 :(得分:0)

MidiPacket仅包含一堆要发送的字节。因此,您可以将它们串联起来:

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

甚至使用运行状态:

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

答案 1 :(得分:0)

请参见midi.org上的以下页面-基本上,您需要启用“多边形模式”。

频道模式消息

控制器编号124到127用于在打开或关闭Omni模式之间进行选择,以及在Mono模式或Poly模式下进行选择。

当选择“ Poly”模式时,传入的“ Note On”消息将被复音播放。这意味着,当接收到多个“音符开启”消息时,每个音符都被分配了自己的声音(取决于合成器中可用的声音数量)。结果是可以同时演奏多个音符。

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

希望有帮助:)