最近在搞警報系統,但是系統音量這一塊老是被安保人員給調成靜音,無奈之下,隻好出此下策,找到控制系統音量的辦法,每次調用之前都先判斷是否打開了聲音,然後再去報警。
對于擷取音量的辦法,是用了一個開源工具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;
如果有問題,歡迎評論或私聊詢問,我會盡可能回複每一個問題。