Previous Next

Kernel-Mode WDM Audio Components

The kernel-mode WDM audio components are:

WDMAud System Driver

SysAudio System Driver

KMixer System Driver

Redbook System Driver

SBEmul System Driver

SWMidi System Driver

DMusic System Driver

AEC System Driver

DRMK System Driver

Splitter System Driver

Port Class Adapter Driver and PortCls System Driver

USBAudio Class System Driver

AVCAudio Class System Driver

WDMAud System Driver

The kernel-mode WDMAud system driver (wdmaud.sys) is paired with the user-mode WDMAud system driver (wdmaud.drv). The pair of WDMAud drivers translate between user-mode Windows multimedia system calls and kernel-streaming I/O requests. WDMAud performs I/O for the following APIs: waveIn, waveOut, midiIn, midiOut, mixer, and aux (described in the Platform SDK documentation). The kernel-mode WDMAud driver is a KS (kernel streaming) filter and a client of the SysAudio system driver.

SysAudio System Driver

The SysAudio system driver (sysaudio.sys) builds the filter graphs that render and capture audio content. The SysAudio driver represents audio filter graphs as virtual audio devices and registers each virtual audio device as an instance of a KSCATEGORY_AUDIO_DEVICE device interface. (Adapter drivers should not register themselves in this category, which is reserved exclusively for SysAudio.) For example, a virtual MIDI device might represent a filter graph that is created by connecting the SWMidi driver, the KMixer driver, and a port/miniport driver. The client communicates only with the virtual audio device rather than with the individual devices that make up the virtual audio device. Transparent to the client, the SysAudio driver configures all the KS filters in the filter graph that are connected together to form the virtual audio device. The following audio stream sources use the graphs that SysAudio builds:

KMixer System Driver

The KMixer system driver (kmixer.sys) is the KS filter that does the following:

In addition to simple 8- and 16-bit, mono and stereo data formats, the KMixer driver supports:

Redbook System Driver

The Redbook system driver (redbook.sys) is the KS filter that manages the rendering of CD digital audio. The Redbook driver is a client of the SysAudio system driver. The system routes CD digital audio through the file system to the Redbook driver and then to the SysAudio driver. The CD digital audio is rendered on the preferred wave output device (as set in the Multimedia property pages in Control Panel).

SBEmul System Driver

The SBEmul system driver (sbemul.sys) provides Sound Blaster emulation for MS-DOS® applications. The SBEmul driver is a client of the SysAudio system driver. To render and capture content, the SysAudio driver uses the preferred wave and MIDI devices (as set in the Multimedia property pages in Control Panel).

Sound Blaster emulation is supported only on Windows 98/Me.

SWMidi System Driver

The SWMidi system driver (swmidi.sys) is the KS filter that provides software-emulated General MIDI (GM) and high-quality Roland GS wavetable synthesis. A midiOutXxx application uses SWMidi when a hardware synthesizer is unavailable. The SWMidi filter receives as input a time-stamped MIDI stream from the WDMAud system driver and outputs a PCM wave stream to the KMixer system driver. SWMidi mixes all of its voices internally to form a single two-channel output stream with a PCM wave format.

DMusic System Driver

The DMusic system driver (dmusic.sys) is the KS filter that supports software-emulated high-quality DLS (downloadable sound) synthesis. The DMusic driver is a system-supplied port class miniport driver. It exposes a single DirectMusic pin, which supports a DirectMusic stream data range. The DMusic filter receives as input a time-stamped MIDI stream from the DirectMusic system component and outputs a PCM wave stream to the KMixer system driver. The DMusic driver mixes all of its voices internally to form a single two-channel output stream with a PCM wave format.

AEC System Driver

The AEC system driver (aec.sys) supports full-duplex DirectSound applications by implementing AEC (acoustic echo cancellation) and noise-suppression algorithms in software. For more information, see DirectSound Capture Effects.

DRMK System Driver

