C++/Python 中的声音监控

Posted

技术标签:

【中文标题】C++/Python 中的声音监控【英文标题】:Sound Monitoring in C++/Python 【发布时间】:2009-11-30 03:40:02 【问题描述】:

我正在寻找一个 API(或一些关于从哪里查看/开始的信息),最终将允许我监控计算机正在播放的声音。

我的最终目标(嗯,最终肯定会成为垫脚石)是一台示波器。

我应该从哪里开始(除了 Google,它产生了令人不满意的结果)以了解更多关于计算机(尤其是 Mac)处理的声音以及如何获得它。 p>

谢谢!

【问题讨论】:

【参考方案1】:

正如@cobbal 所说,在 Mac OS X 上,您需要以某种方式使用 PortAudio 来获取播放时的音频。唯一的另一种方法是使用具有插件 API 的音频播放器,然后将您的代码编写为该播放器的插件。但是 CoreAudio 解决方案应该可以让您监控 Mac 上播放的所有声音。

您的 CoreAudio 代码根本无法移植到 Windows 和 Linux。目前没有便携式解决方案。在 Windows 上,您可能想要使用 WaveIn/WaveOut API,除非您有专业设备,在这种情况下您可能想要使用 ASIO。在 Linux 上,我不确定;我认为您可能会连接到 ALSA/PulseAudio 来获取音频。除非你有专业装备,否则你可能会想使用 JACK。

如果您想要一个可移植的解决方案,您可能需要认真考虑插件选项。找到一个适用于所有平台的便携式免费软件媒体播放器,并为此制作一个范围插件。

对于示波器,您将需要一本关于数字信号处理 (“DSP”) 的书。您可能希望使用离散傅立叶变换 (“DFT”) 从离散音频样本中获取频率信息; DFT 库可能被称为“FFT”库(“FFT”是“Fast Fourier Transform”的缩写)。

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

编辑:顺便说一句,大多数媒体播放器都有“可视化”插件,其中一些是基于频率的显示。 (有些甚至有“范围”之类的名称。)是否有可能有一个媒体播放器已经完全可以显示您想要的显示?

【讨论】:

JACK 在 OSX、Linux、Windows 上运行。 JACk 在上述所有情况下都运行,但我不确定它是否可以挂钩所有声音的输出,或者它是否只能挂钩使用 JACK 播放的音频流。如果 JACK 可以捕获所有音频输出,即使音频不是使用 JACK 播放的,那么它是解决问题的完美跨平台解决方案。 太棒了,谢谢!这更多是为了我个人的乐趣和教育,而不是其他任何事情,所以使用 CoreAudio 和 PortAudio 应该可以做到!谢谢!【参考方案2】:

我过去曾将Soundflower 和PyAudio 组合用于类似目的。

Soundflower 允许您将所有音频输出路由到一个输入,然后 PyAudio 可以读取该输入。

如果您希望使用 c++ 代替 python,请使用 PyAudio 所基于的库 PortAudio。

【讨论】:

感谢 cobbal,我一定会更多地研究 Soundflower 和 PyAudio。当然,还有 PortAudio。

以上是关于C++/Python 中的声音监控的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 中的 playsound 模块同时播放两种声音?

从存储在 Python 变量中的数据中播放声音

开源Python做的火币和ZB搬砖差价监控程序

如何从 python 中的麦克风获取声音输入,并即时处理它?

如何在播放该歌曲的声音文件时逐字母读取python中的歌曲[关闭]

声音不会一直播放! - Pygame,Python