java - 如何用 Java 或 C 监视/采样输出音频?

标签 java c++ c audio

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

我想知道是否有一种 C/C++ 或 Java 原生的方法可以让我以类似的方式捕获发送到我的计算机(我使用的是 Mac)线路的任何音频我如何捕获一行(即不断填充 PCM 数据的示例缓冲区)。

除了读取线路输出数据外,我不想模拟 SoundFlower 的其他功能。

最佳答案

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

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

我相信 WavTap 代码是 MIT 许可的,系统扩展代码被很好地抽象了,所以你应该能够针对你自己的项目进行调整。

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

关于java - 如何用 Java 或 C 监视/采样输出音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25051530/

相关文章:

java - Android searchview 添加行到 ListView

java - [处理/Java]可见性/分层问题

c# - 将 System::String^(C# 字符串)转换为 C++ std::string

c - 我无法使用 g_object_get 或 g_object_get_property 在 GtkImage 上获取 "file"属性

java - 滚动面板不只在图像上显示拇指

c++ - 如何解释自定义脚本语言?

c# - 用于开发皮肤应用程序的最佳框架是什么?

c - autotools:一个项目有一个可执行文件、一个共享对象和一个 "shared"内部库

c - 函数指针 IAR (typedef void)

java - 改变 JCombobox 的高度