如何在实时系统声音中识别声音的“峰值”?

时间:2018-07-10 20:22:04

标签: python audio

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

1 个答案:

答案 0 :(得分:0)

获取音频数据

我认为您正在寻找的是某种方式回送系统输出,以便您可以像操作系统认为其输入一样读取它。有多种方法(取决于您的操作系统)。

但是,由于您在注释中提到的操作系统是Windows 8.1,因此可以使用PyAudio-> PyAudio_portaudio的分支:这是正常的PyAudio,但可以扩展为使用{ {3}}可以将Windows系统的输出环回为可以在Python中检索的内容。

如果我错过了任何事情,请参阅WASAPI,以Python记录系统输出,并感谢this other SO post将链接发布到@mate

这是一个简短的解释:

  

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

     

要设置模式,必须设置一个特殊标志   (AUDCLNT_STREAMFLAGS_LOOPBACK,   PyAudio fork   )。由于官方版本不支持此标志,因此需要   编辑PortAudio和PyAudio,以添加回送支持。

     

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

分析您的数据

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

这是一个快速的示例,可帮助您入门https://msdn.microsoft.com/de-de/library/windows/desktop/dd316551(v=vs.85).aspx。为了获得更准确的结果,您可以存储要识别的.wav文件并执行peak detection in Python以查看是否播放了相同的.wav文件。