C # NAudio obtém e controla o volume do sistema, pode definir o valor especificado e a configuração de mudo

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.

Acho que você gosta

Origin blog.csdn.net/weixin_37081112/article/details/113703284
Recomendado
Clasificación