Before playing or recording audio, you must determine the capabilities of the audio hardware present in the system. Audio capability can vary from one multimedia computer to the next; applications should not make assumptions about the audio hardware present in a given system.
Windows provides the following functions to determine how many devices of a certain type are available in a given system:
Function | Description |
auxGetNumDevs | Retrieves the number of auxiliary audio devices present in the system. |
midiInGetNumDevs | Retrieves the number of MIDI input devices present in the system. |
midiOutGetNumDevs | Retrieves the number of MIDI output devices present in the system. |
waveInGetNumDevs | Retrieves the number of waveform input devices present in the system. |
waveOutGetNumDevs | Retrieves the number of waveform output devices present in the system. |
Audio devices are identified by a device identifier (device ID). The device ID is determined implicitly from the number of devices present in a given system. Device IDs range from 0 to 1 less than the number of devices present. For example, if there are 2 MIDI output devices in a system, valid device IDs are 0 and 1.
Once you determine how many devices of a certain type are present in a system, you can inquire about the capabilities of each device. Windows provides the following functions to determine the capabilities of audio devices:
Function | Description |
auxGetDevCaps | Retrieves the capabilities of a given auxiliary audio device. |
midiInGetDevCaps | Retrieves the capabilities of a given MIDI input device. |
midiOutGetDevCaps | Retrieves the capabilities of a given MIDI output device. |
waveInGetDevCaps | Retrieves the capabilities of a given waveform input device. |
waveOutGetDevCaps | Retrieves the capabilities of a given waveform output device. |
Each of these functions takes a far pointer to a data structure the function fills with information on the capabilities of a specified device. The following are the data structures that correspond to each of the device-inquiry functions:
Function | Data Structure |
auxGetDevCaps | AUXCAPS |
midiInGetDevCaps | MIDIINCAPS |
midiOutGetDevCaps | MIDIOUTCAPS |
waveInGetDevCaps | WAVEINCAPS |
waveOutGetDevCaps | WAVEOUTCAPS |
All of the device capabilities data structures have the following fields:
Field | Description |
wMid | Specifies a manufacturer ID for the author of the device driver. |
wPid | Specifies a product ID for the device. |
szPname | Specifies an array of characters containing the name of the device in a null-terminated string. |
vDriverVersion | Specifies the version number of the device driver. |
Microsoft will assign manufacturer IDs and product IDs specified by the wMid and wPid fields. The MMSYSTEM.H file contains constants for currently defined IDs.
The szPname field points to a null-terminated string containing the product name. You should use the product name to identify devices to users.
The vDriverVersion field specifies a version number for the device driver. The high-order of this field is the major version number; the low-order byte is the minor version number.