最近在搞警报系统,但是系统音量这一块老是被安保人员给调成静音,无奈之下,只好出此下策,找到控制系统音量的办法,每次调用之前都先判断是否打开了声音,然后再去报警。
对于获取音量的办法,是用了一个开源工具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;
如果有问题,欢迎评论或私聊询问,我会尽可能回复每一个问题。