Получение текущего уровня громкости отдельных приложений Windows, как показано в Audio Mixer

Я пытаюсь написать код на C#, который выводит текущий уровень вывода звука из каждого приложения Windows, обращающегося к выводу звука (как показано с постоянно меняющимися зелеными полосами микшера громкости).

Программа будет проверять каждые 10 мс и выводит что-то вроде этого: Windows Media Player: 30, Mozilla Firefox: 0, Adobe Flash Player: 35 (согласно рисунку)

Я использую Windows 7 и пробую это в C# (поскольку Java не может этого достичь).

Я нашел способы получить и установить мастер-громкость (панель управления, которая показывает 65% для проигрывателя Windows Media) для работающего приложения, есть ли способ получить данные с зеленым флуктуирующим уровнем?

Спасибо!

Аудио микшер

2 ответа

Решение

Вы можете использовать CSCore. Для CoreAudioAPI-Audiosessions есть обертка. Используйте что-то подобное (для более подробной информации посмотрите на unittests: AudioSession-UnitTests):

private static void Main(string[] args)
{
    using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))
    {
        using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
        {
            foreach (var session in sessionEnumerator)
            {
                using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
                {
                    Console.WriteLine(audioMeterInformation.GetPeakValue());
                }
            }
        }
    }

    Console.ReadKey();
}

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

Чтобы управлять объемом приложений, посмотрите на модульные тесты здесь: http://cscore.codeplex.com/SourceControl/latest

Вот пример приложения, которое отображает уровни звука от запущенных приложений на графике. Существует две версии: одна в WPF и одна в Windows.Forms. Они используют метод из ответа Флориана, чтобы получить уровни звука.

https://github.com/jeske/SoundLevelMonitor

Другие вопросы по тегам