Узлы топологии

Звуковые приложения могут получать доступ к элементам управления миксером с помощью мультимедийной функции Microsoft Windows mixerGetLineControls. Эта функция извлекает массив одной или нескольких структур MIXERCONTROL, каждый из которых описывает состояние и метрики одного узла управления в звуковой строке. Элемент dwControlType структуры MIXERCONTROL имеет значение перечисления, указывающее тип элемента управления. Для звуковых драйверов WDM задано несколько типов элементов управления mixer-control, но для них доступно только подмножество этих элементов.

WDMAud преобразует некоторые, но не все узлы топологии в соответствующие элементы управления линией микшера. Типы узлов топологии, перечисленные в следующей таблице, имеют соответствующие элементы, которые являются элементами управления линией микшера.

Тип узла имя типа Topology-Node имя типа Mixer-Control

AGC

KSNODETYPE_AGC

MIXERCONTROL_CONTROLTYPE_включено-выключено

Громкость

KSNODETYPE_LOUDNESS (уровень громкости)

MIXERCONTROL_CONTROLTYPE_LOUDNESS

Немой

KSNODETYPE_MUTE

MIXERCONTROL_CONTROLTYPE_MUTE

Тон (несколько вариантов)

KSNODETYPE_TONE

MIXERCONTROL_CONTROLTYPE_ONOFF (если поддерживается KSPROPERTY_AUDIO_BASS_BOOST)

MIXERCONTROL_CONTROLTYPE_BASS (если KSPROPERTY_AUDIO_BASS поддерживается)

MIXERCONTROL_CONTROLTYPE_TREBLE (если KSPROPERTY_AUDIO_TREBLE поддерживается)

Объем

KSNODETYPE_VOLUME

MIXERCONTROL_CONTROLTYPE_VOLUME

Пикметр

KSNODETYPE_PEAKMETER

MIXERCONTROL_CONTROLTYPE_PEAKMETER

МУЛЬТИПЛЕКСОР

KSNODETYPE_MUX

MIXERCONTROL_CONTROLTYPE_MUX

Широкое стерео

KSNODETYPE_STEREO_WIDE

MIXERCONTROL_CONTROLTYPE_FADER

Хор

KSNODETYPE_CHORUS

MIXERCONTROL_CONTROLTYPE_FADER

Реверберации

KSNODETYPE_REVERB

MIXERCONTROL_CONTROLTYPE_FADER

Супермикс (несколько)

KSNODETYPE_SUPERMIX

MIXERCONTROL_CONTROLTYPE_MUTE (если KSPROPERTY_AUDIO_MUTE поддерживается в узле супермикса)

MIXERCONTROL_CONTROLTYPE_VOLUME (см. комментарии в тексте)

Типы узлов топологии, отсутствующие в предыдущей таблице, не преобразуются в элементы управления mixer-line, а элементы управления mixer-line, отсутствующие в таблице, не поддерживаются звуковыми драйверами WDM.

Обратите внимание, что MIXERCONTROL_CONTROLTYPE_CUSTOM отсутствует в таблице. Это означает, что звуковые драйверы WDM не поддерживают пользовательские элементы управления миксером.

Узел тонов поддерживает четыре свойства: бас, требл, середина частоты и бум баса. Свойство средней частоты не имеет соответствия mixer-line, но другие три свойства имеют. Для каждого узла тона, обнаруженного в топологии, выполняется запрос для каждого из поддерживаемых свойств:

KSPROPERTY_AUDIO_BASS

KSPROPERTY_AUDIO_TREBLE

KSPROPERTY_AUDIO_BASS_BOOST

Каждый успешный запрос свойства генерирует элемент управления линией микшера. Из-за проблем с именованием один тональный узел должен поддерживать только одно свойство. Если устройство поддерживает как басы, так и высокие частоты, например, оно должно иметь два регулятора, чтобы они могли иметь разные имена.

Узел супермикс поддерживает до двух элементов управления: отключение и громкость. Узел супермикса можно использовать как элемент управления отключением звука, если он удовлетворяет хотя бы одному из этих двух условий для каждой записи в таблице возможностей узла супермикса.

  • Запись поддерживает свойство отключения звука, как указано во Возможностях с флагом Отключить звук.

  • Запись полностью ослаблена (-infinity децибел и не может быть увеличена, как указано обеими возможностями: Минимальными и Максимальными, имеющими значение LONG_MIN (0x80000000)).

Узел супермикса можно использовать в качестве регулятора громкости, если каждая запись в таблице возможностей супермикса имеет ненулевой диапазон. Все остальные элементы управления претворяются в один. При обнаружении распознанного узла драйвер линии микширования запрашивает свойство, соответствующее этому узлу.

Чтобы проверить поддержку стерео или моно, левый канал запрашивается, за которым следует правый канал, и, наконец, если оба из них завершаются ошибкой, выполняется попытка главного канала (-1). Если ни один из этих запросов не выполнен, для этого узла не создается элемент управления. Обратите внимание, что узел MUX не запрашивается для каждого канала. Вместо этого выполняется один запрос для получения текущего выбора коммутатора.

Имя элемента управления возвращается в виде строки, когда запрашивается свойство узла KSPROPERTY_TOPOLOGY_NAME. Если узел создает несколько элементов управления, все элементы управления имеют одно и то же имя.