通过虚拟输出使用 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和AKSampler链接无声音

如何将 AKSequencer 连接到 AKCallbackInstrument?

如何使用 Audiokit 可视化当前的 AKSequencer 位置?

为啥新的 AKSequencer 不产生任何声音?