Технологии программирования миди

 Навигация:

 Поиск:

 Новости:

17.02.2007
Полностью переработан дизайн сайта.

6.01.2007
Добавлен раздел Наработки Полезные и интересные программы и их исходники от автора.

19.11.2006
Функции WriteVarLen и ReadVarLen портированы с СИ на Delphi читать

14.11.2006
Появилась cтатья Midi-протокол глазами программиста

24.10.2006
Написана вторая часть MMSystem Функции midiOutGetVolume midiOutSetVolume midiOutMessage midiOutShortMsg и midiOutLongMsg

12.10.2006
Добавлен раздел Multimedia , который содержит большое количество информации по мультимедийным технологиям.

1.09.2006
Добавлен раздел MMSystem в котором находятся
подробные опсания функций winmm.dll, определенных в модуле mmSystem.pas,
с примерами их использования в Delphi.

13.08.2006
Опубликован исходник приложения, записывающего игру на клавиатуре
в стандартный midi-файл SMF - 0

4.07.2006
Добавлен раздел Структура формата миди-файла

 Счетчики:
Rambler's Top100 Яндекс цитирования Rambler's Top100
 Контент:

Программное определение возможностей звуковых устройств мультимедиа

В системе могут быть установлены устройства для записи и воспроиз-ведения звука методом импульсно-кодовой модуляции PCM (waveform audio), устройства для записи и проигрывания музыкальных MIDI-файлов, дополнительные (auxiliary) устройства (например, проигрыватель звуковых компакт-дисков) и другие.

Библиотека mmsystem.dll содержит набор функций, с помощью кото-рых приложение может определить состав устройств и их возможности.
Не имеющая параметров функция waveOutGetNumDevs возвращает количество устройств, способных воспроизводить записанные с использо-вание импульсно-кодовой модуляции звуковые данные; функция waveInGetNumDevs возвращает количество устройств, способных записы-вать такие данные.
Количество пригодных для записи и воспроизведения MIDI-файлов устройств можно узнать при помощи функций midiOutGetNumDevs и midiInGetNumDevs соответственно.
Для определения дополнительных устройств предназначена функция auxGetNumDevs.

Для определения возможностей устройств используются функции waveOutGetDevCaps (возможности устройств вывода данных, записанных методом импульсно-кодовой модуляции), waveInGetDevCaps (возможно-сти устройств записи данных методом импульсно-кодовой модуляции), midiOutGetDevCaps (возможности устройств воспроизведения в формате MIDI) и auxGetDevCaps (возможности дополнительных устройств).
Для вышеперечисленных функций с суффиксом GetDevCaps в качестве первого параметра указывается идентификатор устройства, изменяющийся от нуля (для первого устройства) до полученного с помощью функций waveOutGetNumDevs, waveInGetNumDevs, midiOutGetNumDevs, midiInGetNumDevs и auxGetNumDevs значения.
Второй параметр является дальним указателем на структуру, формат которой зависит от типа устройства. Это может быть структура AUXCAPS (дополнительное устройство), MIDIINCAPS (устройство для ввода данных MIDI), MIDIOUTCAPS (устройство вывода MIDI-данных), WAVEINCAPS (устройство ввода данных, записанных методом импульсно-кодовой модуляции) или WAVEOUTCAPS (устройство вывода данных, записанных методом импульсно-кодовой модуляции).
Третий параметр определяет размер соответствующей структуры в байтах.

Структура 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. В нем мо-гут быть установлены флаги AUXCAPS_AUXIN (имеется звуковой вход от внутреннего устройства проигрывания компакт-дисков) и AUXCAPS_AUXIN (предусмотрен звуковой вход от входной линии, рас-положенной на плате звукового адаптера).

Поле dwSupport может содержать флаги AUXCAPS_VOLUME (есть возможность регулировки громкости) и AUXCAPS_LRVOLUME (есть возможность раздельной регулировки громкости для левого и правого ка-нала).

Структура 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 (устройство является аппаратным портом MIDI), MOD_SQSYNTH (уст-ройство является синтезатором с выходным сигналом прямоугольной фор-мы), MOD_FMSYNTH (FM-синтезатор -т.е. синтезатор с частотной мо-дуляцией) и MOD_MAPPER (устройство отображения Microsoft MIDI Mapper).

Структура 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 содержится количество каналов (1 для моно и 2 для стерео).
В поле dwFormats могут располагаться флаги, соответствующие стандартным форматам звуковых данных, поддерживаемых данным уст-ройством. Флаги объединяются при помощи логической операции ИЛИ, для них в файле mmsystem.h определены нижеследующие символические константы
Частота дискретизации, количество каналов Константа (моно, стерео) и количество бит для представле- ния сигнала WAVE_FORMAT_1M08 11,025 kГц, моно, 8 бит
WAVE_FORMAT_1S08 11,025 kГц, стерео, 8 бит
WAVE_FORMAT_1M16 11,025 kГц, моно, 16 бит
WAVE_FORMAT_1S16 11,025 kГц, стерео, 16 бит
WAVE_FORMAT_2M08 22,5 kГц, моно, 8 бит
WAVE_FORMAT_2S08 22,5 kГц, стерео, 8 бит
WAVE_FORMAT_2M16 22,5 kГц, моно, 16 бит
WAVE_FORMAT_2S16 22,5 kГц, стерео, 16 бит
WAVE_FORMAT_4M08 44,1 kГц, моно, 8 бит
WAVE_FORMAT_4S08 44,1 kГц, стерео, 8 бит
WAVE_FORMAT_4M16 44,1 kГц, моно, 16 бит
WAVE_FORMAT_4S16 44,1 kГц, стерео, 16 бит

Структура 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 содержит флаги, соответствующие различным воз-можностям вывода, символические константы для них определены в файле mmsystem.h и представлены ниже
Константа Описание
WAVECAPS_PITCH Поддерживается изменение высоты тона
WAVECAPS_PLAYBACKRATE Изменение скорости проигрывания
WAVECAPS_VOLUME Управление громкостью
WAVECAPS_LRVOLUME Раздельное управление громкостью для левого и правого каналов
WAVECAPS_SYNC Драйвер устройства вывода работает в синхронном режиме (во время проигрывания работа приложения приостанавливается)

Содержание
 Bash.org.ru:

 Реклама:

 ©Copyright:
http://www.last.h16.ru - программирование миди. Идея, разработка и поддержка : Mo-skin © 2006-2007
X