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


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

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

Кодек Windows Media Audio 9 Профессиональный может кодировать многоканальный звук (более двух каналов). При чтении файла с многоканальным звуком необходимо правильно настроить выходные данные или звук будет доставлен в более низком качестве и в стерео. Чтобы задать выходные данные для многоканальной аудиодоставки, необходимо задать два параметра вывода: 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