【问题标题】:Getting individual windows application current volume output level as visualized in audio Mixer获取音频混合器中可视化的单个 Windows 应用程序当前音量输出级别
【发布时间】:2014-02-07 15:56:55
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: c# audio mixer wasapi cscore


    【解决方案1】:

    您可以使用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;
            }
        }
    }
    

    要控制应用程序的数量,请查看单元测试 here

    【讨论】:

    • 感谢 thefiloe 的回复。如问题中所述,获取/设置主音量(混音器图像中的滑块最大值)之前已得到解答:stackoverflow.com/questions/14306048/controling-volume-mixer。我正在尝试读取混音器图像上显示的绿色值,即当前音频输出音量,它不断变化并且始终小于等于最大主音量。
    • 对不起。没有时间阅读你的整个问题。我已经编辑了我的答案。
    • 非常感谢,我也使用了您以前的答案:) 因为这是一种比链接答案更简单的方法。非常感谢你
    【解决方案2】:

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

    https://github.com/jeske/SoundLevelMonitor

    【讨论】:

      猜你喜欢
      • 2016-10-20
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      相关资源
      最近更新 更多