录制一个应用程序的声音

时间:2012-11-05 20:17:54

标签: objective-c cocoa audio record capture

我想为Mac OS X开发一个应用程序来记录来自一个应用程序的音频。

我和Soundflower一起玩,但它只能抓住完整的系统音频 我知道我必须使用HAL插件。此插件是从使用Core Audio的应用程序加载的,然后我可以与插件通信以获取音频。

我的问题是:这样的插件是怎样的?互联网上有例子吗?我还没有找到关于这个主题的任何内容。

1 个答案:

答案 0 :(得分:4)

现在您已经决定使用Cocoa注入是解决问题的可行方案,让我们从那里开始。

你需要做的是找出应用程序中的ObjC类如何设置播放音频,并挂钩设置不同的AU代替默认系统。

有两个选项(除了从头开始编写自己的自定义AU,您不需要这样做)。您可以使用AUHAL作为AU,并从AUHAL捕获数据。从挂钩的角度来看,这有点容易,但这意味着你必须编写呈现并保存音频的代码。或者你可以挂钩保存到文件AU,这有点难以连接,但是一旦你这样做就会自动处理渲染。

那么,你怎么挂东西?好吧,大多数高级CA调用都写入只写入当前输出。如果应用程序正在这样做,您只需要在启动时挂钩以找到替换AU并将其设置为当前输出,而不是默认值。另一方面,如果应用程序直接写入存储在变量中的AU,则必须将其挂钩以将AU存储为变量。如果它正在构建AU的图形,您可以在图形中替换默认输出,或者将它们放在它前面。

有关大多数可能性的大多数硬件的示例代码片段,请参阅TN2091。它没有向您展示如何将它们放在一起,并且它有更多关于设置输入而不是输出(因为这更难),并且术语可能会令人困惑,但如果您仔细阅读它,您应该能够找到它你需要的零件。

如果你之前还没有构建一个简单的AU主机和AU插件,你真的应该花时间来完成整个Audio Unit Development Fundamentals指南。 (如果你认为你真的不需要知道所有那些简单的事情,你就错了。Why CoreAudio is Hard解释了一半的原因; OS X版本版本之间的变化是另一半的原因。)

您可能还想查看CocoaDev's CoreAudioAndAudioUnitsTutorial页面的占位符页面,找到一个没有人写过的完整教程,并提供了许多有用内容的链接。

同时,如果将整个MTCoreAudio框架注入到应用程序中是可行的,那么它会提供大量不错的完整样本。事实上,即使您不打算使用该框架,也值得阅读Overview文档,可能还有源代码。