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

And*_*ewH 6 c c++ java audio

最近我一直在试验我在计算机上播放的音频的实时可视化(通过任何任意程序,如Spotify),但我一直在使用SoundFlower将输出音频输入到假行中.

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

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

j b*_*j b 1

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

SoundFlower 和 WavTap 都通过安装内核扩展来工作,该扩展添加了一个可以将音频路由到的附加音频设备。然后他们从该设备捕获音频。WavTap 在启动时将其设为默认设备,以便自动捕获系统的整体输出,而无需用户显式设置路由。

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

为了更多地了解其工作原理,OS X 和 iOS 内核编程一书在第 12 章中解释了一些技术,并提供了示例音频设备和引擎的可下载代码。