swift - 如何将自定义数据传递到 MTAudioProcessingTapProcessCallback?

标签 swift macos core-audio

我在 MacOS 上成功地使用 Swift 中的 MTAudioProcessingTap 来操纵我的音频路由以进行实时播放和导出。但是,在运行时应该发生的特定路由取决于用户的选择。我希望能够做的是在我创建水龙头时将一对 Ints 传递给 MTAudioProcessingTapProcessCallback,这样我就可以使用一个回调定义,该定义可以使用这些 Ints 来确定如何进行路由。问题是回调是一个无法捕获上下文的 C 函数指针。

我想也许我可以使用 MTAudioProcessingTapCallbacks 的 clientInfo 参数来保存我需要的值,但是我找不到任何关于如何从 MTAudioProcessingTapProcessCallback 中访问该参数的文档。

我有 32 种可能的路由组合,不幸的是,此时我看到的唯一其他选项是声明 32 个单独的 MTAudioProcessingTapProcessCallbacks,然后在我创建 tap 时选择使用哪个。但是,如果我只有一个 MTAudioProcessingTapProcessCallback 可以根据传入的数据做出简单的决定,那对我来说会容易得多。

最佳答案

我弄清楚了它是如何工作的。为了从 Process 回调中访问 c​​lientInfo 中的数据:

  1. 在 MTAudioProcessingTapInitCallback 中,您必须使用 clientInfo 指针初始化 tapStorageOut

  2. 在 Process 回调中使用 MTAudioProcessingTapGetStorage(tap) 获取该指针并访问数据。

关于swift - 如何将自定义数据传递到 MTAudioProcessingTapProcessCallback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53085231/

相关文章:

ios - SwiftSocket : Can't send more than one TCP message

cocoa - 如何检查 AudioQueue 中的当前时间和持续时间

android - 在 eclipse android 中播放音频不起作用

ios - NSTextView 在使用不同的 NSParagraphStyles 更改属性时更新速度太慢

ios - 您添加 AudioUnit 节点的顺序是什么?

ios - tvOS 中的 Apple 推送通知

ios - Swift:如何将闭包作为函数参数传递

json - 如何使用 Realm Swift 和 ObjectMapper 持久化数组?

image - 将 .pdf 文件更改为 .png Mac OS 10.3 的 shell 脚本

c# - OSX 上 Entity Framework 的单声道支持