#windows #session #audio #wasapi
#Windows #сеанс #Аудио #wasapi
Вопрос:
Я пытаюсь выяснить, какие форматы вывода поддерживаются определенным аудиоустройством в эксклюзивном режиме. Для этого я использую IAudioClient-> IsFormatSupported() , который, согласно документации, должен использоваться для этого. К сожалению, он возвращает AUDCLNT_E_UNSUPPORTED_FORMAT почти для каждого формата, который я пытаюсь передать, за исключением 2-канального звука по умолчанию, 44,1 кГц.
Однако, если я действительно попытаюсь инициализировать audioclient, есть форматы, которые завершаются успешно, но которые не удалось выполнить в IsFormatSupported() .
Просто пытаться инициализировать каждый формат не вариант, потому что это может привести к остановке звука из других приложений.
Кто-нибудь еще видел это поведение или знает, есть ли другой способ определить, какие форматы поддерживаются конкретным аудиоустройством?
Ответ №1:
Я тоже видел такое поведение. Похоже, что IsFormatSupported будет принимать только то, что помечено как «поддерживаемое» в настройках устройства воспроизведения в Windows, но Initialize, похоже, фактически запрашивает драйверы, действительно ли это возможно.
В моей конкретной ситуации у меня есть настройка Xoxar HDAV1.3 для использования HDMI в качестве выхода. Всегда доступны два устройства воспроизведения: динамики и устройство передачи данных S / PDIF. Если я попытаюсь, например, запросить 6 каналов для устройства воспроизведения S / PDIF, IsFormatSupported отклонит его (теоретически, S / PDIF поддерживает только 2, и это все, что я вижу в настройках), но вызов Initialize завершится успешно и сработает (в конце концов, он отключается HDMI, для которого поддерживается 6 каналов). Поговорим о вводящих в заблуждение именах устройств!
Боюсь, что нет реального практического способа обойти эту проблему.