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 中的麦克风获取声音输入,并即时处理它?