The DRMK system driver (drmk.sys) is the KS filter that decrypts audio streams containing DRM-protected content. For more information, see Digital Rights Management.

Splitter System Driver

The Splitter system driver (splitter.sys) is the KS filter that creates two or more output streams from a single input capture stream. The Splitter driver transparently copies the input stream to two more output streams independently of the format of the input stream.

The Splitter driver is supported by Windows Me, and Microsoft® Windows® XP and later.

Port Class Adapter Driver and PortCls System Driver

A port class adapter driver uses the port/miniport driver architecture to support an audio device. The PortCls driver includes built-in driver support for ISA and PCI audio devices. Although the PortCls system driver (portcls.sys) also provides the framework for vendor-supplied port class adapter drivers, Microsoft recommends that vendors use a system-supplied port class adapter driver to support ISA and PCI audio devices. The PortCls framework might also be useful for constructing drivers for audio devices on other hardware buses or for software-only devices. For more information, see Introduction to Port Class.

USBAudio Class System Driver

The USBAudio class system driver (usbaudio.sys) is an AVStream minidriver that provides driver support for USB Audio devices that comply with the Universal Serial Bus Device Class Definition for Audio Devices (release 1.0). This specification is available at the USB Implementers Forum Web site. The USBAudio driver supports a subset of the features that are described in the USB Audio specification.

The USBAudio driver for Windows 98 introduced support for USB devices such as speakers and microphones. Support for MIDI devices was added in Windows Me.

When an audio device identifies itself as USB Audio-compliant during plug-and-play device enumeration, the system automatically loads the USBAudio driver to drive the device. USBAudio drives the device directly, without the aid of a proprietary adapter driver. This means that a device that complies with the USB audio specifications requires no proprietary adapter driver.

Microsoft recommends that hardware vendors use the USBAudio driver for their USB Audio devices instead of writing proprietary adapter drivers.

In Windows 98, the USBAudio driver supports the following features:

However, USBAudio in Windows 98 does not support:

In Windows 98 Second Edition (SE), Windows Me, and Windows 2000 and later, USBAudio supports all the same features as Windows 98, with one exception: USBAudio supports WAVEFORMATEXTENSIBLE but does not support packed WAVE_FORMAT_PCM for 24-bit data.

In Windows Me, and Windows XP and later, USBAudio supports all the features that are supported in Windows 98 SE and Windows 2000. In addition, Windows Me and Windows XP support USB MIDI but do not support USB MIDI Elements.

The following figure shows the driver hierarchy for a USB audio device. All of the driver components shown in the figure are provided by Microsoft with the operating system.

Driver Hierarchy for a USB Audio Device

For more information on the driver components in the figure, see the following sections:

AVStream Overview

Introduction to USB Drivers

AVCAudio Class System Driver

The AVCAudio class system driver (avcaudio.sys) is an AVStream minidriver that provides driver support for audio devices that reside on a 1394 bus. The AVCAudio driver and associated support for 1394 audio devices are available in Windows XP and later.

To work with the system-supplied drivers, hardware vendors should design their audio devices to comply with the appropriate sections of the following specifications:

These specifications are available at the 1394 Trade Association Web site. The AVCAudio driver supports a subset of the features that are described in these specifications.

When an audio device identifies itself as a 1394-compliant audio device during plug-and-play device enumeration, the system automatically loads the AVCAudio driver to drive the device. AVCAudio drives the device directly, without the aid of a proprietary adapter driver. This means that a device that complies with the appropriate 1394 specifications requires no proprietary adapter driver.

Microsoft recommends that hardware vendors use the AVCAudio driver for their 1394 audio devices instead of writing proprietary adapter drivers.

The following figure shows the driver hierarchy for a 1394 audio device in Windows XP. In Windows XP and later, all of the driver components shown in this figure are provided by Microsoft with the operating system.

Driver Hierarchy for a 1394 Audio Device

For more information on the driver components in the figure, see the following sections:

AVStream Overview

AV/C Client Drivers

IEEE 1394 Bus