Поделиться через


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

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

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

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

AGC

KSNODETYPE_AGC

MIXERCONTROL_CONTROLTYPE_ONOFF

Громкость

KSNODETYPE_LOUDNESS

MIXERCONTROL_CONTROLTYPE_LOUDNESS

Mute

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

MUX

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 (см. примечания в тексте)

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

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

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

KSPROPERTY_AUDIO_BASS

KSPROPERTY_AUDIO_TREBLE

KSPROPERTY_AUDIO_BASS_BOOST

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

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

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

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

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

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

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