Чтение многоканального звука
[Функция, связанная с этой страницей, пакет 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.
Наконец, чтобы каналы выводились дискретно, без свертывания в стерео, необходимо задать правильный тип мультимедиа для выходных данных, выполнив следующие действия:
- Вызовите IWMReader::GetOutputFormatCount, чтобы получить количество поддерживаемых форматов для соответствующих звуковых выходных данных. Индексы форматов выходных данных основаны на нулях.
- Для каждого поддерживаемого формата вызовите IWMReader::GetOutputFormat, чтобы получить интерфейс IWMOutputMediaProps для объекта выходных медиа-свойств.
- Вызовите IWMMediaProps::GetMediaType, чтобы получить тип носителя.
- Если полученный тип мультимедиа является нужным многоканальным типом, задайте его путем вызова IWMReader::SetOutputProps.
После того как вы установили дискретные выходы и конфигурацию динамиков, выходные форматы, перечисленные средством чтения, должны включать многоканальные форматы, использующие структуру WAVEFORMATEXTENSIBLE. Если вы перечисляете выходные форматы перед настройкой свойств, будут включены только форматы с 1 или 2 каналами и максимум 16 бит на канал. Как и в других аудиоформатах, следует использовать только форматы, перечисленные средством чтения; не настраивайте собственный.
Заметка
Вы можете вывести многоканальный звук только в том случае, если приложение работает в Microsoft Windows XP или более поздней версии Microsoft Windows.
Связанные разделы
-
Работа с High-Resolution звука PCM