我如何在Java或C中监控/采样输出音频

How can I monitor/sample output audio in Java or C?

本文关键字:监控 采样 输出 音频 Java      更新时间:2023-10-16

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

我想知道的是,如果有一种方法是原生的C/c++或Java,这将允许我捕捉任何音频发送到我的计算机(我使用Mac)行在一个类似的方式,我如何捕获一行(即一个样本缓冲区,不断充满PCM数据)。

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

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

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

我相信WavTap代码是麻省理工学院许可的,系统扩展代码是很好的抽象,所以你应该能够适应它为你自己的项目。

为了更好地理解它是如何工作的,OS X和iOS内核编程书中有对第12章中一些技术的解释,以及一个示例音频设备和引擎的可下载代码。