2017-02-27 11 views
-1

我需要檢查一個應用是否在發出某種聲音。這個應用程序只產生一個特定的聲音,所以只需檢查應用程序中是否有任何聲音的解決方案也可以。如何以編程方式檢查應用程序是否發出特定聲音?

我並不需要找出哪些應用發出的聲音或類似的東西。我知道應該會產生聲音的應用程序,我知道它會發出什麼聲音,我只需要檢測此聲音播放的確切時間。

我知道的唯一解決方案是聽整個操作系統的音頻輸出,然後用一些音頻識別軟件檢測我的特定聲音,但如果在背景上播放音樂或電影時它將無法正常工作,所以它不是一個選項。

我需要一個解決方案,通過WinAPI方法來做到這一點。這裏的語言不是很重要 - 我可以使用C#,JavaScript,Python或其他語言。我只需要找出如何在Windows 7中

+1

我認爲downvote是因爲問題很模糊,而且您還沒有提供任何證據表明您已經做了很多工作來找到答案。這裏的許多答案需要很多時間,而且有些人希望你花一些時間來尋求答案。 – user34660

+0

也許與Windows語音識別引擎? https://msdn.microsoft.com/en-us/library/jj127860.aspx用你的聲音(WAV)作爲輸入語法:https://msdn.microsoft.com/en-us/library/jj127911.aspx –

+0

我想這個支票只有當應用程序實際上是「唱歌」時(使用_目前的持續時 - 具有真正的意義),而不是讓我們說應用程序是播放聲音還是能夠播放聲音(這兩種情況不會沒有太大意義)。因此,如果在某個時間點,揚聲器會聽到聲音,那麼您需要確定產生該聲音的應用程序(進程ID,窗口)(當多個Web瀏覽器打開多個選項卡時,這會很有用,並且在其中一部分Flash內容會自動開始播放)。 – CristiFati

回答

0

這裏的一般方法是從給定的進程跟蹤調用OS播放音頻提取由特定的應用程序產生的聲音的通用方法。這些調用通常被稱爲「系統調用」。

這將只顯示直接試圖通過一個過程來產生聲音。

唯一最難的部分在這裏是找出所有的系統調用,Windows中的播放聲音。

This question對如何跟蹤系統調用在Windows

0

你有沒有看着類似的主題,以便回答與IAudioSessionManager2和相關API一堆有用的.Net包裝了一些答案:Controlling Application's Volume: By Process-ID

我想的

  1. 是一般的方法按進程名
  2. 尋找IAudioSession通過訂閱其事件
  3. 聆聽事件

應該爲你做它。

而且不要忘記,你應該泵,它可能需要在非UI應用程序的一些明確的代碼Windows消息。在UI應用程序中,這是Application.Run在內部所做的。

相關問題