Функции формы сигнала Windows — ЗАГЛУШКИ для битовых глубин, отличных от 8 и 16

#audio #waveout

#Аудио #выход сигнала

Вопрос:

В документации Microsoft для структуры WAVEOUTCAPS перечислен ряд форматов, которые может поддерживать аудиоустройство:

введите описание изображения здесь

Я не вижу никаких 24-битных переменных, перечисленных здесь, хотя я подтвердил, что моя звуковая карта способна открывать 24-битный вывод с помощью вызова WaveOutOpen (и воспроизводить 24-битные аудиофайлы через этот вывод).

Я предполагаю, что Microsoft определила дополнительные переменные где-то для вывода 18/20/24/32/48/64 бит, но я не могу их найти. Я попытался выполнить поиск в сети, но ничего не получилось, и я попытался использовать Visual Studio для поиска переменных в моем текущем пространстве имен, которые начинаются с «WAVE_FORMAT_», но не нашел никаких дополнительных определенных форматов таким образом.

Можно ли проверить доступность вывода 4/18/20/24/32/48/64 бит в Windows с помощью функции WaveOutGetDevCap() или любой подобной функции? Если да, то каким образом?

Ответ №1:

waveOutXxx это устаревший API, который вы, вообще говоря, не должны использовать в настоящее время. Этот API представляет собой слой эмуляции поверх real audio API и не должен поддерживать 24-разрядные сценарии, которые не существовали на момент waveOutXxx . Для новых форматов не определены конкретные новые константы, и их так много, что для каждого из них не может быть отдельного бита.

Вы можете создать WAVEFORMATEX структуру, описывающую ваш формат с высокой разрядностью (обычно вы используете WAVEFORMATEXTENSIBLE его вариант), и проверить его на waveOutOpen соответствие функции.

Или, скорее, используйте WASAPI и IAudioClient::Initialize , см. Рендеринг потока для получения подробной информации и способа WAVEFORMATEX использования структуры там.