将 CoreMIDI 输入与 AVAudioUnit 一起使用
Posted
技术标签:
【中文标题】将 CoreMIDI 输入与 AVAudioUnit 一起使用【英文标题】:Using CoreMIDI input with AVAudioUnit 【发布时间】:2017-03-20 00:21:15 【问题描述】:我正在尝试实现看起来应该很简单的事情:在 Mac 应用程序中收听 MIDI 消息,并使用这些消息从现有的 AVAudioUnit 乐器中播放音符。
假设:我需要在与我的 CoreMIDI 客户端关联的 MIDIReadBlock(通过带有 MIDIClientRef 的 MIDIInputPortCreateWithBlock
)和我可以从我的 AVAudioUnit 的 AUAudioUnit(通过 scheduleMIDIEventBlock
)获得的 AUScheduleMIDIEventBlock 之间编写一个桥梁。这似乎比它应该的要复杂,因为我会处理原始 MIDI 数据——我觉得音频单元必须支持某种易于与 CoreMIDI 一起使用的 MIDI 抽象,但我找不到任何相关示例这个的。也许有一种方法可以将MIDIOutputPortCreate
与 AV/AUAudioUnit 一起使用?
我正在寻找的是一个将 MIDI 输入直接传输到音频单元的工作示例(最好使用 Swift 3),但如果您知道任何相对最新的相关资源,请也分享这些链接。这些 API 的文档稀少令人沮丧。谢谢!
【问题讨论】:
【参考方案1】:在您的 MIDIReadBlock 循环中接收到的数据包。根据每个数据包的 MIDI 状态,向您的 audioUnit 发送适当的设备事件(例如音符开启)。
例如
osstatus = MusicDeviceMIDIEvent(audioUnit, midiCmd...
【讨论】:
以上是关于将 CoreMIDI 输入与 AVAudioUnit 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 和 CoreMIDI 发送和接收 MIDI