从Windows Vista开始,waveOutSetVolume函数(winmm.dll)不再在操作系统主卷上运行,而是针对每个应用程序单独运行。默认情况下,它设置为100%,这意味着应用程序播放的声音与操作系统的音量相同。
现在我想要充分利用这种效果:只更改当前应用的音量而不更改操作系统音量。
我尝试了http://www.geekpedia.com/tutorial176_Get-and-set-the-wave-sound-volume.html提供的应用。我添加了一个WindowsMediaPlayer控件,并使用URL属性(自动启动设置为true)将Webradio流加载到其中。乍一看,代码不应该是它应该:当我滚动滑块时,无线电继续以相同的音量播放,即使我设置为0也等于静音。我调试并认为一切正常,waveOutSetVolume返回0.那应该没问题,还是我弄错了?
我打开了Windows 7提供的调音台控制台。我看到以下内容:当我滚动样本中的滑块时,调音台视图中相应应用程序的滑块会发生变化(应该如此)。但数量并没有改变。但是如果我在调音台控制台中减少应用程序的音量(用我的鼠标手动),则webradio会以较低的声音播放(应该如此)。似乎在我的代码中缺少一些“提交”调用以实际让操作系统相应地调整应用程序的音量。
有什么想法吗?谢谢,大卫
答案 0 :(得分:1)
您可以使用音频会话API IAudioVolume和IAudioSessionNotification来修改当前的应用音量,并使用应用中的音量滑块跟踪音量。