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