首页 > 解决方案 > 如何在现场系统声音中识别声音“峰值”?

问题描述

我想制作一个程序,当系统的基本声音播放任何类型的声音时,它会执行特定的命令。就像你在 facebook 上收到一条消息一样,你会听到一点警报声。我想认识这个“高峰”。在python中怎么可能?

标签: pythonaudio

解决方案


</嘿>

获取您的音频数据

我认为您正在寻找的是以某种方式回送系统输出,以便您可以阅读它,就好像您的操作系统认为它是输入一样。有不同的方法可以做到这一点(取决于你的操作系统)。

但是,由于在您提到您的操作系统是 Windows 8.1 的评论中,您可以使用PyAudio -> PyAudio_portaudio的一个分支:这是普通的PyAudio,但扩展为使用WASAPI将您的 Windows 系统输出回送回您可以在 Python 中检索的内容。

如果我遗漏了任何内容,请参阅有关使用 Python 记录系统输出的其他 SO 帖子,并感谢@mate将链接发布到PyAudio fork

这是一个快速的解释:

PyAudio 官方版本无法记录输出。但在 Windows Vista 及更高版本中,引入了一个新的 API,即 WASAPI,其中包括以环回模式打开流到输出设备的能力。在这种模式下,流的行为类似于输入流,具有记录输出音频流的能力。

要设置模式,必须设置一个特殊标志(AUDCLNT_STREAMFLAGS_LOOPBACK, https ://msdn.microsoft.com/de-de/library/windows/desktop/dd316551(v=vs.85).aspx )。由于官方版本不支持此标志,因此需要编辑 PortAudio 和 PyAudio,以添加环回支持。

新选项:“as_loopback”:(true|false)

分析您的数据

这将为您逐块提供数据(以您指定的块大小)。从那里,您可以进行任何您想要的 DSP / 峰值分析,以计算已播放的声音/具有任何属性。

这是一个快速示例,可帮助您开始在 Python 中进行峰值检测。为了获得更准确的结果,也许您可​​以存储要识别的 .wav 文件并执行互相关以查看是否播放了相同的 .wav 文件。


推荐阅读