#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
использования структуры там.