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 |
MIXERCONTROL_CONTROLTYPE_ONOFF |
|
Loudness |
MIXERCONTROL_CONTROLTYPE_LOUDNESS |
|
Mute |
MIXERCONTROL_CONTROLTYPE_MUTE |
|
Tone (multiple) |
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 |
MIXERCONTROL_CONTROLTYPE_VOLUME |
|
Peakmeter |
MIXERCONTROL_CONTROLTYPE_PEAKMETER |
|
MUX |
MIXERCONTROL_CONTROLTYPE_MUX |
|
Stereo wide |
MIXERCONTROL_CONTROLTYPE_FADER |
|
Chorus |
MIXERCONTROL_CONTROLTYPE_FADER |
|
Reverb |
MIXERCONTROL_CONTROLTYPE_FADER |
|
Supermix (multiple) |
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:
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.