C++/Python中的声音监控

1 投票
2 回答
2228 浏览
提问于 2025-04-15 16:31

我在寻找一个API(或者一些信息,告诉我该从哪里开始),最终可以让我监控电脑播放的声音。

我的最终目标(其实这只是一个阶段性目标)是做一个示波器。

除了谷歌(搜索结果不太理想),我应该从哪里开始了解电脑处理声音的相关知识(特别是Mac电脑),以及如何获取这些声音

谢谢!

2 个回答

1

我以前用过一个组合,里面有SoundflowerPyAudio,是为了类似的目的。

Soundflower的作用是把所有的声音输出都转到一个输入上,这样PyAudio就可以读取这些声音了。

如果你想用C++而不是Python,可以使用PortAudio,因为PyAudio就是基于这个库的。

3

正如 @cobbal 提到的,在 Mac OS X 上,你需要以某种方式使用 PortAudio 来获取正在播放的音频。另一种方法是使用一个有插件接口的音频播放器,然后把你的代码写成这个播放器的插件。不过,使用 CoreAudio 的解决方案应该可以让你监控 Mac 上播放的所有声音。

你的 CoreAudio 代码在 Windows 和 Linux 上是完全不可移植的。目前没有通用的解决方案。在 Windows 上,你可能想使用 WaveIn/WaveOut API,除非你有专业设备,那样的话你可能会想用 ASIO。在 Linux 上,我不太确定;我觉得你可能可以接入 ALSA/PulseAudio 来获取音频。除非你有专业设备,那样的话你可能会想用 JACK。

如果你想要一个可移植的解决方案,你可能需要认真考虑插件的选项。找一个在所有平台上都能用的免费媒体播放器,然后为它制作一个插件。

如果你想做一个示波器,你需要找一本关于数字信号处理("DSP")的书。你可能会想使用离散傅里叶变换("DFT")来从你的离散音频样本中提取频率信息;DFT 库通常被称为 "FFT" 库("FFT" 是 "快速傅里叶变换" 的缩写)。

我最喜欢的关于 DSP 的书是:Understanding Digital Signal Processing,作者是 Richard G. Lyons。

补充一下,很多媒体播放器都有“可视化”插件,其中一些是基于频率的显示。(有些甚至叫“scope”。)有没有可能已经有一个媒体播放器可以做到你想要的显示效果呢?

撰写回答