我正在使用令人惊叹的NAudio框架来获取音频设备的列表。
但正如我所见,哪个音频设备是 PC 的集成音频,哪个是耳机,这是不可能的区别。我的意思是它们具有相同的名称,并且只有当我们插入耳机时它才会进入Active
状态。
想象一下,如果我使用插入的耳机启动应用程序,我如何知道当前设备是耳机而不是 PC 的集成音频?
我的意思是我们可以通过 NAduio 检测到插入的音频设备是外部音频设备并且是耳机本身吗?
var enumerator = new NAudio.CoreAudioApi.MMDeviceEnumerator();
// Allows you to enumerate rendering devices in certain states
var endpoints = enumerator.EnumerateAudioEndPoints(
DataFlow.Render,
DeviceState.Unplugged | DeviceState.Active);
foreach (var endpoint in endpoints)
{
Console.WriteLine("{0} - {1}", endpoint.DeviceFriendlyName, endpoint.State);
}
// Aswell as hook to the actual event
enumerator.RegisterEndpointNotificationCallback(new NotificationClient());
其中 NotificationClient 实现如下:
class NotificationClient : NAudio.CoreAudioApi.Interfaces.IMMNotificationClient
{
void IMMNotificationClient.OnDeviceStateChanged(string deviceId, DeviceState newState)
{
Console.WriteLine("OnDeviceStateChanged\n Device Id -->{0} : Device State {1}", deviceId, newState);
}
void IMMNotificationClient.OnDeviceAdded(string pwstrDeviceId) { }
void IMMNotificationClient.OnDeviceRemoved(string deviceId) { }
void IMMNotificationClient.OnDefaultDeviceChanged(DataFlow flow, Role role, string defaultDeviceId) { }
void IMMNotificationClient.OnPropertyValueChanged(string pwstrDeviceId, PropertyKey key) { }
}