使用AppleSequencer播放MIDI文件时receivedMIDIController未触发求助
AppleSequencer无法触发receivedMIDIController回调的成因及解决方案
- Sequencer轨道事件转发未开启全类型支持:AppleSequencer的
MusicTrack默认仅转发音符类事件到绑定的MIDI端口,CC控制器事件需要显式开启全事件转发权限,调用MusicTrackSetProperty传入轨道对象、kMusicTrackProperty_AllMidiEventsEnabled属性、kCFBooleanTrue值即可。 - 全局轨道未绑定输出端口:大量标准MIDI文件会把音量、表情、踏板等CC事件存放在索引为0的全局轨道中,若仅绑定普通音轨的输出到VirtualPort,全局轨道的CC事件会被默认丢弃,需要单独获取全局轨道并绑定到对应的MIDI端点。
- 监听回调的事件掩码配置不全:注册VirtualPort的输入监听器时,若事件掩码仅包含
kMIDIEventNoteOn、kMIDIEventNoteOff枚举值,会自动过滤CC类事件,需要在掩码中添加kMIDIEventController枚举值开启控制器事件监听。
快速排查方法:可通过CoreMIDI的
MIDIFileLoad接口加载你的测试MIDI文件,遍历所有轨道的事件列表,确认控制器事件为标准kMIDIEventController类型,排除文件本身的事件格式异常问题。
内容的提问来源于stack exchange,提问作者Memtimen
相关产品推荐
相关产品推荐

