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

时间:2018-10-31 14:01:56

标签: swift macos core-audio

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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