Question

How would I go about changing the sound volume in c++ win32? Also how would I mute/unmute it? Thanks for the help!

Was it helpful?

Solution

Two options:

  1. There's an answer to that question here on SO (changing the master volume from C++, which also includes SetMute, etc.)

  2. Have you considered showing the Volume controls and letting the user? If so, I can post some code for that. (You basically just shell out to the volume control applet.

OTHER TIPS

Use the waveOutSetVolume API.

Here's an example:

  DWORD dwVolume;

  if (waveOutGetVolume(NULL, &dwVolume) == MMSYSERR_NOERROR)
    waveOutSetVolume(NULL, 0); // mute volume

  // later point in code, to unmute volume...
  waveOutSetVolume(NULL, dwVolume);

waveOutSetVolume and mixerSetControlDetails only change the volume for your application on Windows Vista and above.

If you want to change the master volume on Vista and beyond, search for the IAudioEndpointVolume interface.

Here's a blog post I wrote on this a couple of years ago.

Maybe you should consider to NOT change the global volume. Think about it - if I lower the volume in MediaPlayer all other programs are still as loud as before, and that is exactly what I expect from any program - to only lower it's OWN volume. Of course there might be reasons to change global volume, no offense ;)

If all you want to do is change the volume then you can use the virtual key codes to change volume like this:

void changeVolume()
{
  INPUT ip={0};
  ip.type = INPUT_KEYBOARD;
  ip.ki.wVk = VK_VOLUME_UP;   //or VOLUME_DOWN or MUTE
  SendInput(1, &ip, sizeof(INPUT));
  ip.ki.dwFlags = KEYEVENTF_KEYUP;
  SendInput(1, &ip, sizeof(INPUT));
}

Simplest way to toggle mute is

const int APPCOMMAND_VOLUME_MUTE = 0x80000;
SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, (IntPtr)APPCOMMAND_VOLUME_MUTE);

In similar way you can trigger +Volume and -Volume keys behavior. Take a look at http://www.blackwasp.co.uk/BasicVolumeControl.aspx and http://msdn.microsoft.com/en-us/library/windows/desktop/ms646247%28v=vs.85%29.aspx

There are also values for things like microphone volume control, but I haven't tried them.

If you need more control over system master volume, you must check Windows version and do 2 versions of code:
Something like aforementioned Changing master volume level for Win XP.
Something like https://stackoverflow.com/a/3437069/1365066 for Vista and higher.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top