Skip to content

Latest commit

 

History

History
130 lines (107 loc) · 8.24 KB

topology-nodes.md

File metadata and controls

130 lines (107 loc) · 8.24 KB
title description keywords ms.date
Topology Nodes
Topology Nodes
topology nodes WDK audio
nodes WDK audio , topology
MIXERCONTROL structure
tone nodes WDK audio
translating nodes WDK audio
supermix nodes WDK audio
bass property WDK audio
treble property WDK audio
bass boost property WDK audio
mid-frequency property WDK audio
04/20/2017

Topology Nodes

Audio applications can access mixer controls through the Microsoft Windows multimedia function mixerGetLineControls. This function retrieves an array of one or more MIXERCONTROL structures, each of which describes the state and metrics of a single control node on an audio line. The dwControlType member of the MIXERCONTROL structure is set to an enumeration value that specifies the type of the control. A number of mixer-control types have been specified for audio VxDs, but only a subset of these controls is available for WDM audio drivers.

WDMAud translates some but not all topology nodes into corresponding mixer-line controls. The topology-node types that are listed in the following table have counterparts that are mixer-line controls.

Node Type Topology-Node Type Name Mixer-Control Type Name

AGC

KSNODETYPE_AGC

MIXERCONTROL_CONTROLTYPE_ONOFF

Loudness

KSNODETYPE_LOUDNESS

MIXERCONTROL_CONTROLTYPE_LOUDNESS

Mute

KSNODETYPE_MUTE

MIXERCONTROL_CONTROLTYPE_MUTE

Tone (multiple)

KSNODETYPE_TONE

MIXERCONTROL_CONTROLTYPE_ONOFF (if KSPROPERTY_AUDIO_BASS_BOOST is supported)

MIXERCONTROL_CONTROLTYPE_BASS (if KSPROPERTY_AUDIO_BASS is supported)

MIXERCONTROL_CONTROLTYPE_TREBLE (if KSPROPERTY_AUDIO_TREBLE is supported)

Volume

KSNODETYPE_VOLUME

MIXERCONTROL_CONTROLTYPE_VOLUME

Peakmeter

KSNODETYPE_PEAKMETER

MIXERCONTROL_CONTROLTYPE_PEAKMETER

MUX

KSNODETYPE_MUX

MIXERCONTROL_CONTROLTYPE_MUX

Stereo wide

KSNODETYPE_STEREO_WIDE

MIXERCONTROL_CONTROLTYPE_FADER

Chorus

KSNODETYPE_CHORUS

MIXERCONTROL_CONTROLTYPE_FADER

Reverb

KSNODETYPE_REVERB

MIXERCONTROL_CONTROLTYPE_FADER

Supermix (multiple)

KSNODETYPE_SUPERMIX

MIXERCONTROL_CONTROLTYPE_MUTE (if KSPROPERTY_AUDIO_MUTE is supported in the supermix node)

MIXERCONTROL_CONTROLTYPE_VOLUME (see comments in text)

Topology-node types that are missing from the preceding table are not translated into mixer-line controls, and mixer-line controls that are missing from the table are not supported by WDM audio drivers.

Note that MIXERCONTROL_CONTROLTYPE_CUSTOM is missing from the table. This means that WDM audio drivers do not support custom mixer controls.

A tone node supports four properties: bass, treble, mid-frequency, and bass boost. The mid-frequency property has no mixer-line counterpart, but the other three properties do. For each tone node discovered in the topology, a query is made for each of the supported properties:

KSPROPERTY_AUDIO_BASS

KSPROPERTY_AUDIO_TREBLE

KSPROPERTY_AUDIO_BASS_BOOST

Each property query that succeeds generates a mixer-line control. Due to naming issues, a single tone node should support only a single property. If a device supports both bass and treble, for example, it should have two tone nodes so that the nodes can have different names.

A supermix node supports up to two controls: mute and volume. A supermix node can be used as a mute control when it satisfies at least one of these two conditions for every entry in the supermix node's capabilities table:

  • The entry supports the mute property, as specified by the Capabilities.Mute flag.

  • The entry is fully attenuated (-infinity decibels attenuation) and cannot be turned up, which is specified by both Capabilities.Minimum and Capabilities.Maximum having the value LONG_MIN (0x80000000).

A supermix node can be used as a volume control when every entry in the supermix capabilities table has a nonzero range. All other controls are translated one-to-one. When a recognized node is encountered, the mixer-line driver queries the respective property for that node.

To check for stereo or mono support, the left channel is queried, followed by the right channel, and finally, if both of these fail, the master channel (-1) is tried. If none of these queries succeeds, no control is generated for that node. Note that the MUX node is not queried for each channel. Instead, a single query to retrieve the current MUX selection is performed.

The name of the control is returned as a string when the node is queried for its KSPROPERTY_TOPOLOGY_NAME property. If a node generates more than one control, all controls share the same name.