在音频混音器中显示单个窗口应用程序当前音量输出级别

我正在尝试编写一个C#代码,从访问声音输出的每个窗口应用程序输出当前音频输出级别(如同Volume混音器不断变化的绿色条所示)。

该程序将每10毫秒检查一次,并输出如下:Windows Media Player:30,Mozilla Firefox:0,Adobe Flash Player:35(根据图)

我正在使用Windows 7,并在C#中尝试(因为Java无法实现这一点)。

我已经找到了为正在运行的应用程序获取和设置主音量(对于Windows Media Player显示65%的句柄栏)的方法,有没有办法获得绿色波动的水平数据?

谢谢!

音频混音器

您可以使用CSCore 。 CoreAudioAPI-Audiosessions有一个包装器。 使用类似的东西(有关详细信息,请查看unit testing: 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()) { 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; } } } 

要控制应用程序卷,请在此处查看unit testing: http : //cscore.codeplex.com/SourceControl/latest#CSCore.Test/CoreAudioAPI/AudioSessionTests.cs

这是一个示例应用程序,它在图形中显示运行应用程序的音频级别。 有两个版本,一个在WPF中,另一个在Windows中.Forms。 他们使用Florian的答案来获得音频电平。

https://github.com/jeske/SoundLevelMonitor

在此处输入图像描述