Применение параметров Speaker-Configuration
Примечание Эти сведения относятся к Windows XP и более ранним операционным системам. Начиная с Windows Vista, IDirectSound::GetSpeakerConfig и IDirectSound::SetSpeakerConfig устарели.
DirectSound отслеживает текущий параметр конфигурации говорящего в реестре и применяет этот параметр к звуковому оборудованию при каждом создании нового устройства DirectSound.
Приложение может изменить конфигурацию динамиков на уровне системы, вызвав метод IDirectSound::SetSpeakerConfig , который обновляет параметр конфигурации говорящего в реестре. Метод также пытается немедленно применить новый параметр к оборудованию, хотя звуковые устройства обычно не могут изменить параметры динамиков, пока существует объект DirectSound. Список конфигураций говорящего, определяемых DirectSound для этого метода, см. в разделе Перевод запросов Speaker-Configuration.
Пользователь может изменить конфигурацию с помощью диалогового окна конфигурация говорящего на странице Свойства мультимедиа (mmsys.cpl) в панель управления. Например, чтобы найти диалоговое окно Конфигурации динамиков DirectSound в Windows XP, выполните следующие действия.
В панель управления дважды щелкните значок Звуковые и звуковые устройства.
На вкладке Звук выберите устройство из списка Воспроизведение звука .
Нажмите кнопку Advanced (Дополнительно).
Выберите вкладку Динамики .
На этом этапе вы увидите метку Настройка говорящего рядом со списком конфигураций динамиков, которые можно выбрать.
DirectSound использует запрос KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property для отправки сведений о конфигурации говорящего на трехмерный узел или узел DAC (KSNODETYPE_3D_EFFECTS или KSNODETYPE_DAC) в графе фильтра звука. Для трехмерного узла целевым объектом для запроса свойства на самом деле является контакт (объект трехмерного потока), который передает узел. Для узла приложения уровня данных целевым объектом является объект фильтра, содержащий узел приложения уровня данных. В любом случае параметр конфигурации говорящего является глобальным и влияет на звуковое устройство в целом. Для всех звуковых приложений, которые впоследствии запускаются, применяются новые параметры до тех пор, пока DirectSound не изменит параметр снова.
Обратите внимание, что только версии DirectSound, которые поставляются с Windows Me, а также Windows XP и более поздних версий, отправляют запросы свойств конфигурации говорящего на узлы DAC, а более ранние версии DirectSound не поддерживают эту функцию. Однако все версии DirectSound отправляют эти запросы на трехмерные узлы.
Если программа приложения создала несколько трехмерных узлов, DirectSound отправляет запросы конфигурации говорящего только на первый создаваемый трехмерный узел.
DirectSound отправляет запросы конфигурации говорящего к узлам 3D и DAC каждый раз, когда приложение создает объект DirectSound или вызывает метод IDirectSound::SetSpeakerConfig . Звуковые устройства обычно не могут изменить конфигурацию динамиков во время управления активными потоками, и DirectSound пытается избежать этого ограничения, где это возможно. Например, при создании объекта DirectSound DirectSound отправляет запросы конфигурации говорящего после создания экземпляра фильтра, но перед созданием любых контактов на фильтре, то есть перед созданием потоков.
Этого ограничения сложнее избежать в случае вызова SetSpeakerConfig. Когда приложение вызывает SetSpeakerConfig, драйвер адаптера обычно завершается сбоем запроса конфигурации говорящего DirectSound. Это связано с тем, что объект DirectSound уже существует. Это означает, что устройство уже имеет активные потоки для управления.
В этом случае драйвер адаптера может справиться с запросом конфигурации говорящего, который завершился сбоем:
Драйвер может запомнить запрошенную конфигурацию и применить ее, как только все его потоки будут уничтожены.
Драйвер может игнорировать запрос и полагаться на DirectSound для отправки другого запроса конфигурации говорящего при следующем создании объекта DirectSound.
Первый вариант обеспечивает лучшее взаимодействие с пользователем, так как если пользователь выбирает новый параметр в диалоговом окне настройки говорящего, изменение вступает в силу немедленно во всех приложениях, а не только в приложениях DirectSound. (Конечно, если какие-либо звуковые приложения запущены во время выбора нового параметра, изменение откладывается до завершения работы всех звуковых приложений.) Однако при использовании второго варианта изменение не вступает в силу, пока не будет запущено приложение DirectSound. Например, если приложение, использующее API windows multimedia waveOut, является первым приложением, которое запускается после изменения параметра панель управления, пользователь может задаться вопросом, почему новый параметр не имеет видимого эффекта.
В ответ на запрос конфигурации говорящего, отправленный на 3D-узел или узел DAC, типичный драйвер адаптера обновляет конфигурацию динамиков в звуковом оборудовании только в том случае, если в настоящее время экземпляры контактов не создаются каким-либо звуковым приложением. Это означает, что если приложение waveOut, например, имеет один или несколько контактов, открытых в то время, когда второе приложение вызывает DirectSoundCreate, драйверу может потребоваться отложить все ожидающие изменения конфигурации динамика звукового устройства на более позднее время.
Если драйверу не удается выполнить запрос на изменение конфигурации говорящего устройства, запрос должен просто завершиться ошибкой. Сбой запроса конфигурации говорящего во время создания объекта DirectSound или вызова SetSpeakerConfig не приводит к сбою при создании объекта DirectSound или вызове SetSpeakerConfig .
Во время загрузки драйвер аудиоадаптера инициализирует конфигурацию динамиков оборудования по умолчанию, которая обычно является стерео. Как только любое приложение создает объект DirectSound, DirectSound применяет параметр, хранящийся в реестре, к оборудованию. Приложение должно создать устройство DirectSound, прежде чем оно сможет вызвать SetSpeakerConfig для изменения параметра конфигурации говорящего в реестре, но этот параметр реестра обычно вступает в силу на оборудовании только после выпуска устройства DirectSound и создания второго устройства DirectSound.
Сразу после установки звукового устройства или при возникновении ошибки конфигурации динамиков DirectSound по умолчанию используется стерео.