C#获取主音量级别/百分比

8
我得到了这段代码,可以静音/取消静音主音量。
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);

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

编辑: 或者我想分离静音/取消静音音频,这样我就会有两个功能——一个用于静音,另一个用于取消静音。

谢谢。

3个回答

3
请查看这个项目: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

2
CodeProject的链接已失效。 - Bill Tarbell
这个非常好用。请注意,您需要使用以下命名空间引用NAudio.dll:using NAudio.CoreAudioApi;。MasterVolumeLevelScalar是线性的0-1比例尺,而MasterVolumeLevel是一些非线性比例尺。 - Bill Tarbell

1

我无法在所有的Windows版本(xp,vista和7)上完成它。
不过,我通过使用外部程序,例如NirCmd,并发送我需要的命令来实现它。

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


0

1
具体是什么没有起作用?帖子中的评论表明它有效。 - Jim Mischel
使用了函数GetVolume(),它返回了65535,之后我改变了音量,它仍然返回相同的值- 65535。也许我使用了错误的函数? - Ron
2
那个问题是关于当前播放声音的强度,而不是混音器中当前设置的增益。 - Ben Voigt
2
我仍在寻找答案。Jim 给的所有线程都不起作用。 - Ron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接