通过虚拟输出使用 AKSequencer 发送 midi
Posted
技术标签:
【中文标题】通过虚拟输出使用 AKSequencer 发送 midi【英文标题】:Send midi with AKSequencer over virtual output 【发布时间】:2017-11-30 07:54:25 【问题描述】:我正在尝试使用 AKSequencer() 从一个 .mid 文件中发送一个 midi 数据,在一个虚拟输出上以在应用程序外部使用它(下面有更多详细信息)。 我的问题是我的 AKSequencer 没有在我的应用程序之外发送 midi,就像我想对 virtualOuput 端口做的那样。
// My midiOutput is set like this:
let midiOut = AKMIDI()
midiOut.createVirtualOutputPort()
midiOut.openOutput()
//And my AKSequencer connect to the midiOuput like this:
sequencer.setGlobalMIDIOutput(midiOut.virtualOutput)
我设置了一个 AKSampler() 以确保我的 AKSequencer 工作正常。
我认为我的问题提供了从我到 midiOutput 的连接,或者我使用 AKSequencer 而不是像我想象的那样设计发送 midi。
为了详细说明,我正在尝试通过蓝牙将 MIDI 从 ios 应用程序发送到 DAW。感谢 CABTMIDILocalPeripheralViewController。当两个设备建立连接时,很容易建立一个连接来发送 MIDI。我用 AKMIDI().sendNoteOnMessage() 实现了发送 midi,所以我确定连接不是问题。
【问题讨论】:
问题出在哪里? AKSequencer 不在 virtualOutput 上发送 midi。也许我对虚拟输出有误。用于在应用程序外部发送 midi 的对象是否正确? AKSequencer 可以将 MIDI 发送到 AKMIDICallbackInstrument 或 AKMIDIListener 对象。您可以通过 virtualOutput 将 MIDI 从回调乐器或 midi 侦听器重新路由到其他应用程序。如果您想将 MIDI 发送到硬件或其他输出,例如 CoreMIDI Network Session,您需要启用该输出,例如midi.openOutput("Session 1")
。您可以通过midi.destinationNames
获取所有目的地,并让用户选择他们想要打开的目的地。然后使用用户选择的目标名称打开该输出。
【参考方案1】:
使用AKSequencer
向外部发送 MIDI 有点棘手。您需要使用AKMIDICallbackInstrument
或您自己的AKMIDIListener
从音序器获取MIDI 并通过AKMIDI
输出在您的应用程序之外重新路由。
在这个线程上有一个讨论: https://groups.google.com/forum/#!topic/audiokit/6VkayJMpMvY
另外,您可能想查看我在AKSequencer
上构建的 MIDISequencer 库,其中包含 iOS 和 Mac 示例:
https://github.com/cemolcay/MIDISequencer
【讨论】:
以上是关于通过虚拟输出使用 AKSequencer 发送 midi的主要内容,如果未能解决你的问题,请参考以下文章
Swift - AudioKit AKMidi 到 AKSequencer
如何使用 AudioKit 的新 AKSequencer 播放 MIDI
如何将 AKSequencer 连接到 AKCallbackInstrument?