2. В системе могут быть установлены устройства для записи и воспроизведения звука методом импульсно-кодовой модуляции PCM
(waveform audio), устройства для записи и проигрывания музыкальных MIDI-файлов, дополнительные (auxiliary) устройства и другие.
Библиотека mmsystem.dll содержит набор функций, с помощью которых приложение может определить состав устройств и их
возможности.
Не имеющая параметров функция waveOutGetNumDevs возвращает количество устройств, способных воспроизводить записанные с
использование импульсно-кодовой модуляции звуковые данные; функция waveInGetNumDevs возвращает количество устройств, способных
записывать такие данные.
Количество пригодных для записи и воспроизведения MIDI-файлов устройств можно узнать при помощи функций midiOutGetNumDevs и
midiInGetNumDevs соответственно.
Для определения дополнительных устройств предназначена функция auxGetNumDevs.
Для определения возможностей устройств используются функции waveOutGetDevCaps, waveInGetDevCaps, midiOutGetDevCaps и
auxGetDevCaps.
Для вышеперечисленных функций с суффиксом GetDevCaps в качестве первого параметра указывается идентификатор устройства,
изменяющийся от нуля до полученного с помощью функций waveOutGetNumDevs, waveInGetNumDevs, midiOutGetNumDevs,
midiInGetNumDevs и auxGetNumDevs значения.
Второй параметр является дальним указателем на структуру, формат которой зависит от типа устройства. Это может быть структура
AUXCAPS, MIDIINCAPS, MIDIOUTCAPS, WAVEINCAPS или WAVEOUTCAPS.
Третий параметр определяет размер соответствующей структуры в байтах.
3. Структура AUXCAPS
Структура AUXCAPS определяется следующим образом
typedef struct auxcaps_tag
{
UINT wMid; // код разработчика драйвера
UINT wPID; // код устройства
VERSION vDriverVersion; // версия драйвера
char szPname[MAXPNAMELEN]; // название устройства
UINT wTechnology; // тип устройства
DWORD dwSupport; // поддерживаемые функции
} AUXCAPS;
typedef AUXCAPS *PAUXCAPS;
typedef AUXCAPS NEAR *NPAUXCAPS;
typedef AUXCAPS FAR *LPAUXCAPS;
Поля wMid, wPid, vDriverVersion и szPname определены во всех структурах, используемых для определения возможностей устройств мультимедиа.
Поле wTechnology специфично для структуры AUXCAPS.
Поле dwSupport может содержать флаги AUXCAPS_VOLUME (есть возможность регулировки громкости) и AUXCAPS_LRVOLUME(есть возможность раздельной регулировки
громкости для левого и правого канала).
4. Структуры MIDIINCAPS и MIDIOUTCAPS
Структура MIDIINCAPS содержит только те поля, которые являются
общими для всех структур, предназначенных для определения возможностей
устройств мультимедиа
typedef struct midiincaps_tag
{
UINT wMid;
UINT wPid;
VERSION vDriverVersion;
char szPname[MAXPNAMELEN];
} MIDIINCAPS;
typedef MIDIINCAPS *PMIDIINCAPS;
typedef MIDIINCAPS NEAR *NPMIDIINCAPS;
typedef MIDIINCAPS FAR *LPMIDIINCAPS;
Структура MIDIOUTCAPS дополнительно содержит поля wTechnology, wVoices,
wChannelMask и dwSupport
typedef struct midioutcaps_tag
{
UINT wMid;
UINT wPid;
VERSION vDriverVersion;
char szPname[MAXPNAMELEN];
UINT wTechnology;
UINT wVoices;
UINT Notes;
UINT wChannelMask;
DWORD dwSupport;
} MIDIOUTCAS;
typedef MIDIOUTCAPS *PMIDIOUTCAPS;
typedef MIDIOUTCAPS NEAR *NMIDIOUTCAPS:
typedef MIDIOUTCAPS FAR *LPMIDIOUTCAPS;
В поле wTechnology могут находиться значения MOD_MIDIPORT, MOD_SQSYNTH,
MOD_FMSYNTH и MOD_MAPPER.
5. Структура WAVEINCAPS
Структура WAVEINCAPS предназначена для определения возможностей
устройств ввода звуковых сигналов с использованием импульсно-кодовой модуляции
typedef struct waveincaps_tag
{
UINT wMid;
UINT wPid;
VERSION vDriverVersion;
char szPname[MAXPNAMELEN];
UINT wFormats;
UINT wChannels;
} WAVEINCAPS;
typedef WAVEINCAPS *PWAVEINCAPS;
typedef WAVEINCAPS NEAR *NPWAVEINCAPS;
typedef WAVEINCAPS FAR *LPWAVEINCAPS;
В поле wChannels содержится количество каналов.
В поле dwFormats могут располагаться флаги, соответствующие стандартным
форматам звуковых данных, поддерживаемых данным устройством. Флаги объединяются
при помощи логической операции ИЛИ.
6. Структура WAVEOUTCAPS
Структура WAVEOUTCAPS предназначена для определения возможностей
устройств вывода звуковых сигналов с использованием импульсно-кодовой модуляции
typedef struct waveoutcaps_tag
{
UINT wMid;
UINT wPid;
VERSION vDriverVersion;
char szPname[MAXPNAMELEN];
UINT wFormats;
UINT wChannels;
DWORD dwSupport;
} WAVEOUTCAPS;
typedef WAVEOUTCAPS *PWAVEOUTCAPS;
typedef WAVEOUTCAPS NEAR *NPWAVEOUTCAPS;
typedef WAVEOUTCAPS FAR *LPWAVEOUTCAPS;
Поле dwSupport содержит флаги, соответствующие различным возможностям
вывода.