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

 Навигация:

 Поиск:

 Новости:

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
 Контент:

Управление устройством CD-ROM

Как было сказано, данные на компакт-диске записаны вдоль одной спирали; в первом приближении можно считать, что на музыкальных дис-ках эта спираль (логически) разбита на несколько участков (дорожек), ка-ждая из которых содержит отдельную запись (например, музыкальное про-изведение).

Приложение имеет возможность устанавливать лазерное устройство чтения в произвольное место спирали, причем драйвер обеспечивает пози-ционирование в режиме прямого доступа как на начало любой дорожки, так и в произвольную позицию внутри дорожки (позиционирование может длиться до 0,5 сек).

Устройство чтения CD-ROM имеет два звуковых выхода. Один из них обычно расположен на лицевой панели и предназначен для подключения головных телефонов (там же находится регулятор громкости), второй вы-веден на заднюю панель и подключается кабелем к входу звукового адап-тера. Приложения мультимедиа поэтому могут выполнять не только про-игрывание звуковых компакт-дисков, но и синхронную запись WAV-файлов.

Работа с устройством CD-ROM возможна при помощи интерфейса управляющих строк MCI или интерфейса управляющих сообщений MCI.

Интерфейс управляющих строк MCI

Для передачи управляющей строки устройству чтения CD-ROM необ-ходимо использовать функцию mciSendString

Перед началом работы с устройством необходимо его открыть, пере-дав управляющую строку open, указав при этом имя устройства как cdaudio (допускается использование алиаса -альтернативного имени)

open cdaudio alias cd wait

Операция открытия устройства CD-ROM может выполняться не-сколько секунд, поэтому целесообразно перед продолжением работы при-ложения дождаться ее завершения, указав параметр wait. С целью дости-жения возможности использования данного устройства несколькими при-ложениями одновременно можно указать параметр shareable (этот пара-метр должны указать все приложения, желающие иметь одновременный доступ к устройству). Так как драйвер устройства CD-ROM не работает с файлами, путь к конкретному файлу в управляющей строке open не ука-зывается.

Команда close служит для закрытия устройства, особенностей не име-ет, в качестве параметра необходимо указать имя устройства cdaudo (или алиас, если устройство было открыто с использованием альтернативного имени)

close cd

Справочные команды. Команда sysinfo требует один параметр -стро-ку cdaudio (даже если при открытии был использован алиас); для команды info можно указывать только параметр product.

Команда capability с параметром can eject позволяет определить, име-ет ли устройство CD-ROM возможность автоматического извлечения ком-пакт-дисков. Можно использовать иные параметры (с целью определения соответствующих возможностей устройства) -can play, can record, can save, compound device, device type, has audio, has video, uses file.

Для определения текущего состояния CD-ROM следует использовать команду status, можно указывать следующие параметры

Параметр команды status Что определяется
current track Номер текущей дорожки
length Общая длина
length track track_number Длина заданной дорожки
media present При наличии в устройстве вставленного компакт- диска возвращается строка true
mode Текущий режим работы -not ready (не готов), playing
(проигрывание), stopped (останов), recording (запись), seeking (позиционирование)
number of track Количество дорожек
position Текущая позиция
position track track_number Текущая позиция на заданной дорожке
ready При готовности устройства возвращается строка true
start position Начальная позиция
time formar Текущий формат времени

Команды установки режимов работы. Команда break позволяет опре делить код виртуальной клавиши, предназначенный для прерывания процесса выполнения текущей команды (по умолчанию используется комби-нация клавиш ).

Для команды set можно указывать следующие параметры
Параметр команды set Действие
audio all off Отключение звукового выхода
audio all on Включение звукового выхода
audio left off Отключение левого канала
audio left on Включение левого канала
audio right off Отключение правого канала
audio right on Включение правого канала
door closed Загрузка компакт-диска и фиксирование его в устройст- ве (поддерживается не всеми устройствами)
door open Извлечение компакт-диска (поддерживается не всеми
устройствами)
time format miiliseconds В качестве единицы измерения при позиционировании используются миллисекунды (вместо miiliseconds мож-но использовать ms)
time format msf В качестве единицы измерения при позиционировании
используются минуты, секунды и фреймы (разделитель -двоеточие); этот формат используется по умолчанию
time format tmsf В качестве единицы измерения при позиционировании используются дорожки, минуты, секунды и фреймы

Команды для воспроизведения, записи и позиционирования. Команда play предназначена для запуска проигрывания и имеет следующий формат (необязательные параметры отмечены квадратными скобками)
play device_id [from position [to position]] [notify] [wait]
Здесь и далее device_id -идентификатор устройства, использованный при открытии устройства командой open (например, если устройство было открыто командой open c:\windows\ding.wav alias ding, то в качестве па-раметра device_id можно использовать алиас ding).
Если не указан параметр from position, проигрывание начинается с текущей позиции (сразу после открытия текущая позиция устанавливается в начало первой дорожки); параметр to position позволяет указать конеч-ную позицию, при достижении которой проигрывание прекращается (пе-ред использованием параметров from ... и to ... необходимо установить формат для позиционирования при помощи команды set).
В нижеследующем примере выполняется проигрывание 10-й дорожки звукового компакт-диска
open cdaudio alias cd wait set cd time format tmsf wait play cd from 10 to 11 wait close cd
Нижеследующая команда проигрывает фрагмент 12-й дорожки, нача-ло которого отстоит на 10 сек от начала дорожки, а длительность составля-ет 16 сек

