Управление громкостью приложения и измерителем громкости

Я использую NAudio для программного обеспечения для записи экрана, которое я разрабатываю, и мне нужно знать, возможно ли не только контролировать громкость конкретного приложения, но и отображать измеритель громкости для звука приложения.

Я погуглил повсюду, и кажется, что я могу получить VU Meter только для устройств, которые в настоящее время находятся на моем компьютере, и установить громкость для этих устройств.

Хотя я использую NAudio, я открыт для других решений.


person Asix Jin    schedule 19.11.2015    source источник


Ответы (1)


Я задал вопрос более подробно после этого вопроса. С тех пор я нашел ответ, поэтому я оставлю ответ здесь для тех, кто наткнется на него. Попытка использовать NAudio и CSCore заставила меня хорошо познакомиться, поэтому, пожалуйста, спросите, нужна ли вам дополнительная помощь.

Этот блок кода использует CSCore и является модифицированной и прокомментированной версией ответа, найденного здесь: Получение текущего уровня громкости отдельного приложения Windows, отображаемого в аудиомикшере

class PeakClass
{
    static int CurrentProcessID = 0000;

    private static void Main(string[] args)
    {
        //Basically gets your default audio device and session attached to it
        using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))
        {
            using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
            {
                //This will go through a list of all processes uses the device
                //the code got two line above.
                foreach (var session in sessionEnumerator)
                {
                    //This block of code will get the peak value(value needed for VU Meter)
                    //For whatever process you need it for (I believe you can also check by name
                    //but I found that less reliable)
                    using (var session2 = session.QueryInterface<AudioSessionControl2>())
                    {
                        if(session2.ProcessID == CurrentProcessID)
                        {
                            using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
                            {
                                Console.WriteLine(audioMeterInformation.GetPeakValue());
                            }
                        }
                    }

                   //Uncomment this block of code if you need the peak values 
                   //of all the processes
                   //
                    //using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
                    //{
                    //    Console.WriteLine(audioMeterInformation.GetPeakValue());
                    //}
                }
            }
        }
    }

    private static AudioSessionManager2 GetDefaultAudioSessionManager2(DataFlow dataFlow)
    {
        using (var enumerator = new MMDeviceEnumerator())
        {
            using (var device = enumerator.GetDefaultAudioEndpoint(dataFlow, Role.Multimedia))
            {
                Console.WriteLine("DefaultDevice: " + device.FriendlyName);
                var sessionManager = AudioSessionManager2.FromMMDevice(device);
                return sessionManager;
            }
        }
    }
} 

Следующий блок кода позволит вам изменить громкость устройства с помощью NAudio.

MMDevice VUDevice;

public void SetVolume(float vol)
    {
        if(vol > 0)
        {
            VUDevice.AudioEndpointVolume.Mute = false;
            VUDevice.AudioEndpointVolume.MasterVolumeLevelScalar = vol;
        }
        else
        {
            VUDevice.AudioEndpointVolume.Mute = true;
        }
        Console.WriteLine(vol);
    }

У меня есть код из двух разных библиотек только для ответа на вопрос, который я разместил напрямую, а именно, как установить громкость и получить значения VU Meter (пиковые значения). CSCore и NAudio очень похожи, поэтому большая часть кода здесь взаимозаменяема.

person Asix Jin    schedule 16.12.2015