14.3. Low level layers

The low level drivers abstract the hardware specific features from the rest of the multimedia code. Those are implemented with a well defined set of APIs, as windows do.

Please note that native low level drivers are not currently supported in Wine, because they either access hardware components or require VxDs to be loaded; Wine does not correctly supports those two so far.

There are two specific low level drivers (msacm.drv for wave input/output, midimap.drv for MIDI output only). These drivers (also present in Windows) allow:

14.3.1. Hardware-bound low level drivers

Each low lever driver has to implement at least one of the following functionality, through the named function:

Wine currently supports the following (kernel) multimedia interfaces.

The supported functionnalities per driver is as follows (this table lists the available features of the products, not exactly what's actually implemented on Wine):

Table 14-1. Wine multimedia drivers' functionalities

DriverWave OutWave InMidi OutMidi InMixer (and Aux)
OSSYesYesYesYesYes
ALSAYesYesYesYesYes
aRtsYesYesNoNoYes
ESDYesYesNoNoNo
NASYesYesNoNoYes
AudioIOYesYesNoNoYes
JackYesYesNoNoYes

Lots of listed drivers won't support Midi (in a short time) because the exposed "Un*x" native interfaces don't. This would require using some kind as software synthesis (as Timidity), but we cannot incorporate as it's GPL'ed.

14.3.2. Wave mapper (msacm.drv)

The Wave mapper device allows to load on-demand audio codecs in order to perform software conversion for the types the actual low level driver (hardware). Those codecs are provided through the standard ACM drivers in MSACM32.DLL.

Wave mapper driver implementation can be found in dlls/winmm/wavemap/ directory. This driver heavily relies on MSACM and MSACM32 DLLs which can be found in dlls/msacm and dlls/msacm32. Those DLLs load ACM drivers which provide the conversion to PCM format (which is normally supported by low level drivers). A Law, uLaw, ADPCM, MP3... fit into the category of non PCM formats.

14.3.3. MIDI mapper (midimap.drv)

Midi mapper allows to map each one of 16 MIDI channels to a specific instrument on an installed sound card. This allows for example to support different MIDI instrument definitions (XM, GM...). It also permits to output on a per channel basis to different MIDI renderers.

A built-in MIDI mapper can be found in dlls/winmm/midimap/. It partly provides the same functionality as the Windows' one. It allows to pick up destination channels: you can map a given channel to a specific playback device channel (see the configuration bits for more details).