play cd from 12:0:10 to 12:0:16 wait
Останов проигрывания реализуется командой stop, единственным па-раметром которой является идентификатор устройства device_id.
Команда pause device_id для устройства чтения CD-ROM работает как команда полного останова stop, при этом команда продолжения работы после останова resume не поддерживается.

Позиционирование с последующим остановом реализуется командой seek (перед использованием этой команды необходимо задать формат вре-мени командой set time format)
seek device_id parameter [notify] [wait]

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

Значение parameter Описание
to position Позиционирование в заданное место компакт-диска
to start Позиционирование в начало
to end Позиционирование в конец

Интерфейс управляющих сообщений MCI

Большинство разработанных с использованием языка C/C++ прило-жений используют для управления устройством CD-ROM интерфейс управляющих сообщений MCI (напомним, что управляющие сообщения при этом посылаются устройствам с помощью функции mciSendCommand). Команда MCI_OPEN открывает устройство, предварительно необхо-димо подготовить структуру MCI_OPEN_PARMS и передать ее адрес через четвертый параметр функции mciSendCommand.
Поле lpstrDeviceType структуры MCI_OPEN_PARMS содержит указатель на строку имени устройства или его идентификатор. Для устройства чтения CD-ROM можно указывать имя "cdaudio" или константу MCI_DEVTYPE_CD_AUDIO.
Параметр lpstrElementName не используется, так как устройство чтения компакт-дисков не работает с файлами. Приведенный ниже фрагмент кода открывает устройство чтения ком-пакт-дисков

MCIOpen.lpstrDeviceType=(LPSTR) MCI_DEVTYPE_CD_AUDIO;
dwrc=maciSendCommand(NULL,
MCI_OPEN,
MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID,
(DWORD) (LPVOID) &MCIOpen);

После выполнения этого фрагмента кода в переменную dwrc будет записан код результата выполнения, при успешном выполнении в поле wDeviceID структуры mciOpen будет находиться идентификатор открыто-го устройства.

Команда MCI_CLOSE закрывает устройство,
MCI_PLAY запускает проигрывание,
MCI_STOP останавливает выполнение проигрывания ком-пакт-диска,
MCI_PAUSE действует аналогично MCI_STOP,
MCI_SEEK выполняет позиционирование,
MCI_BREAK устанавливает виртуальный код клавиши прерывания операции (по умолчанию ).

С помощью команды MCI_GETDEVCAPS можно определить возможности устройства чтения компакт-дисков. Для этого используется блок параметров в формате нижеописанной структуры MCI_GETDEVCAPS_PARMS

typedef struct tagMACI_GETDEVCAPS_PARMS { DWORD dwCallback; DWORD dwReturn; DWORD dwItem; } MCI_GETDEVCAPS_PARMS; typedef MCI_GETDEVCAPS_PARMS FAR \ *LPMCI_GETDEVCAPS_PARMS;

В поле dwReturn после возврата из функции mciSendCommand будет записано значение требуемого параметра (код нужного параметра следует записать в поле dwItem перед вызовом функции mciSendCommand)
Значение параметра dwItem Описание
MCI_GETDEVCAPS_CAN_EJECT Если устройство может выталкивать ком- пактдиск, после возврата из функции mciS endCommand в поле dwReturn будет ненулевое значение TRUE
MCI_GETDEVCAPS_CAN_PLAY Устройство может проигрывать
MCI_GETDEVCAPS_CAN_RECORD Устройство может записывать
MCI_GETDEVCAPS_CAN_SAVE Устройство может сохранять записанные данные в файле
MCI_GETDEVCAPS_COMPOUND_ Устройство может работать с файлами DEVICE
MCI_GETDEVCAPS_DEVICE_TYPE Требуется определить тип устройства
MCI_GETDEVCAPS_HAS_AUDIO Устройство имеет звуковой выход
MCI_GETDEVCAPS_HAS_VIDEO Устройство имеет видеовыход
MCI_GETDEVCAPS_USES_FILES При открытии устройства требуется указывать имя файла

Команда MCI_INFO дает возможность получить информацию об уст-ройстве чтения CD-ROM в виде текстовой строки, при этом используется блок параметров в виде структуры
MCI_INFO_PARMS
typedef struct tagMCI_INFO_PARMS { DWORD dwCallback; LPSTR lpstrReturn; DWORD dwRetSize; } MCI_INFO_PARMS;
typedef MCI_INFO_PARMS FAR *LPMCI_INFO_PARMS;

