【发布时间】:2018-10-31 14:01:55
【问题描述】:
我在 MacOS 上的 Swift 中成功使用 MTAudioProcessingTap 来操纵我的音频路由以进行实时播放和导出。但是,在运行时应该发生的具体路由取决于用户的选择。我想要做的是在创建分接头时将一对 Ints 传递给 MTAudioProcessingTapProcessCallback,以便我可以使用单个回调定义,该定义可以使用这些 Ints 来确定如何进行路由。问题是回调是一个无法捕获上下文的 C 函数指针。
我想也许我可以使用 MTAudioProcessingTapCallbacks 的 clientInfo 参数来保存我需要的值,但是我找不到任何关于如何从 MTAudioProcessingTapProcessCallback 中访问此参数的文档。
我有 32 种可能的路由组合,不幸的是,此时我看到的唯一其他选项是声明 32 个单独的 MTAudioProcessingTapProcessCallbacks,然后在创建分接头时选择要使用的选项。但是,如果我只有一个 MTAudioProcessingTapProcessCallback,它可以根据传入的数据做出简单的决定,那对我来说会容易得多。
【问题讨论】:
-
如果传递数据变得过于繁重,请考虑在您的应用程序中使用单例对象(如果您还没有的话),这样可以促进数据传输。我遇到过两个对象需要共享数据但相距甚远的情况,因此简单地创建一个单例,第一个对象更新第二个对象读取的数据对我来说更经济。当您的用户点击时,第一个对象会在与第二个对象通信之前使用整数值更新单例,因此第二个对象始终知道在每次点击后可以读取这些值。
-
(comment con't) 也就是说,子类化通常应该是您的第一次尝试。如果您可以将对象子类化并注入您自己的自定义属性,我可能会这样做。我从未与
MTAudioProcessingTapProcessCallback合作过,所以我不能说,但我想你已经探索过这个选项。
标签: swift macos core-audio