获取音频混合器中可视化的单个 Windows 应用程序当前音量输出级别
Posted
技术标签:
【中文标题】获取音频混合器中可视化的单个 Windows 应用程序当前音量输出级别【英文标题】:Getting individual windows application current volume output level as visualized in audio Mixer 【发布时间】:2014-02-07 15:56:55 【问题描述】:我正在尝试编写一个 C# 代码,该代码从访问声音输出的每个 Windows 应用程序输出当前音频输出电平(如音量混合器的不断变化的绿色条所示)。
程序每10毫秒检查一次,输出如下:Windows Media Player: 30, Mozilla Firefox: 0, Adobe Flash Player: 35(如图)
我正在使用 Windows 7,并在 C# 中尝试(因为 Java 无法实现这一点)。
我找到了获取和设置正在运行的应用程序的主音量(Windows Media Player 显示 65% 的手柄栏)的方法,有没有办法获取绿色波动级别数据?
谢谢!
【问题讨论】:
【参考方案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 的回复。如问题中所述,获取/设置主音量(混音器图像中的滑块最大值)之前已得到解答:***.com/questions/14306048/controling-volume-mixer。我正在尝试读取混音器图像上显示的绿色值,即当前音频输出音量,它不断变化并且始终小于等于最大主音量。 对不起。没有时间阅读你的整个问题。我已经编辑了我的答案。 非常感谢,我也使用了您以前的答案:) 因为这是一种比链接答案更简单的方法。非常感谢你【参考方案2】:这是一个示例应用程序,它在图表中显示来自正在运行的应用程序的音频电平。有两个版本,一个在 WPF 中,一个在 Windows.Forms 中。他们使用 Florian 回答中的方法来获取音频电平。
https://github.com/jeske/SoundLevelMonitor
【讨论】:
以上是关于获取音频混合器中可视化的单个 Windows 应用程序当前音量输出级别的主要内容,如果未能解决你的问题,请参考以下文章
最实用的虚拟声卡-Windows安装虚拟声卡(有效解决PR音频输入,AU录音,obs多音频原控制等问题)
最实用的虚拟声卡-Windows安装虚拟声卡(有效解决PR音频输入,AU录音,obs多音频原控制等问题)
最实用的虚拟声卡-Windows安装虚拟声卡(有效解决PR音频输入,AU录音,obs多音频原控制等问题)