8

我正在尝试编写一个 C# 代码,该代码从访问声音输出的每个 Windows 应用程序输出当前音频输出电平(如音量混合器的不断变化的绿色条所示)。

程序每10毫秒检查一次,输出如下:Windows Media Player: 30, Mozilla Firefox: 0, Adob​​e Flash Player: 35(如图)

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

我找到了获取和设置正在运行的应用程序的主音量(Windows Media Player 显示 65% 的手柄栏)的方法,有没有办法获取绿色波动级别数据?

谢谢!

混音器

4

2 回答 2

20

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

要控制应用程序量,请查看此处的单元测试。

于 2014-01-18T09:17:08.943 回答
2

这是一个示例应用程序,它在图表中显示来自正在运行的应用程序的音频电平。有两个版本,一个在 WPF 中,一个在 Windows.Forms 中。他们使用 Florian 回答中的方法来获取音频电平。

https://github.com/jeske/SoundLevelMonitor

在此处输入图像描述

于 2017-06-08T15:11:18.307 回答