David
David

Reputation: 2556

Changing volume for current app exclusively

from Windows Vista on, the waveOutSetVolume function (winmm.dll) no more operates on the OS master volume but for each app individually. As a default it is set to 100% which means that the app plays sound with the same volume like the OS.

Now I want to make use of exactly this effect: Only changing the volume for my current app without changing the OS volume.

I tried the app provided at http://www.geekpedia.com/tutorial176_Get-and-set-the-wave-sound-volume.html. I added a WindowsMediaPlayer control and loaded an Webradio stream into it using the URL property (autostart set to true). At first glance the code does not what it should: When I scroll the slider the radio keeps on playing at the same volume, even if I set to to 0 which would equal muting it. I debugged and figured that everything is ok, waveOutSetVolume returns 0. That should be ok, or am I mistaken?

I opened the mixer console provided by Windows 7. There I saw the following: The slider of the respective app in the mixer view changes (as it should) when I scroll the slider in the sample. Yet the volume doesn't change. But if I reduce the app's volume in the mixer console (manually with my mouse), the webradio plays in a lower voice (as it should). It seem's that in my code there is missing some "Submit" call to actually make the OS adjust the app's volume accordingly.

Any ideas? Thanks, David

Upvotes: 2

Views: 1000

Answers (1)

Larry Osterman
Larry Osterman

Reputation: 16142

You can use the Audio session APIs IAudioVolume and IAudioSessionNotification to modify the current apps volume and to track your volume with the volume slider in the app.

Upvotes: 1

Related Questions