我当前的代码是:
public static MMDevice GetDefaultRenderDevice()
{
using (var enumerator = new MMDeviceEnumerator())
{
return enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
}
}
public static bool IsAudioPlaying(MMDevice device)
{
using (var meter = AudioMeterInformation.FromDevice(device))
{
return meter.PeakValue > 0;
}
}
当我说Console.WriteLine(IsAudioPlaying(GetDefaultRenderDevice()));
时,它只会告诉您是否播放了声音。如果我只希望它检查chrome是否播放声音,该怎么办?
答案 0 :(得分:0)
您可以使用AudioSession API。 看看cscore的AudioSessionTests。 https://github.com/filoe/cscore/blob/master/CSCore.Test/CoreAudioAPI/AudioSessionTests.cs
使用以下方法可能会起作用:
using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))
{
using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
{
foreach (var session in sessionEnumerator)
{
//one of the sessions is might be google chrome
//implement your logic to select the correct session
using (var meterInformation = session.QueryInterface<AudioMeterInformation>())
{
var peak = meterInformation.PeakValue;
//implement your logic
}
}
}
}
...
private 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;
}
}
}