天天看點

C# NAudio擷取控制系統音量,可設定指定值和靜音設定

最近在搞警報系統,但是系統音量這一塊老是被安保人員給調成靜音,無奈之下,隻好出此下策,找到控制系統音量的辦法,每次調用之前都先判斷是否打開了聲音,然後再去報警。

對于擷取音量的辦法,是用了一個開源工具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;

如果有問題,歡迎評論或私聊詢問,我會盡可能回複每一個問題。