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