如何在Java或C中监视/采样输出音频?

时间:2014-07-31 05:38:51

标签: java c++ c audio

最近我一直在尝试对我在电脑上播放的音频进行实时可视化(通过任何任意程序,例如Spotify),但我一直在使用SoundFlower将输出音频输入到假行中

我想知道的是,如果有一种C / C ++或Java原生的方式可以让我捕获发送到我的计算机的任何音频(我使用的是Mac)以类似于我如何捕获一条线的方式排队(IE是一个连续填充PCM数据的样本缓冲区)。

除了阅读输出数据外,我不想模仿SoundFlower的其他功能。

1 个答案:

答案 0 :(得分:1)

我建议看看WavTap的源代码,它是SoundFlower的一个分支,它只关注捕获系统的默认音频输出。

SoundFlower和WavTap都可以通过安装kernel extension来工作,这会添加一个可以路由音频的附加音频设备。然后,他们从此设备捕获音频。 WavTap在启动时将其设置为默认设备,以便自动捕获系统的整体输出,而无需用户明确设置路由。

我相信WavTap代码已获得MIT许可,并且系统扩展代码已经过很好的抽象,因此您应该能够为自己的项目进行调整。

为了更多地了解其工作原理,OS X and iOS Kernel Programming书中对第12章中的一些技巧以及示例音频设备和引擎的可下载代码进行了解释。