首页 > 技术文章 > C# NAudio获取控制系统音量,可设定指定值和静音设置

keaneljx 2021-02-05 20:32 原文

最近在搞警报系统,但是系统音量这一块老是被安保人员给调成静音,无奈之下,只好出此下策,找到控制系统音量的办法,每次调用之前都先判断是否打开了声音,然后再去报警。

对于获取音量的办法,是用了一个开源工具NAudio,它可以满足录音、播放录音、格式转换、混音调整等功能。这里仅仅介绍了系统音量的获取和设定指定值加上静音开关;下边是每个功能的代码,是以封装的形式来写的,到时候直接调用即可,设定指定音量需要给一个int值即可(0~100)。

首先是设定指定音量的:

private void GetCurrentSpeakerVolume(int volume)
{
    var enumerator = new MMDeviceEnumerator();
    IEnumerable<MMDevice> speakDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).ToArray();
    if (speakDevices.Count() > 0)
    {
        
        MMDevice mMDevice = speakDevices.ToList()[0];
        mMDevice.AudioEndpointVolume.MasterVolumeLevelScalar = volume / 100.0f;
    }
}

获取当前系统音量值的,返回值是一个int值

private int GetCurrentSpeakerVolume()
{
    int volume = 0;
    var enumerator = new MMDeviceEnumerator();
 
    //获取音频输出设备
    IEnumerable<MMDevice> speakDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).ToArray();
    if (speakDevices.Count() > 0)
    {
        MMDevice mMDevice = speakDevices.ToList()[0];
        volume = Convert.ToInt16(mMDevice.AudioEndpointVolume.MasterVolumeLevelScalar * 100);
    }
    return volume;
}

设定系统音量是否静音,这里是false是静音,true是关闭静音

public void CancelTheMute()
{
     var enumerator = new MMDeviceEnumerator();
     IEnumerable<MMDevice> speakDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).ToArray();
     MMDevice mMDevice = speakDevices.ToList()[0];
     mMDevice.AudioEndpointVolume.Mute = false;//系统音量静音
}

因为这是从using上引用的,只需要添加引用即可使用,

using NAudio;
using NAudio.Wave;
using VisioForge.Shared.NAudio;
using VisioForge.Shared.NAudio.CoreAudioApi;
using VisioForge.Shared.MediaFoundation;

如果有问题,欢迎评论或私聊询问,我会尽可能回复每一个问题。

推荐阅读