如何解决将 MIDI 发送到 iOS 模拟器
我想从我的 mac 电脑发送 Midi 消息到 iOS 模拟器来测试我的 iOS 应用程序(我的真正的 iPad 需要维修,所以我现在坚持使用模拟器)。
我在 Audio&Midi 实用程序中找到了有关创建网络会话的信息,并在 iOS 模拟器出现在目录中后单击连接。我保持端口不变(5004)。
在我的应用程序代码中,我创建了一个输入端口并将其链接到默认网络会话:
MIDIPortRef inPort = 0;
MIDIInputPortCreate(client,CFSTR("Input port"),MyMIDIReadProc,(bridge void * _Nullable) player,&inPort);
session = [MIDINetworkSession defaultSession];
session.enabled = YES;
session.connectionPolicy = MIDINetworkConnectionPolicy_Anyone;
MIDIPortConnectSource(inPort,session.sourceEndpoint,(bridge void * _Nullable) player);
我还添加了 MIDI 服务发现:
browser = [[NSNetServiceBrowser alloc] init];
browser.delegate = self;
browser searchForServicesOfType:MIDINetworkBonjourServiceType /* i.e. @"_apple-midi._udp"*/
inDomain:@""];
然后我实现了一些 NSNetServiceDelegate 和 NSNetServiceBrowserDelegate 方法。
-(void)netServiceDidResolveAddress:(NSNetService *)service {
if (![[service name] isEqualToString:[[UIDevice currentDevice] name]]) {
[service setDelegate:nil];
NSLog(@"Resolved service name: %@ host name: %@",[service name],[service hostName]);
MIDINetworkHost* host = [MIDINetworkHost hostWithName:[service name] netService:service];
MIDINetworkConnection* newConnection = [MIDINetworkConnection connectionWithHost:host];
[session addConnection:newConnection];
NSLog(@"Connected to %@",[service name]);
}
}
- (void)netServiceBrowser:(NSNetServiceBrowser *)aBrowser didFindService:(NSNetService *)aService {
NSLog(@"Found service %@ on %@",[aService name],[aService hostName]);
if (![[service name] isEqualToString:[[UIDevice currentDevice] name]]) {
[service setDelegate:nil];
NSLog(@"Resolved service name: %@ host name: %@",[service hostName]);
MIDINetworkHost* host = [MIDINetworkHost hostWithName:[service name] netService:service];
MIDINetworkConnection* newConnection = [MIDINetworkConnection connectionWithHost:host];
[networkSession addConnection:newConnection];
NSLog(@"Connected to %@",[service name]);
}
这两个委托方法没有被调用。
此外,当我发送 midi 消息时(从 Logic 使用网络会话 1 作为端口),不会调用 ios 应用程序 midi 处理程序。
更新: 我手动创建了网络连接(没有发现),传递了 Audio&Midi 实用程序中显示的 Bonjour 名称和 IP 地址
MIDINetworkHost *host = [MIDINetworkHost hostWithName:@"Mac mini xxx" address:@"xxx.xxx.0.10" port:5004];
MIDINetworkConnection *connection = [MIDINetworkConnection connectionWithHost:host];
[networkSession addConnection:connection];
MyMIDIReadProc 处理程序在调试模式下被调用一次,第一个音符开始播放,但此后不久被剪切,随后的 MIDI 消息被忽略。还有低沉的嗡嗡声。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。