我想为Mac OS X开发一个应用程序来录制来自一个应用程序的音频。
我使用了Soundflower,但它只捕获了整个系统的音频。
我知道我必须使用HAL插件。该插件是从使用Core audio的应用程序加载的,然后我可以与该插件通信以获取音频。
我的问题是:这样的插件是什么样子的?互联网上有没有这样的例子?我还没有找到任何关于这个话题的东西。
发布于 2012-11-13 04:02:56
既然您已经确定使用Cocoa注入是解决问题的可行方案,那么让我们从这里开始。
您需要做的是找出应用程序中的ObjC类是如何设置播放音频的,并挂钩以设置一个不同的AU来代替默认系统。
有两个选项(除了从头开始编写您自己的自定义AU之外,您不需要这样做)。您可以使用AUHAL作为AU,并从AUHAL捕获数据。从连接的角度来看,这会简单一点,但这意味着你必须编写渲染和保存音频的代码。或者你可以只挂接一个保存到文件的AU,这有点难挂接,但一旦你这样做了,它就会自动渲染。
那么,你是如何把东西挂起来的呢?大多数更高级别的CA调用都是写到当前输出的。如果应用程序是这样做的,你只需要在启动时挂接,找到你的替代AU,并将其设置为当前输出,而不是默认输出。另一方面,如果应用程序直接写入AU,并将其存储在变量中,则必须将其挂钩以将AU存储为变量。如果它正在构建a的图表,您可以替换默认输出,或者将您的输出放在图表中的默认输出之前。
有关大多数困难部分的示例代码片段,请参阅TN2091以了解大多数可能性。它没有向您展示如何将它们组合在一起,而且它有更多关于设置输入而不是输出的内容(因为这更难),并且术语可能会令人困惑,但如果您仔细阅读它,您应该能够找到所需的部分。
如果您以前还没有构建过简单的AU主机和AU插件,那么您真的应该花点时间通读整个Audio Unit Development Fundamentals指南。(如果你不认为你真的需要知道所有这些才能做一些简单的事情,那你就错了。Why CoreAudio is Hard解释了一半原因;OS版本之间的变化是另一半原因。)
您可能还想在CocoaDev's CoreAudioAndAudioUnitsTutorial页面上查找占位符页面,以获得没有人编写过的完整教程,其中包含许多有用内容的链接。
同时,如果将整个MTCoreAudio框架注入到应用程序中是可行的,它附带了大量漂亮的、完整的示例。事实上,即使您不打算使用该框架,也值得阅读Overview文档,可能还需要阅读源代码。
https://stackoverflow.com/questions/13239699
复制相似问题