将 CoreMIDI 的晦涩语言转换为 iOS 自然语言。
sendPitchbend
_midiSession = [MFMIDISession sessionWithName:@"Your App Name"];
_midiSession.networkEnabled = YES;
_midiSession.restorePreviousConnectionStates = YES;
_midiSession.autoEnableDestinations = YES;
_midiSession.channel = 0;
// Create the Virtual Source to expose to other apps
[_midiSession createVirtualSourceWithName:_midiSession.name]; // disabled by default
// ...some time later...
[_midiSession sendNoteOn:64 velocity:127];
[_midiSession sendPitchbend:0x3FFF];
// etc
更多内容,请参阅 MFMIDISession.h
。
连接: MIDI 消息的源或目的 消息: NoteOn, NoteOff, CC, Pitchbend, Program Change, Channel Aftertouch, Poly Aftertouch, Sysex
虚拟源/目的端: 我们在应用中创建的命名连接,会在其他应用中显示。请注意,当应用是虚拟源时,它意味着它是其他应用的 MIDI 源。本地上,它作为 MIDI 目的端出现,因为我们将其输出到其中
与 enabling的区别:“connect” 指的是发现物理/虚拟/wifi 连接的存在。所有设备都是自动连接的,即在系统扫描中被发现。 “enable” 表示当您通过 MIDISession 发送消息时,它们是否会发送/接收 MIDI 消息。这在代码中有点混乱,因为在代码中将网络连接 en/disabling 确实会从 MIDINetworkSession 中 “connect/disconnect” 主机(见上面的说明)。这是 CoreMIDI 中 MIDIFish 寻求标准化的异常术语的一个例子。
设置 restorePreviousConnectionStates
会导致当重新发现之前设置的连接时,基于它们上一次运行时的值启用/禁用它们。目前,它不会恢复虚拟连接或基于 IP 的网络连接
网络连接具有其源和目的端耦合并行控制,即启用/禁用其中一个会使另一个启用/禁用。
MIDINetworkHost通过Bonjour发现的NSNetService创建目前不可靠。我认为这是由于将IPv6地址解释为IPv4(0.0.0.0:5004),而实际的IPv4地址(NSNetService::resolve结果为2个地址)被忽略。在客户端中,我们手动解析NSNetService,然后用带有IP/端口的MIDINetworkHost实例进行连接。(请参阅https://developer.apple.com/library/mac/qa/qa1298/_index.html)