2010-12-22 25 views
2

從Windows Vista開始,waveOutSetVolume函數(winmm.dll)不再適用於OS主音量,而是針對每個應用單獨運行。默認情況下,它被設置爲100%,這意味着應用程序可以像操作系統一樣播放相同的音量。僅針對當前應用更改音量

現在我想要使用這個效果:只改變當前應用程序的音量而不更改操作系統音量。

我試過在http://www.geekpedia.com/tutorial176_Get-and-set-the-wave-sound-volume.html提供的應用程序。我添加了一個WindowsMediaPlayer控件,並使用URL屬性(autostart設置爲true)將Webradio流加載到該控件中。乍一看,代碼並不是它應該做的:當我滾動滑塊時,收音機會繼續以相同的音量播放,即使我將其設置爲0,這也等於將其靜音。我調試並認爲一切正常,waveOutSetVolume返回0.這應該沒問題,還是我誤解了?

我打開了Windows 7提供的調音臺控制檯。在那裏我看到以下內容:當我滾動樣本中的滑塊時,混音器視圖中各個應用程序的滑塊發生更改(因爲它應該)。但是音量並沒有改變。但是,如果我在調音臺控制檯中降低應用程序的音量(手動使用我的鼠標),則網絡無線電會播放較低的聲音(應該如此)。看起來在我的代碼中,缺少一些「提交」調用來實際地使操作系統相應地調整應用程序的音量。

任何想法?謝謝大衛

回答

1

您可以使用音頻會話API IAudioVolume和IAudioSessionNotification來修改當前的應用程序音量並使用應用程序中的音量滑塊跟蹤音量。