Tenho trabalhado em um sistema de alarme recentemente, mas o volume do sistema é sempre silenciado pelo pessoal de segurança. Em desespero, tive que recorrer a essa estratégia e encontrar uma maneira de controlar o volume do sistema. Antes de cada chamada, eu primeiro determinaria se o som foi ligado e, em seguida, vá para a polícia novamente.
A forma de obter o volume é utilizando uma ferramenta open source NAudio, que pode atender as funções de gravação, reprodução de gravação, conversão de formato, ajuste de mixagem e assim por diante. Aqui apenas apresenta a aquisição e configuração do valor especificado do volume do sistema mais o botão mudo; abaixo está o código de cada função, que é escrito na forma de um pacote e pode ser chamado diretamente no momento. Configurando o especificado o volume requer um int. O valor pode ser (0 ~ 100).
A primeira é definir o volume especificado:
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;
}
}
Obtenha o valor atual do volume do sistema, o valor de retorno é um valor 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;
}
Defina se o volume do sistema está mudo, aqui é falso para mudo, verdadeiro é desligar o mudo
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;//系统音量静音
}
Porque isso é citado de using, você só precisa adicionar uma referência para usar,
using NAudio;
using NAudio.Wave;
using VisioForge.Shared.NAudio;
using VisioForge.Shared.NAudio.CoreAudioApi;
using VisioForge.Shared.MediaFoundation;
Se você tiver alguma dúvida, comente ou pergunte no chat privado, responderei a todas as perguntas tanto quanto possível.