Поле lpstrReturn должно содержать указатель на буфер, в который будет записана строка информации, размер этого буфера следует передать через поле dwRetSize. Ниже приведен набор флагов для команды MCI_INFO, допустимых к использованию при работе с устройством чте-ния компакт-дисков
Идентификатор флага Описание
MCI_NOTIFY Если установлен этот флаг, после завершения команды оконной функции, адрес которой передан через поле dwCallback, будет послано сообщение MM_MCINOTIF
MCI_WAIT Функция mciSendCommand вернет управление только после завершения процесса
MCI_INFO_PRODUCT Требуется получить описание аппаратуры устройства

Команда MCI_SYSINFO позволяет получить системную информа-цию об устройстве в виде текстовой строки, команда MCI_STATUS используется для определения текущего состояния устройства (формат соответствующего блока параметров описывается структурой MCI_STATUS_PARMS)
typedef struct tagMCI_STATUS_PARMS { DWORD dwCallback; DWORD dwReturn; DWORD dwItem; DWORD dwTrack; } MCI_STATUS_PARMS;
typedef MCI_STATUS_PARMS FAR *LPMCI_STATUS_PARMS; Через поле dwReturn передается возвращаемая информация, вид за-прашиваемой информации определяется содержимым поля dwItem. Для устройства чтения компакт-дисков в поле dwTrack можно указать размер или номер дорожки (ниже приведены возможные значения параметра dwItem)
Значение параметра dwItem Описание получаемой информации
MCI_STATUS_CURRENT Номер текущей дорожки
TRACK MCI_STATUS_LENGTH Общий размер всех дорожек компакт-диска
MCI_STATUS_NUMBER Общее количество дорожек, которые можно проиграть
OF_TRACKS MCI_STATUS_POSITION Текущая позиция
MCI_STATUS_READY При готовности устройства возвращается TRUE, ина- че -FALSE
MCI_STATUS_MODE Текущий режим устройства; может иметь следующие значения -MCI_MODE_NOT_READY (не готово), MCI_MODE_PAUSE (пауза), MCI_MODE_PLAY (проигрывание), MCI_MODE_STOP (останов), MCI_MODE_OPEN (открывание), MCI_MODE_RECORD (запись), MCI_MODE_SEEK (позиционирование)
MCI_STATUS_TIME Текущий формат времени; может иметь следующие FORMAT значения -MCI_FORMAT_MILLISECONDS, MCI_FORMAT_MSF, MCI_FORMAT_TMSF
MCI_STATUS_START Начальная позиция
MCI_STATUS_TRACK В поле dwTrack записывается либо начальная позиция заданной дорожки (если дополнительно используется MCI_STATUS_POSITION), либо размер дорожки (если дополнительно используется MCI_STSTUS_LENGTH)
MCI_STATUS_MEDIA Если компакт-диск вставлен в устройство, возвращается TRUE

Команда MCI_SET предназначена для установки режима работы уст-ройства, совместно с ней используется блок параметров в формате струк-туры MCI_SET_PARMS
typedef struct tagMCI_SET_PARMS { DWORD dwCallback; DWORD dwTimeFormat; DWORD dwAudio; } MCI_SET_PARMS;
typedef MCI_SET_PARMS FAR *LPMCI_SET_PARMS;

Поле dwTimeFormat определяет формат времени для устройства, по-ле dwAudio задает выходной канал. Совместно с командой MCI_SET ис-пользуются следующие флаги
Идентификатор флага Описание
MCI_NOTIFY При установке этого флага после завершения команды оконной функции, адрес которой передан через поле dwCallback, будет послано сообщение MM_MCINOTIFY
MCI_WAIT Функция mciSendCommand вернет управление только после завершения процесса
MCI_SET_AUDIO Включение или выключение каналов; используется вместе с флагами MCI_SET_ON и MCI_SET_OFF. Поле dwAudio содержит номера канала, дополнительно можно указать следующие константы -MCI_SET_AUDIO_ALL (все каналы), MCI_SET_AUDIO_LEFT (левый канал), MCI_SET_AUDIO_RIGHT (правый канал)
MCI_SET_DOOR_CLOSED Команда защелкивания компакт-диска устройством
MCI_SET_DOOR_OPEN Освобождение носителя данных MCI_SET_VIDEO Включение или выключение видеосигнала, использу- ется вместе с флагами MCI_SET_ON и MCI_SET_OFF
MCI_SET_TIME_FORMAT Устанавливает формат времени, используется совместно со следующими константами - MCI_FORMAT_MSF (минуты, секунды, фреймы), MCI_FORMAT_MILLSECONDS (миллисекунды), MCI_FORMAT_TMSF (треки, минуты, секунды, фреймы)
MCI_SET_ON Включение заданного канала
MCI_SET_OFF Выключение заданного канала

При использовании формата времени MCI_FORMAT_MSF старший байт старшего слова поля dwTimeFormat не используется, а младший содержит номер фрейма. Старший байт младшего слова содержит секунды, младший -минуты. Формат времени MCI_FORMAT_TMSF аналогичен вышеприведенному за исключением того, что старший байт старшего сло-ва содержит номер дорожки.

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

 Реклама:

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