2009-07-15 30 views
1

有誰知道如何在Vista或7中獲得音頻會話*的當前音量級別?獲取音頻會話的音量級別

我得到了IAudioSessionControl2和IAudioSessionManager2實例,您需要監聽音量更改,但實際上獲取當前音量是難以捉摸的。

*通過音頻會話我的意思是(大致)的每個應用程序的音頻控制,而不是「大師」一


注意(只要我可以告訴)IAudioSessionManager2->GetSimpleVolume()這裏並不是正確的答案。在IAudioSessionControl2中發佈GUID的唯一方法是Grouping parameter,並且在GetSimpleVolume中使用它創建新的會話,而不是讓您控制現有的會話。

GetSimpleVolume()是我想要的,但是在這個設置中來自哪些參數?

+0

我已經在我的回答中回答了這個問題:您可能想要爲GUID指定NULL,爲標誌指定0。這適用於絕大多數應用程序(關於它不適用的唯一應用程序是託管WMP OCX的應用程序,而WMP OCX有自己的音量控制基礎結構,可與sndvol很好地集成)。 – 2009-07-21 00:04:07

回答

1

其實IAudioSessionManager :: GetSimpleAudioVolume是你在找什麼。

音頻會話由兩個(或三個)事件標識:會話guid,進程ID和跨進程標誌(如果在創建流時指定了跨進程標誌,進程標識將被忽略)。

簡單音頻音量控制該音頻會話中所有流的音量。它非常簡單(大多數渲染框架爲會話GUID指定NULL)。如果您的應用程序使用特定的會話GUID,則應該只指定您的應用程序正在使用的會話GUID。

雖然還有一個其他的扭曲。音量控制(sndvol.exe)將所有具有相同「分組參數」的會話組合在一起 - 這不是音量控制的一部分,它是一種UI便利功能,僅存在於IE瀏覽器等Web瀏覽器中 - 它存在允許第三方音頻框架(指定GUID_NULL會話GUID)和WMP OCX(指定具有特定會話GUID的跨進程會話)在卷UI中共享單個滑塊。

1

我覺得ISimpleAudioVolume接口應該做你需要的。
它有一個名爲GetMasterVolume的方法,可爲音頻會話返回音量。
要獲得接口,您可以調用IAudioSessionManager :: GetSimpleAudioVolume。

對於guid參數,您可以使用您在使用IAudioClient :: Initialize創建音頻流時指定的參數。我真的不知道是否有其他方法來獲得會議的指導。

分組參數是會話屬於的組的標識,而不是會話的標識。

+0

來自IAudioSessionManager的ISimpleAudioVolume爲您提供主卷。每個會話的音量是不同的,因此會話的**實際**音量是(MasterVolume x SessionVolume)x 100. – 2009-07-15 02:03:55

+0

Kevin,一個尼特:Windows Vista及更高版本中的音量以0.0到1.0。體積乘以100可能無效。 此外,主音量具有音量漸變應用於它的標量音量值與揚聲器的實際dB輸出之間沒有直接關係。您可以使用SetMasterVolumeLevel API設置實際的dB衰減。 – 2009-07-18 16:45:11

相關問題