基本上,我需要的是挖掘到當前的音頻輸出,並檢查音量的方式,即我需要能夠檢查是否有一些播放音頻設備或不上。如何以編程方式獲取當前的音頻級別?
我並不需要檢查音量設置,但實際播放音頻流的音量。
對不起,我是問如何做到這一點在Windows上的Visual Studio 2008
@mikerobi:形成我推理的一部分 - 如果正在對系統音量計顯示它,必須有是一個系統調用,可以拿回來
基本上,我需要的是挖掘到當前的音頻輸出,並檢查音量的方式,即我需要能夠檢查是否有一些播放音頻設備或不上。如何以編程方式獲取當前的音頻級別?
我並不需要檢查音量設置,但實際播放音頻流的音量。
對不起,我是問如何做到這一點在Windows上的Visual Studio 2008
@mikerobi:形成我推理的一部分 - 如果正在對系統音量計顯示它,必須有是一個系統調用,可以拿回來
這是一個很好的問題。對於32位Windows應用程序,答案是掛鉤到winmm.dll和其他低級音頻控制DLL。在C#我想創建一個包裝類包含的extern方法原型:
public class MyAudioWrapper
{
[DllImport("winmm.dll", EntryPoint = "waveOutGetVolume")]
public extern void GetWaveVolume(IntPtr devicehandle, out int Volume);
...
}
看一看this link對於Windows音頻方法的列表;您可以使用調音臺或僅使用波形控制器來設置音量。你想用什麼來決定要導入的庫。您必須研究如何最好地定義原型,以及如何獲得音頻/混音器設備的句柄。
Vista和更高版本的更好的答案是以環回模式打開音頻流並從中捕獲。 – 2010-10-22 01:48:07
這裏是一個有用的鏈接,Windows API的invokations,而這裏也正是你在找什麼:
http://www.pinvoke.net/default.aspx/winmm.waveOutGetVolume
由於需求變化,你不需要的音頻電平,我建議下面可能會有幫助:
我認爲你需要閱讀的是什麼的輸出流,並通過一些算法,你也許能決定耐候一些分析數據playedback正在playedback與否。要做到這一點,你需要的MMDevice API
http://msdn.microsoft.com/en-us/library/dd316556(v=VS.85).aspx
我不想discorage你,但相信我,這不是一件容易的事要完成,如果你不熟悉的非託管代碼。
即使你完成了,你也無法預測設備的結果行爲。 祝你好運。
我最近在這裏回答這樣的問題,請參見How to detect if any sound plays on a Windows machine。
我不明白消極的反應,肯定有一種方式來看待正在播放什麼聲音?我不知道是否容易從該流中提取和獲取有用的信息,但這些評論並沒有指出正確的方向。 – 2010-10-21 23:34:16
+1,現在該平臺被提及。從Windows Vista/7開始,我們有[核心音頻API](http://msdn.microsoft.com/en-us/library/dd370784%28VS.85%29.aspx),但我肯定從未使用過他們。讓我們嘗試標記這個「windows-api」並看看我們畫的是誰。:) – 2010-10-21 23:42:23
也許你可以在這裏找到一些東西http://www.dreamincode.net/forums/topic/45693-controlling-sound-volume-in-c%23/#/ – BrunoLM 2010-10-21 23:50:21