Поделиться через


Чтение многоканального звука

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен средством чтения исходного кода и модуля записи приемника. Средство чтения исходного кода и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал средство чтения исходного кода и модуль записи приемника вместо пакета SDK для Windows Media Format 11. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Кодек Windows Media Audio 9 Professional может кодировать многоканальный звук (более двух каналов). При чтении файла с многоканальным звуком необходимо правильно настроить выходные данные, иначе звук будет доставляться в более низком качестве и в стерео. Чтобы задать выход для многоканальной доставки звука, необходимо задать два параметра вывода: g_wszEnableDiscreteOutput и g_wszSpeakerConfig.

Если задать для g_wszEnableDiscreteOutput значение TRUE , кодек будет предоставлять аудиоданные высокой четкости. Звук высокой четкости кодируется с помощью кодека Windows Media Audio 9 с 24-разрядными примерами в стерео или нескольких каналах. Если этот параметр имеет значение FALSE, будут доставляться только 16-разрядные стерео выходные данные.

Количество динамиков на игровом компьютере задается с помощью g_wszSpeakerConfig. Этот параметр представляет собой значение DWORD , задающее одну из констант динамиков DirectSound, перечисленных в следующей таблице. Чтобы разрешить эти постоянные имена для компилятора, необходимо включить dsound.h.

Константа Значение Описание
DSSPEAKER_DIRECTOUT 0x00000000 Звук передается напрямую без настройки для динамиков.
DSSPEAKER_HEADPHONE 0x00000001 Клиентский компьютер оснащен наушниками.
DSSPEAKER_MONO 0x00000002 Клиентский компьютер оснащен монауральным динамиком.
DSSPEAKER_QUAD 0x00000003 Клиентский компьютер оснащен квадрофоническими динамиками.
DSSPEAKER_STEREO 0x00000004 Клиентский компьютер оснащен стереодинамиками.
DSSPEAKER_SURROUND 0x00000005 Клиентский компьютер оснащен четырехканавыми динамиками объемного звука.
DSSPEAKER_5POINT1 0x00000006 Клиентский компьютер оснащен пятью динамиками и сабвуфером.
DSSPEAKER_7POINT1 0x00000007 Клиентский компьютер оснащен семью динамиками и сабвуфером.

 

Чтобы задать эти параметры, используйте IWMReaderAdvanced2::SetOutputSetting.

Наконец, чтобы каналы выводились дискретно без свертывания в стерео, необходимо задать правильный тип носителя для выходных данных, выполнив следующие действия.

  1. Вызовите IWMReader::GetOutputFormatCount , чтобы получить количество поддерживаемых форматов для соответствующего аудиовыхода. Индексы формата вывода отсчитываются от нуля.
  2. Для каждого поддерживаемого формата вызовите IWMReader::GetOutputFormat , чтобы получить интерфейс IWMOutputMediaProps в объекте свойств выходного носителя.
  3. Вызовите IWMMediaProps::GetMediaType , чтобы получить тип мультимедиа.
  4. Если полученный тип мультимедиа является требуемым многоканальным типом, задайте его, вызвав IWMReader::SetOutputProps.

После настройки дискретных выходных данных и конфигурации динамиков форматы выходных данных, перечисляемые средством чтения, должны включать многоканальные форматы, использующие структуру WAVEFORMATEXTENSIBLE . Если перед заданием свойств перечислить форматы выходных данных, будут включены только форматы с 1 или 2 каналами и максимум 16 битами на канал. Как и в случае с другими аудиоформатами, следует использовать только форматы, перечисленные средством чтения; не настраивать собственные.

Примечание

Вы можете выводить многоканальный звук только в том случае, если приложение работает в Microsoft Windows XP или более поздней версии Microsoft Windows.

 

Входные, потоки и выходы

Чтение ФАЙЛОВ ASF

Параметры вывода

Работа с High-Resolution PCM Audio