#c# #.net #windows #desktop-application #naudio
#c# #.net #Windows #desktop-приложение #naudio
Вопрос:
В настоящее время я работаю над настольным приложением Windows, которое должно получать уведомления о любых изменениях в подключенных аудиоустройствах.
В настоящее время я использую API основного аудиоинтерфейса через пакет NAudio следующим образом:
NAudio.CoreAudioApi.MMDeviceEnumerator enumerator;
public void PopulateAudioDevices()
{
enumerator = new NAudio.CoreAudioApi.MMDeviceEnumerator();
var endpoints = enumerator.EnumerateAudioEndPoints(
DataFlow.Render,
DeviceState.Unplugged | DeviceState.Active);
}
protected override void OnStart()
{
PopulateAudioDevices();
if (enumerator != null)
{
enumerator.RegisterEndpointNotificationCallback(this);
}
}
public void OnDeviceStateChanged(string deviceId, DeviceState newState)
{
Console.Writeline($"{deviceName} : Device State {newState}");
}
Похоже, это нормально работает для большинства USB-устройств, однако, похоже, что бывают случаи, когда подключение устройства через внешний разъем для наушников на ноутбуке не приводит к запуску обратного вызова OnDeviceStateChanged. Одним из отличительных факторов, который я заметил, является то, что в этих случаях не было никаких видимых изменений на экране диспетчера устройств Windows при подключении внешнего аудиоустройства. Однако я заметил, что настройка громкости Windows меняется при каждом подключении аудиоустройства. Это заставило меня поверить, что ОС каким-то образом регистрирует разницу в подключенных устройствах.
Есть ли какой-либо способ обнаружить такие случаи?
Комментарии:
1. Если вы не получаете никаких событий, вы можете попытаться вызвать PopulateAudioDevices по таймеру, чтобы обнаружить наушники.
2. нет никакой гарантии, что Windows вообще сообщит, когда наушники подключены к звуковой карте (особенно, если это внешняя звуковая карта). Вы полагаетесь на драйвер звуковой карты, предоставляющий эту информацию, который решит, представлять ли это ОС как отдельное «устройство» или нет.