WASAPI: IAudioClient-> Initialize завершается успешно, даже если IAudioClient-> IsFormatSupported завершается неудачно с тем же форматом - PullRequest
2 голосов
/ 05 октября 2011

Я пытаюсь выяснить, какие форматы вывода поддерживаются конкретным аудиоустройством в эксклюзивном режиме. Для этого я использую IAudioClient-> IsFormatSupported (), который согласно документации должен использоваться для этого. К сожалению, он возвращает AUDCLNT_E_UNSUPPORTED_FORMAT почти для каждого формата, который я пытаюсь передать, за исключением 2-канального звука по умолчанию, 44,1 кГц.

Если я на самом деле пытаюсь инициализировать аудиоклиент, существуют форматы, которые успешно работают, но не работают в IsFormatSupported ().

Просто попытка инициализировать каждый формат не подходит, потому что это может привести к остановке звука из других приложений.

Кто-нибудь еще видел такое поведение или знает, есть ли другой способ узнать, какие форматы поддерживаются конкретным аудиоустройством?

1 Ответ

1 голос
/ 02 июня 2012

Я также видел это поведение. Похоже, что IsFormatSupported будет принимать только то, что помечено как «поддерживаемое» в настройках устройства воспроизведения в Windows, но инициализация, похоже, фактически заканчивает тем, что спрашивает драйверы, действительно ли это возможно.

В моей конкретной ситуации у меня есть настройка Xoxar HDAV1.3 для использования HDMI в качестве выхода. Всегда доступны два устройства воспроизведения: динамики и сквозное устройство S / PDIF. Если я попытаюсь, например, запросить 6 каналов для устройства воспроизведения S / PDIF, IsFormatSupported отклонит его (теоретически S / PDIF поддерживает только 2, и это все, что я вижу в настройках), но вызов Initialize будет успешным и работает (все-таки выходит HDMI, для которого поддерживается 6 каналов). Разговор о вводящих в заблуждение названиях устройств!

Боюсь, что нет реального способа обойти эту проблему.

...