Получение текущего уровня громкости отдельных приложений 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. Они используют метод из ответа Флориана, чтобы получить уровни звука.