Audio Compression Manager Drivers

Audio compression manager drivers, also known as ACM drivers, are called by the Windows CE Wave API Manager. The Wave API Manager sends messages to ACM drivers when applications need to play or record sounds. ACM drivers are responsible for responding to these messages to do the work of sound playback and recording. The two main reasons for writing an ACM driver are:

  1. To support a particular audio file format. For example, there are different audio compression manager drivers for playing Microsoft Windows' .WAV files versus Sun Microsystems' .AU files.
  2. To use an encoding or compression algorithm that is tailored to the characteristics of a particular type of audio. For example, human speech has a fairly limited frequency range and many essentially silent periods of time. An ACM driver written with those characteristics in mind can produce recordings which take little memory yet give good results.

Like many kinds of Windows CE device driver, ACM drivers are installable device drivers, expose the standard stream I/O functions, and are managed by the Device Manager. All ACM drivers must use "ACM" as their device filename prefix. Multiple ACM drivers that are installed on a Windows CE system differentiate themselves by using the [Index] key in their registry settings. Thus, they end up with the special device filenames "ACM1:", "ACM2:", and so on. A maximum of ten ACM drivers can be installed at one time. The Wave API Manager also uses the Index keys when searching for an ACM driver to perform format conversions. The first ACM driver found that can handle the conversion is used. For more details, see Device Filename Prefixes and Registry Keys Related to Windows CE Device drivers.

The messages that ACM drivers must respond to are very similar to those used by ACM drivers written for Microsoft Windows NT. The Windows CE Wave API Manager uses an ACM drivers' ACM_IOControl function to pass messages to the driver. The other stream I/O functions are not used except for setup and shutdown tasks.