【问题标题】:C# get master volume level/precentC# 获取主音量级别/百分比
【发布时间】:2011-05-13 05:22:42
【问题描述】:

我得到这个代码来静音/取消静音主音量

private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int WM_APPCOMMAND = 0x319;

[DllImport("user32.dll")]
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE);

我想知道如何获得主音量级别/百分比,因为我想知道声音是否已经静音。

编辑: 否则我想拆分静音/取消静音,这样我就有两个功能 - 一个用于静音,一个用于取消静音。

谢谢

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    我无法对所有 Windows 版本(xp、vista 和 7)都这样做。
    不过,我是通过使用外部程序实现的,例如NirCmd,并发送了我需要的命令。

    不是很好的解决方案,但它确实解决了我的问题。

    【讨论】:

      【解决方案2】:

      看看这个项目http://www.codeproject.com/KB/vista/CoreAudio.aspx

      他们创建了一个自己的混音器控件,它还报告当前音量和静音/取消静音状态:

      defaultDevice.AudioEndpointVolume.OnVolumeNotification += new AudioEndpointVolumeNotificationDelegate(
          AudioEndpointVolume_OnVolumeNotification);
      // .. snip ..
      void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data)
      {
          Console.WriteLine("New Volume {0}", data.MasterVolume);
          Console.WriteLine("Muted      {0}", data.Muted);
      }
      

      这对你有帮助吗?

      编辑:使用此代码和项目中的类,您应该能够直接设置和取消设置静音(无需切换):

      MMDeviceEnumerator devEnum = new MMDeviceEnumerator();
      MMDevice defaultDevice = devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
      defaultDevice.AudioEndpointVolume.Mute = true; // or false
      

      【讨论】:

      • CodeProject 链接已失效
      • 这很有效。请注意,您需要使用以下命名空间引用 NAudio.dll:using NAudio.CoreAudioApi;。 MasterVolumeLevelScalar 是线性 0-1 比例,而 MasterVolumeLevel 是一些非线性比例。
      【解决方案3】:

      This thread 展示了如何从 C# 控制主音量。

      您可能也对此问题的回复感兴趣:Get Master Sound Volume in c#

      尤其是 NAudio 托管包装器。

      【讨论】:

      • 什么,具体来说,没有工作?线程中的评论表明它有效。
      • 使用函数 GetVolume() 并返回 65535,在我更改音量后它返回相同的值 - 65535。也许我使用了错误的函数?
      • 另一个问题是关于当前播放声音的强度,而不是当前在混音器中设置的增益。
      • 我仍在寻找答案。 Jim 提供的所有线程都不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2011-11-04
      • 2011-02-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多