如何以编程方式检查应用程序是否发出特定声音?

时间:2017-02-27 19:47:43

标签: windows winapi audio windows-7

我需要检查某个应用是否发出了某种声音。这个应用程序只产生一个特定的声音,因此只需检查应用程序中是否有任何声音的解决方案也可以正常工作。

我不需要找出哪个应用发出声音或类似的东西。我知道应该产生声音的应用程序,我知道它会发出什么样的声音,我只需要检测这个声音播放的确切时间。

我所知道的唯一解决方案是收听整个操作系统的音频输出,然后使用某些音频识别软件检测我的特定声音,但如果在背景上播放音乐或电影,它将无法正常工作,所以这不是一个选择。

我需要一个通过WinAPI方法来实现的解决方案。这里的语言不是很重要 - 我可以使用C#,javascript,Python或其他语言。我只需要找到一种关于如何在Windows 7中提取特定应用程序产生的声音的一般方法。

2 个答案:

答案 0 :(得分:0)

此处的一般方法是跟踪从给定进程到OS的调用以播放音频。这些呼叫通常称为"系统调用"。

这将仅显示进程产生声音的直接尝试。

这里唯一最困难的部分是识别所有在Windows中播放声音的系统调用。

This question对如何在Windows上跟踪系统调用有一些答案

答案 1 :(得分:0)

您是否看过类似主题的SO答案以及IAudioSessionManager2及相关API的一堆有用的.Net包装:Controlling Application's Volume: By Process-ID

我认为

的一般方法
  1. 按流程名称
  2. 查找IAudioSession
  3. 通过IAudioSessionEvents
  4. 订阅其活动
  5. 聆听OnStateChanged事件
  6. 应该为你做。

    不要忘记你应该在非UI应用程序中输出可能需要一些显式代码的Windows消息。在UI应用程序中,这就是Application.Run内部所做的事情。