Конфигурация динамиков DSSPEAKER_SURROUND
Примечание Эта информация относится к Windows XP и более ранним операционным системам. Начиная с Windows Vista, IDirectSound::GetSpeakerConfig и IDirectSound::SetSpeakerConfig устарели.
Программа приложения может изменить конфигурацию динамиков DirectSound на режим окружения, вызвав метод IDirectSound::SetSpeakerConfig с параметром конфигурации говорящего, равным DSSPEAKER_SURROUND. Этот параметр задает формат PCM с четырьмя каналами, в котором каналы сопоставляются с левыми, правыми, центральными и задними динамиками.
После того как он вступит в силу, параметр DSSPEAKER_SURROUND конфигурации динамиков становится глобальным и влияет на звуковое устройство в целом. Для всех звуковых приложений, которые впоследствии запускаются, применяются новые параметры, пока DirectSound не изменит его снова.
DirectSound использует следующий алгоритм для настройки аудиосистемы для режима объемного звука:
DirectSound сначала просит драйвер перейти в режим объемного динамика, отправляя KSPROPERTY_AUDIO_CHANNEL_CONFIG запрос set-property на узел DAC драйвера (или трехмерный узел, если у него нет узла DAC). (См . KSNODETYPE_DAC и KSNODETYPE_3D_EFFECTS.) Структура KSAUDIO_CHANNEL_CONFIG , сопровождающая этот запрос на свойство, определяет конфигурацию KSAUDIO_SPEAKER_SURROUND динамиков. Если запрос выполнен успешно, звуковое устройство направляет четыре канала в четыре аналоговых выхода, которые подключены непосредственно к левым, правым, центральным и задним динамикам.
Если это не удается, DirectSound просит драйвер настроить устройство в режиме стерео динамиков и включить его KSNODETYPE_PROLOGIC_ENCODER узел, если он имеется. В случае успеха устройство преобразует четырехканальные потоки из приложения в стереофонический сигнал в закодированном виде, который он выводит в цифровой или аналоговой форме. (Оборудование должно выполнять кодирование после смешивания потоков, которые передаются в различные контакты микшера устройства.) Пользователь может подключить стереовыходы устройства к внешнему декодеру, который преобразует закодированный сигнал в четыре канала, которые являются выходными для левых, правых, центральных и задних динамиков.
В случае сбоя DirectSound включает узел KSNODETYPE_PROLOGIC_ENCODER в KMixer. (Устройство уже находится в режиме стерео из предыдущего шага.) Опять же, стереосигнал, который выдается устройством, можно отправить во внешний декодер.
Если этот алгоритм будет выполнен успешно, приложение сможет создавать и воспроизводить четырехканальные буферы PCM. В случаях 1 и 2 выше аппаратные буферы, считываемые устройством, используют четыре канала, но в случае 3 аппаратные буферы используют стереоформат. Приложение может выполнять запись непосредственно в аппаратные буферы в случаях 1 и 2, но в случае 3 оно должно выполнять запись в программный буфер и позволить KMixer преобразовать четырехканальные потоки приложения в стереоформат с объемным кодированием, необходимый для аппаратного буфера.
В случае (3) выше приложение не должно использовать аппаратные буферы для любых своих потоков вывода. Обратите внимание, что KMixer смешивает все входные потоки перед кодировкой для создания объемного стереопотока. Однако любой поток, поступающий в аппаратный контакт микшера, смешивается в оборудовании с закодированным стерео из KMixer, что снижает качество объемного звука при его декодировании. Приложение может предотвратить это, используя только программные буферы.
Стереопоток, закодированный KSNODETYPE_PROLOGIC_ENCODER узлом, может быть декодирован в четыре канала (левый, правый, центральный и задний) с помощью узла KSNODETYPE_PROLOGIC_DECODER .