изменить громкость win32 c ++

Как мне изменить громкость звука в c ++ win32? Также как мне включить / отключить звук? Спасибо за помощь!


person user37875    schedule 31.03.2009    source источник
comment
WASAPI (Windows Audio Session API) будет очень полезен, когда дело доходит до управления аудиопотоками с помощью Win32 C ++. Это ссылка на официальную документацию API: docs.microsoft .com / en-us / windows / win32 / api / _coreaudio.   -  person Tech Trivia    schedule 28.03.2020


Ответы (6)


Два варианта:

  1. Здесь есть ответ на этот вопрос (изменение основного тома с C ++, который также включает SetMute и т. Д.)

  2. Думали ли вы о том, чтобы показать элементы управления громкостью и позволить пользователю? Если да, я могу опубликовать для этого код. (Вы просто используете апплет регулировки громкости.

person Clay Nichols    schedule 31.03.2009

Используйте API waveOutSetVolume.

Вот пример:

  DWORD dwVolume;

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

  // later point in code, to unmute volume...
  waveOutSetVolume(NULL, dwVolume);
person Irwin    schedule 31.03.2009
comment
Это устанавливает громкость на ноль, что не то же самое, что отключение звука (хотя эффект очень похож). И он устанавливает громкость «Wave», а не «Master Volume». Что может быть, а может и не быть тем, что вы хотите. - person svick; 14.10.2011
comment
Почему вы передаете функции NULL? - person 2501; 20.09.2016

waveOutSetVolume и MixerSetControlDetails изменяют громкость только для вашего приложения в Windows Vista и более поздних версиях.

Если вы хотите изменить основную громкость в Vista и более поздних версиях, найдите IAudioEndpointVolume интерфейс.

Вот сообщение в блоге, которое я написал по этому поводу пару лет назад.

person ReinstateMonica Larry Osterman    schedule 04.04.2009
comment
Для меня вышесказанное звучит почти одинаково, когда речь идет о версиях. Не могли бы вы пояснить, пожалуйста. - person sharkin; 04.04.2009
comment
Они одинаковые. Я хочу сказать, что начиная с Windows Vista и продолжая для всех последующих версий Windows (включая Windows 7 и все последующие версии), микшер и волновые тома являются индивидуальными, а не глобальными. Для Vista и выше используйте IAudioEndpointVolume. - person ReinstateMonica Larry Osterman; 04.04.2009

Возможно, вам стоит подумать о том, чтобы НЕ изменять глобальную громкость. Подумайте об этом - если я уменьшу громкость в MediaPlayer, все другие программы по-прежнему будут такими же громкими, как и раньше, и это именно то, что я ожидаю от любой программы - только уменьшить ее СОБСТВЕННУЮ громкость. Конечно могут быть причины менять глобальную громкость, без обид;)

person qwerty    schedule 31.03.2009

Если все, что вы хотите сделать, это изменить громкость, вы можете использовать коды виртуальных клавиш, чтобы изменить громкость следующим образом:

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));
}
person mchouhan_google    schedule 19.06.2014
comment
Имитация нажатия клавиш для служебных задач никогда не бывает хорошей идеей. - person GrayFace; 20.06.2014
comment
Моя просьба - переключить громкость, например, с 30% на 100% или наоборот. - person Zhang; 27.01.2020

Самый простой способ отключить звук -

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

Аналогичным образом вы можете активировать поведение клавиш + Volume и -Volume. Взгляните на http://www.blackwasp.co.uk/BasicVolumeControl.aspx и http://msdn.microsoft.com/en-us/library/windows/desktop/ms646247%28v=vs.85%29.aspx

Есть также значения для таких вещей, как регулировка громкости микрофона, но я их не пробовал.

Если вам нужен больший контроль над системным основным томом, вы должны проверить версию Windows и выполнить 2 версии кода:
Что-то вроде вышеупомянутого Изменение основного уровня громкости для Win XP.
Что-то вроде https://stackoverflow.com/a/3437069/1365066 для Vista и более поздних версий.

person GrayFace    schedule 20.06.2014