Unified Audio Model (Windows CE 5.0)
The unified audio model (UAM) implements direct support for the standard wave driver interfaces. The other audio driver model available consists of the model device driver (MDD) and platform-dependent driver (PDD) modules. The MDD module implements the hardware-independent part of the driver and exports the driver interfaces to the middleware. The PDD module provides the hardware-dependent implementation of the driver.
The MDD and PDD audio model makes certain assumptions about the way the hardware works and what types of features are supported. As a result it is generally the easier model to use when creating a device driver, especially if the audio hardware supports common features and if your driver design requirements are straightforward. The following list shows some limitations of the MDD and PDD model.
- Only supports one device (waveOutGetNumDevs always returns 1)
- Only supports one stream per device
- No reliable support for looping
- Poor support for streaming
You can work around these limitations by modifying the MDD or by writing your own complete driver that exports the proper interfaces to the middleware. This latter approach is the UAM.
The following diagram shows the interaction of the UAM with the audio driver.
The UAM is more flexible than the MDD/PDD model in that it gives you more control over exactly how the driver interacts with the waveform audio middleware. This means also means that it usually involves a larger development effort because it does not make use of the common elements of the MDD. The benefit of the UAM model is that it necessarily gives you complete access to all of the waveform audio capabilities that Windows CE supports.
You can compare the two audio driver models by looking at the driver code in %_WINCEROOT\PUBLIC\COMMON\OAK\DRIVERS\WAVEDEV. There you will find both PDD driver code and UAM driver code for the same audio hardware. This code will illustrate how the UAM version can take advantage of the fact that the hardware can mix two streams, while the MDD/PDD version relies on the kernel mixer to handle all the streams.
Send Feedback on this topic to the authors