我使用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
希望能有所帮助:(