2014-01-18 10 views
3

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

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

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

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

Спасибо!

Audio Mixer

ответ

13

Вы можете использовать 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; 
     } 
    } 
} 

Для управления объемом приложений, возьмите взгляд на UnitTests здесь: http://cscore.codeplex.com/SourceControl/latest#CSCore.Test/CoreAudioAPI/AudioSessionTests.cs

+0

Благодаря thefiloe для ответа. Как упоминалось в вопросе, на получение/настройку основного тома (максимальное значение слайдера в изображении микшера) был дан ответ: http://stackoverflow.com/questions/14306048/controling-volume-mixer. Я пытаюсь прочитать зеленое значение, показанное на изображении микшера, то есть текущий объем аудиовыхода, который продолжает меняться и всегда меньше, чем максимальный мастер-громкость. – mio

+0

Прошу прощения. Не было времени, чтобы прочитать весь ваш вопрос. Я отредактировал свой ответ. –

+0

Спасибо! Оно работает. – mio

0

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

https://github.com/jeske/SoundLevelMonitor

enter image description here