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

 Навигация:

 Поиск:

 Новости:

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

Запись звука

Процесс записи имеет много общего с процессом воспроизведения. В начале необходимо открыть устройство записи, вызвав функцию

waveInOpen

UINT
waveInOpen(LPHWAVEIN lpWaveIn, UINT wDeviceID, LPWAVEFORMAT lpFormat, DWORD dwCallback, DWORD dwFlags);

Здесь lpWaveOut -дальний указатель на переменную типа HWAVEIN. В эту переменную будет записан идентификатор устройства вывода, который необходим для выполнения всех операций с устройством. Функция waveInOpen может быть использована для определения возмож-ностей записи звуковых данных в заданном формате (возможно, нестан-дартном), в этом случае параметр lphWaveIn может иметь значение NULL (дополнительно в параметре dwFlags следует установить флаг WAVE_FORMAT_QUERY).

Через параметр wDeviceID приложение должно передать функции waveInOpen номер устройства ввода, которое оно собирается открыть или константу WAVE_MAPERR (в первом случае номер устройства может лежать от нуля до полученного с помощью функции waveInGetNumDevs, во втором случае функция waveInOpen пытается самостоятельно выбрать и открыть подходящее для записи звуковых данных указанного формата устройство вывода).

При нормальном завершении функция waveInOpen возвращает нуль, в противном случае -нижеприведенный код ошибки
Код ошибки Описание ошибки
MMSYSERR_NODRIVER В системе нет нужного для работы с устройством ввода драйвера
MMSYSERR_BADDEVICEID Указан неправильный номер устройства
MMSYSERR_ALLOCATED Это устройство уже открыто
MMSYSERR_NOMEM Для выполнения операции недостаточно памяти
MMSYSERR_BADFORMAT Указанный формат звуковых данных не поддерживается драйвером устройства
MMSYSERR_SYNC Попытка открыть синхронное устройство ввода без использования флага WAVE_ALLOWSYNC

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

Перед передачей блока драйверу его необходимо подготовить функ-цией waveInPrepareHeader, входные параметры и коды ошибок которой практически повторяют таковые функции waveOutPrepareHeader

UINT
waveInPrepareHeader(HWAVEIN hWaveIn, LPWAVEHDR lpWaveInHdr, UINT wSize);
Подготовленный таким образом блок памяти передается драйверу устройства ввода функцией waveInAddBuffer

UINT
waveInAddBuffer(HWAVEIN hWaveIn, LPWAVEHDR lpWaveInHdr, UINT wSize);

При нормальном завершении функция waveInAddBuffer возвращает нуль, в противном случае -нижеприведенный код ошибки
Код ошибки Описание ошибки
MMSYSERR_INVALHANDLE Указан неправильный идентификатор устройства
MMSYSERR_UNPREPARED Переданный блок данных не был подготовлен функцией waveInPrepareHeader

Для реального начала записи необходимо вызвать функцию waveIn-Start

UINT waveInStart(HWAVEIN hWaveIn);

В качестве входного параметра передается полученный ранее от функции waveInOpen идентификатор вводного устройства. При нормаль-ном завершении функция возвращает нуль, иначе -код MMSYSERR_INVALHANDLE, означающий указание неправильного идентификатора устройства.

Запись будет производиться до тех пор, пока не будет записан весь буфер или пока устройство ввода не будет остановлено функцией waveIn-Stop

UINT waveInStop(HWAVEIN hWaveIn);

При нормальном завершении функция waveInStop возвращает нуль, иначе -код MMSYSERR_INVALHANDLE, означающий указание непра-вильного идентификатора устройства.

При записи блока до конца или при принудительной остановке запи-си вызывается оконная функция (как в случае функции waveOutWrite). Вызовы waveUnprepareHeader, GlobalUnlock, GlobalFree и waveInClose синтаксически подобны описанным выше.

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

 Реклама:

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