【问题标题】:change volume win32 c++改变音量win32 c++
【发布时间】:2010-10-16 12:33:03
【问题描述】:

如何在 c++ win32 中更改音量?另外我将如何静音/取消静音?感谢您的帮助!

【问题讨论】:

  • 也许你应该考虑不改变全局音量。想想看——如果我降低 MediaPlayer 中的音量,所有其他程序仍然像以前一样响亮,这正是我对任何程序的期望——只降低它的 OWN 音量。当然可能有理由改变全球数量,没有冒犯;)
  • WASAPI(Windows 音频会话 API)在使用 Win32 C++ 控制音频流时非常有用。这是API官方文档的链接:docs.microsoft.com/en-us/windows/win32/api/_coreaudio

标签: c++ winapi audio volume


【解决方案1】:

两种选择:

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

  2. 您是否考虑过显示音量控件并让用户? 如果是这样,我可以为此发布一些代码。 (你基本上只是掏出音量控制小程序。

【讨论】:

    【解决方案2】:

    使用waveOutSetVolume API。

    这是一个例子:

      DWORD dwVolume;
    
      if (waveOutGetVolume(NULL, &dwVolume) == MMSYSERR_NOERROR)
        waveOutSetVolume(NULL, 0); // mute volume
    
      // later point in code, to unmute volume...
      waveOutSetVolume(NULL, dwVolume);
    

    【讨论】:

    • 这会将音量设置为零,这与静音不同(尽管效果非常相似)。它设置的是“Wave”音量,而不是“Master Volume”。这可能是也可能不是你想要的。
    • 为什么将 NULL 传递给函数?
    【解决方案3】:

    waveOutSetVolume 和 mixerSetControlDetails 仅更改 Windows Vista 及更高版本应用程序的音量。

    如果您想在 Vista 及更高版本上更改主音量,请搜索IAudioEndpointVolume 接口。

    Here's 几年前我写的一篇博文。

    【讨论】:

    • 对我来说,在谈到版本时,“高于”和“超越”听起来几乎相同。请你澄清一下。
    • 它们是一样的。我的观点是,从 Windows Vista 开始,一直到 Windows 的所有后续版本(包括 Windows 7 和所有后续发布的版本),混音器和波量都是针对每个应用程序的,而不是全局的。对于 Vista 及更高版本,请使用 IAudioEndpointVolume。
    【解决方案4】:

    如果您只想改变音量,那么您可以使用虚拟键码来改变音量,如下所示:

    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));
    }
    

    【讨论】:

    • 模拟实用程序任务的击键绝不是一个好主意。
    • 我的要求是切换音量,比如 30% 到 100% 或反向。
    【解决方案5】:

    切换静音的最简单方法是

    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.aspxhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms646247%28v=vs.85%29.aspx

    还有麦克风音量控制之类的值,但我没有尝试过。

    如果您需要对系统主音量进行更多控制,则必须检查 Windows 版本并执行 2 个版本的代码:
    类似于前面提到的 Changing master volume level 对于 Win XP。
    对于 Vista 及更高版本,类似于 https://stackoverflow.com/a/3437069/1365066

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多