Программирование мультимедиа-систем

Стандартные носители мультимедиа-информации. Методы записи и воспроизведения статических изображений. Методы представления графической информации. Текстовые данные в мультимедиа. Методы сжатия изображений. Основы записи, синтеза и воспроизведения звука.

Рубрика Программирование, компьютеры и кибернетика
Вид учебное пособие
Язык русский
Дата добавления 28.06.2009
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Поле 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

Драйвер устройства вывода работает в синхронном режиме (во время проигрывания работа приложения приостанавливается)

В работе [6] приведен полный С-код приложения DRVLIST, служащего для исследования установленных в системе конфигурации драйверов устройств мультимедиа.

3.6.4 Воспроизведение звука

Для воспроизведения звуковых файлов на низком уровне после определения возможностей устройства вывода необходимо открыть устройство, это удобно сделать с помощью функции waveOutOpen.

UINT

waveOutOpen(LPHWAVEOUT lphWaveOut,

UINT wDeviceID,

LPWAVEFORMAT lpFormat,

DWORD dwCallbackInstance,

DWORD dwFlags);

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

Через параметр wDeviceID приложение должно передать функции waveOutOpen номер устройства вывода, которое оно собирается открыть или константу WAVE_MAPPER, определенную в файле mmsystem.h. В первом случае номер устройства может лежать в пределах от нуля до полученного с помощью функции waveOutGetNumDevs значения. Обычно используется константа WAVE_MAPPER, при этом функция waveOut-Open пытается самостоятельно выбрать и открыть устройство вывода, подходящее для проигрывания звуковых данных указанного формата.

Через параметр lpFormat приложение должно передать функции waveOutOpen адрес заполненной структуры WAVEFORMAT (эта структура и указатели на нее описаны выше).

Параметр dwCallback передает функции waveOutOpen адрес функции обратного вызова. Эту функцию будет вызывать драйвер устройства вывода при возникновении событий, имеющих отношение к проигрыванию блока данных. При использовании функции обратного вызова в параметре dwFlags следует установить флаг CALLBACK_FUNCTION.

При использовании функции обратного вызова могут возникнуть проблемы, связанные с имеющимися ограничениями на функционирование подобных функций; поэтому с целью извещения приложения о возникновении события заключается в посылке сообщений оконной функции. Для этого параметр dwCallback должен содержать идентификатор окна, а в параметре dwFlags необходимо установить флаг CALLBACK_WINDOW.

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

В поле dwFlags можно указывать следующие флаги

Идентификатор флага

Описание

WAVE_FORMAT_QUERY

Функция waveOutOpen вызывается только с целью проверки возможности использования формата звуковых данных, определенных в структуре WAVEFPRMAT, адрес которой передается через параметр lpFormat. Этим способом можно проверить, способно ли данное устройство работать с нестандартной частотой дискретизации

WAVE_ALLOWSYNC

Флаг необходимо использовать для открытия синхронного устройства вывода, во время работы которого все приложения блокируются

CALLBACK_WINDOW

Для извещения о наступлении событий используется окно, идентификатор которого передается через параметр dwCallback

CALLBACK_FUNCTION

Для извещения о наступлении событий используется функция обратного вызова, адрес которой передается через параметр dwCallback

При нормальном завершении функция waveOutOpen возвращает нулевое значение, в противном случае - описанный в нижележащей таблице код ошибки

Код ошибки

Описание ошибки

MMSYSERR_BADDEVICEID

Указан неправильный номер устройства вывода

MMSYSERR_ALLOCATED

Это устройство уже открыто

MMSYSERR_NOMEM

Для выполнения операции недостаточно памяти

WAVEERR_BADFORMAT

Указанный формат звуковых данных не поддерживается драйвером устройства вывода

WAVEERR_SYNC

Была выполнена попытка открыть синхронное устройство вывода без использования флага WAVE_ALLOWSYNC

Обычно при проигрывании WAV-файлов приложение вызывает функцию waveOutOpen дважды. Первый раз она вызывается для проверки возможности проигрывания звуковых данных заданного формата

if (waveOutOpen(NULL, WAVE_MAPPER,

(WAVEFORMAT FAR *) lpwiocb->lpFmt,

NULL, 0L,

WAVE_FORMAT_QUERY | WAVE_ALLOWSYNC))

{

// сообщение о том, что воспроизведение невозможно

}

Если указанный формат поддерживается драйвером, приложение может открыть устройство вывода, например, следующим образом

rc=waveOutOpen(&hWaveOut, WAVE_MAPERR,

(WAVEFORMAT FAR *) lpwiocb->lpFmt,

(UINT) hwnd, 0L,

CALLBACK_WINDOW | WAVE_ALLOWSYNC);

Указанная методика позволяет определить возможность работы с нестандартными форматами.

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

Блоки данных, передаваемые драйверу, должны быть заказаны у системы как глобальные с флагами GMEM_MOVEABLE и GMEM_SHARE.

Перед передачей блока драйверу необходимо его подготовить при помощи функции waveOutPrepareHeader

UINT

waveOutPrepareHeader(HWAVEOUT hWaveOut,

LPWAVEHDR lpWaveOutHdr,

UINT wSize);

Здесь hWaveOut - полученный ранее от функции waveOutOpen идентификатор устройства вывода, lpWaveOutHdr - адрес описывающей передаваемый блок данных заполненной структуры WAVEHDR; описание данной структуры приведено ниже

typedef struct wavehdr_tag

{

LPSTR lpData; // адрес блока данных

DWORD dwBufferLength; // размер блока данных

DWORD dwBytesRecorded; // количество записанных байт

// (только при записи)

DWORD dwUser; // пользовательские данные

DWORD dwFlags; // флаги состояния буфера данных

DWORD dwLoops; // кратность проигрывания файла

// (только при воспроизведении)

struct wavehdr_tag far *lpNext; // зарезервировано

DWORD reserved; // зарезервировано (не используется)

} WAVEHDR;

typedef WAVEHDR *PWAVEHDR;

typedef WAVEHDR NEAR *NPWAVEHDR;

typedef WAVEHDR FAR *LPWAVEHDR;

После заказа блока памяти функцией GlobalAlloc с флагами GMEM_MOVEABLE и GMEM_SHARE необходимо зафиксировать его функцией GlobalLock; полученный в результате фиксирования адрес блока записывается в поле lpData структуры WAVEHDR, а размер блока - в поле dwBufferLength.

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

Структура WAVEHDR используется не только для воспроизведения, но и для записи; в этом случае после завершения записи блока в поле dwBytesRecorded будет находиться количество записанных байт данных (при воспроизведении это поле не используется).

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

Поле dwFlag после прихода сообщения о событии или передачи управления функции обратного вызова будет содержать информацию о состоянии блока; в этом случае могут быть установлены следующие флаги

Приложение может указать драйверу, что блок необходимо проиграть несколько раз подряд, для этого следует указать число повторов в поле dwLoops.

Идентификатор флага

Описание

WHDR_DONE

Работа с буфером данных закончена; данные из буфера были успешно проиграны или записаны, после чего драйвер вернул буфер приложению

WHDR_BEGINLOOP

Данный буфер является первым в цикле (флаг используется только при воспроизведении). При желании проиграть в цикле только один блок он должен быть отмечен и флагом WHDR_BEGINLOOP и флагом WHDR_ENDLOOP

WHDR_PREPARED

Буфер подготовлен для воспроизведения функцией waveOutPrepareHeader или для записи функцией waveInPrepareHeader

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

После обработки блока памяти функцией waveOutPrepareHeader его можно проиграть с помощью вызова функции waveOutWrite.

UINT

waveOutWrite(HWAVEOUT hWaveOut, // идентификатор устройства

LPWAVEHDR lpWaveOutHdr, // указатель на ст-ру WAVEHDR

UINT wSize); // размер структуры WAVEHDR

При нормальном завершении функция waveOutWrite возвращает нуль, в противном случае нижеуказанный код ошибки

Реально проигрывание блока начинается после вызова функции waveOutWrite, в случае проигрывания блока до конца или остановки проигрывания определенная указанным при открытии устройства через параметр dwCallback идентификатором оконная функция получит сообщение MM_WOM_DONE.

После получения приложением сообщения MM_WOM_DONE оно должно передать блок функции waveOutUnprepareHeader, затем разблокировать его функцией GlobalUnlock и освободить (если этот блок памяти больше не нужен) функцией GlobalFree.

Формат вызова функции waveOutUnprepareHeader приведен ниже

UINT

waveOutUnprepareHeader(HWAVEOUT hWaveOut,

LPWAVEHDR lpWaveOutHdr,

UINT wSize);

При нормальном завершении функция waveOutUnprepareHeader возвращает нуль, в противном случае нижеуказанный код ошибки

После завершения работы с устройством его необходимо закрыть, вызвав функцию waveOutClose

UINT

waveOutClose(HWAVEOUT hWaveOut); // идентификатор устройства

При нормальном завершении функция waveOutClose возвращает нуль, в противном случае нижеуказанный код ошибки

3.6.5 Запись звука

Процесс записи имеет много общего с процессом воспроизведения. В начале необходимо открыть устройство записи, вызвав функцию 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 возвращает нуль, в противном случае - нижеприведенный код ошибки

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

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

UINT

waveInPrepareHeader(HWAVEIN hWaveIn,

LPWAVEHDR lpWaveInHdr,

UINT wSize);

Подготовленный таким образом блок памяти передается драйверу устройства ввода функцией waveInAddBuffer

UINT

waveInAddBuffer(HWAVEIN hWaveIn,

LPWAVEHDR lpWaveInHdr,

UINT wSize);

При нормальном завершении функция waveInAddBuffer возвращает нуль, в противном случае - нижеприведенный код ошибки

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

UINT

waveInStart(HWAVEIN hWaveIn);

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

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

UINT

waveInStop(HWAVEIN hWaveIn);

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

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

3.6.6 Дополнительные функции низкого уровня

Библиотека mmsystem.dll содержит несколько весьма полезных функций, предназначенных для работы со звуком на низком уровне.

Функции waveInGetErrorText и waveOutGetErrorText (подобно функции mciGetErrorString) преобразуют код ошибки в текстовое описание ее в виде строки символов.

Функции waveInGetID и waveInGetID позволяют определить реальный номер устройства, выбранного функцией открытия устройства ввода/вывода с указанием константы WAVE_MAPPER (режим автоматического поиска подходящего из установленных в системе устройств).

Функции waveInReset и waveOutReset выполняют останов устройств ввода или вывода соответственно и сброс текущей позиции для устройства в нуль.

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

Останов устройства ввода используется ранее описанная функция waveInStop, временный останов работы устройства вывода следует воспользоваться функцией waveOutPause.

Определение текущей позиции в блоке при записи и воспроизведении производится функциями waveInGetPosition и waveOutGetPosition соответственно (при этом используется структура MMTIME, описанная в файле mmsystem.h)

typedef struct mmtime_tag

{

UINT wType; // формат времени

union

{

DWORD ms; // миллисекунды

DWORD sample; // выборки сигнала

DWORD cb; // счетчик байт

struct // формат SMPTE

{

BYTE hour; // часы

BYTE min; // минуты

BYTE sec; // секунды

BYTE frame; // фреймы

BYTE fps; // фреймы в секунду

BYTE dummy; // байт для выравнивания

} smpte;

struct // формат MIDI

{

DWORD songptpos; // указатель позиции в мелодии

} MIDI;

} u;

} MMTIME;

typedef MMTIME *PMMTIME;

typedef MMTIME NEAR *NPMMTIME;

typedef MMTIME FAR *LPMMTIME;

Для установки громкости следует использовать функцию waveOutSetVolume, прочитать текущее значение громкости можно функцией waveOutGetVolume.

В работе [6] приведен полный С-код приложения WAVE, служащего для записи и воспроизведения WAV-файлов.

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

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

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

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

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

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

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

Перед началом работы с устройством необходимо его открыть, передав управляющую строку 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, можно указывать следующие параметры

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

Для команды set можно указывать следующие параметры

Команды для воспроизведения, записи и позиционирования. Команда 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 является необязательным и может принимать значение одной из нижеуказанных строк

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

Большинство разработанных с использованием языка C/C++ приложений используют для управления устройством CD-ROM интерфейс управляющих сообщений MCI (напомним, что управляющие сообщения при этом посылаются устройствам с помощью функции mciSendCommand, см. подраздел 2.5).

Команда 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 устанавливает виртуальный код клавиши прерывания операции (по умолчанию <Control+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)

Команда 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_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)

Команда 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_FORMAT_MSF старший байт старшего слова поля dwTimeFormat не используется, а младший содержит номер фрейма. Старший байт младшего слова содержит секунды, младший - минуты. Формат времени MCI_FORMAT_TMSF аналогичен вышеприведенному за исключением того, что старший байт старшего слова содержит номер дорожки.

В работе [6] приведен полный С-код приложения MCICDPL, служащего для управления устройством чтения CD-ROM при помощи управляющих сообщений MCI.

3.8 Проигрывание MIDI-файлов

Файлы в стандарте MIDI (Musical Instrument Digital Interface, был разработан в 1982 г.) имеют расширения MID и содержат заголовок и информацию для музыкального синтезатора; используется также стандарт RIFF (содержащие сообщения MIDI и соответствующие стандарту RIFF файлы имеют обычно расширения RMI).

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

При воспроизведении MIDI-файлов могут возникнуть трудности, связанные с тем, что не все синтезаторы имеют одинаковое распределение каналов и инструментов; поэтому рекомендуется воспроизводить в среде Windows только авторизованные для этой ОС файлы MIDI-формата (при отсутствии авторизации Windows выдает предупреждающее сообщение).

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

Для работы с входящим в комплект звукового адаптера музыкальным синтезатором используется драйвер mciseq.drv (название суть производная от слова sequencer - `устройство задания последовательности' - именно так в терминологии мультимедиа называется предназначенное для работы с файлами в стандарте MIDI устройство).

При работе с MID-файлами на уровне управляющих строк MCI допустимо пользоваться практически всеми командами, рассмотренными ранее в подразделе 2.7.1; не поддерживаются команды resume, record и save. Например, следующая последовательность команд выполнит проигрывание файла canion.mid, входящего в состав дистрибутива ОС Windows

open c:\windows\canyon.mid alias music wait

play music wait

close music

Драйвер mciseq.drv не поддерживает следующие параметры команды set - audio all off, audio all on, audio left on, audio left off, audio right on, audio right off. Дополнительно можно использовать устанавливающий формат времени в единицах `одна шестнадцатая ноты' параметр time format song pointer, позволяющий задать темп исполнения мелодии параметр tempo и некоторые другие.

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

Использование интерфейса управляющих сообщений для проигрывания mid-файлов аналогично использованию этого интерфейса для проигрывания WAV-файлов, см. подраздел 3.7.2; ниже кратко приведены коды управляющих сообщений и самые нужные параметры, являющиеся специфичными для драйвера mciseq.drv

В работе [6] приведен полный С-код приложения MIDIPL, демонстрирующего способы использования функций MCI для проигрывания MIDI-файлов.

3.9 Штатное программное обеспечение записи, редактирования и воспроизведения звука

Программное обеспечение для работы со звуком можно разделить (по функциональному назначению) на следующие группы (зачастую функциональность групп перекрывается):

Плееры (players) - ПО для воспроизведения звука.

Грабберы (grabbers) - ПО для `захвата' существующей звуковой информации и перекодировки в иной формат.

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

Весьма распространенным среди пользователей Windows является плеер Winamp (фирма NullSoft, Inc., www.winamp.com), являющейся являющийся устройством с поддержкой неограниченного числа аудиоформатов (для их поддержки используются декодеры, поставляемые производителями). Например, в версиях 2.202.22 роль встроенного MP3-декодера играет `родной', разработанный вышеупомянутым FraunhoferIIS декодер (однако начиная с версии 2.23 возвращен `старый', менее качественный декодер); удобным является наличие встроенного броузера для доступа к сети InterNet (MS представляет возможность встраивания компонентов своего броузера в любое пользовательское приложение путем использования органа управления MicrosoftWebBrowserControl из среды программирования MSVisual C++ или вызова функций из DLL-библиотек, где определены соответствующие объекты ActiveX; дополнительные возможности предоставляют размещенные в библиотеке wininet.dll функции интерфейса WinInet, см. www.microsoft.com/win32dev).

Часто используется разработанный MS еще в 1992 г. Windows Media Player, также поддерживающий (на сегодняшний момент) практически все известные аудиоформаты. Серьезным преимуществом вышеописанного ПО является удобный пользовательский интерфейс.

Специалисты отдают предпочтение плееру NAD (nad.inept.org, известны версии до 0.94, после чего проект NAD был выкуплен фирмой Dimension Music), для повышения эффективности работы использующий интересный алгоритм предсказания. На основе семейства функций NAD создан набор библиотек AE (Audio Enlightenment, позднее AE переименован в STARDUST и задействован в плеере Sonique), использованный при разработке плеера NADDY (ae.dmusic.com).

Известны плееры WPlay, I3dec, K-Jofol (поддерживающий VQF), Apollo, Soritong, C-4 (полный список можно найти на www.mp3.com, полезны сайты www.mpeg.org, www.mp3tech.com и страница www.uic.nnov.ru/~fmm).

Современные InterNet-технологии потребовали добавления функции проигрывания аудиофайлов из Сети (с возможностью их последующего сохранения во внешней памяти клиентской машины). Наиболее известным ПО подобного назначения является RealPlayer (фирма RealNetworks, www.real.com), поддерживающий более 20 мультимедиа-форматов (в т.ч. SMIL, Liquid Audio, RichFX и MP3) и позволяющий с помощью модема или выделенной линии получить доступ к более чем 2500 Сетевых радиостанций. Новая версия программы iQfx Basic 2.0 (www.real.com/accessories/iqfx/index.htm) добавляет музыке объемные стереоэффекты, улучшает звучание басов и др.

Многие плееры являются всего лишь front-end - программами (обладающие удобным и красивым интерфейсом оболочками над программами-декодерами - например, над классическим декодером разработки Fraunhofer IIS). Большинство декодеров могут выполнять функции плееров (самостоятельно, посредством управления с помощью командной строки или в комплекте с оболочкой), однако не каждый плеер может перенаправлять свой вывод в файл (что является необходимой функцией декодера).

Программа для `захвата' звука (например, с WAV-файлов CD и выдачи его в заданный файл в просторечии называется граббером (от англ. grabbing - считывать звук с CD). Граббер считывает дорожки (tracks) с CD-Audio (файловая система CD-Audio согласно `Красной книге' не дает возможности прямого копирования информации на другие носители) по отдельности (что представляет проблемы для некоторых CD-приводов) и записывает их в формате несжатого WAV-файла. Примером граббера является программа CD Worx (www.tfh-berlin.de/~s570959/dworx.html), отличающаяся хранением всего считанного файла в оперативной памяти компьютера.

В дальнейшем полученный файл можно сжимать по технологии MP3, например, Windows-ориентированными компрессорами WinDAC (members.aol.com/schelmik/dac.html) или MPEG Layer 3 Audio Producer Professional (www.iis.fhg.de). В результате сжатия получатся файлы MP3 или WAV значительно меньшего объема, однако при их записи на CD это будут уже не звуковые диски, а обычные CD-ROM (прослушивать их можно только на компьютере с CD-ROM и звуковой картой). Некоторые программы записи на (одно- или многократно записываемые) CD имеют встроенные MP3-компрессоры.

Особый интерес представляет `грабительство' звука из InterNet. Многие музыкальные сайты работают с потоковым аудио, не позволяя выгружать аудиофайлы (что, по мнению разработчиков, позволяет защищать аудиоинформацию от несанкционированного копирования). В этом случае выходом может быть перехват звука (например, с помощью Total Recorder) во время проигрывания на клиентской машине cетевых файлов с помощью Real Player, Real Jukebox или Windows Media Player с последующим сохранением несжатого WAV-файла (объем WAV-файла ограничен 4 Гбайт, что соответствует 40 мин при записи с качеством CD); полученный файл может быть в последующем конвертирован в MP3 (например, посредством MusicMatch Jukebox).

Windows штатно включает подсистему ACM (Audio Compression Manager), управляющую упаковкой и распаковкой звуковых файлов. Под управлением этой системы работают различные преобразователи (кодеки), обрабатывающие считываемый из файла (при распаковке) или записываемый в файл (при упаковке) звук. Т.к. система ACM стандартизирована, ее может использовать любая Windows-программа - например, Sound Recorder (`Фонограф'), Media Player (`Универсальный Проигрыватель'), звуковые редакторы и др. При использовании ACM распаковка и упаковка данных в любом формате происходит прозрачно для целевой программы, сама программа даже `не знает' о (возможной) перекодировке и работает со стандартным форматом аудиоданных.

4. ЗАПИСЬ И ВОСПРОИЗВЕДЕНИЕ МУЛЬТИМЕДИА-ИНФОРМАЦИИ

Штатным средством Windows для записи звука является MS Sound Recorder, позволяющий записать с микрофона и сохранить без компрессии звук в формате WAV (при этом должны быть корректно установлены низкоуровневые драйвера звуковой платы). Подобные файлы имеют очень большие размеры и их приходится в дальнейшем компрессировать с использованием вышеуказанных методов.

Для вывода звука на внешние устройства возможно использование (также штатного для Windows) MediaPlayer (версия 8.0 для Windows'XP); при этом поддерживаются все установленные в системе кодеки сжатия аудиоинформации.

Указанное ПО является фактически надстройками над системными средствами поддержки записи и воспроизведения звука (драйверами физических аудиоустройств и кодеками) и не обладают развитыми средствами редактирования звука.

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

Для потокового приема и воспроизведения аудиофайлов из InterNet наиболее часто применяют RealPlayer (фирма RealNetworks, www.real.com), см. подраздел 3.9.

Система CakewalkProAudio (www.cakewalk.com) является программой профессиональной обработки звука, реализует огромное количество возможностей: многопоточность, микширование цифрового звука и MIDI, возможность обработки звука различными фильтрами, создание различных имитаций и эффектов.

Известная фирма UleadSystems, Inc. (www.ulead.com) предлагает пакет UleadMediaStudio, в состав которого входит достаточно мощный UleadAudioEditor.

Удобен (созданный на основе MP3 Fraunhofer-кодека, см. подраздел 3.2) редактор звуковых файлов CoolEdit (support.syntrillium.com) со встроенной поддержкой 24-битного цифрового аудио (частота дискретизации до 96kГц) и большим количеством звуковых эффектов, имеются возможности для записи с аналоговых и цифровых источников и редактирования с помощью набора фильтров.

Также распространены пакеты GoldWave (www.goldwave.com), MusicGuru (www.), SteinbergWaveLab (www.steinberg.net) и многие другие - обычно пользователь самостоятельно выбирает нужный пакет на основе анализа возможностей, интерфейса и доступности.

4.1 Основные стандарты записи и воспроизведения аудиовидео-информации

Исторически первыми форматами аудиовидео явились разработанные для нужд телевидения стандарты PAL (Phase Alteration Line, принят в Германии, Великобритании, Южной Америке. Австралии и многих странах Западной Европы и Азии, предполагает размер изображения из 625 строк при 50 полукадрах/сек), NTSC (National Television Systems Committee, принят в США, Японии, Канаде, Мексике, размер изображения 535 строк при 60 полукадрах/сек) и SECAM (Sequence de Coulers Avec Memoire, распространен во Франции, размер изображения 818 строк при 50 полукадрах/сек). Общим во всех известных системах является метод передачи последовательных статических изображений, разным является способ передачи информации о цвете.


Подобные документы

  • Области применения мультимедиа. Основные носители и категории мультимедиа-продуктов. Звуковые карты, CD-ROM, видеокарты. Программные средства мультимедиа. Порядок разработки, функционирования и применения средств обработки информации разных типов.

    контрольная работа [528,8 K], добавлен 14.01.2015

  • Использование профессиональных графических примеров. Применение продуктов мультимедиа. Линейное и структурное представление информации. Мультимедиа ресурсы сети Интернет. Программное обеспечение мультимедиа-компьютера. Создание и обработка изображения.

    курсовая работа [1,1 M], добавлен 04.03.2013

  • Создание информационной мультимедиа системы (медиа-плеера) для презентации аудио-видео информации о факультете КТАС, представленной в специально отснятых и смонтированных avi-файлах. Разработка модуля пользовательского интерфейса, выходные данные.

    курсовая работа [41,5 K], добавлен 21.11.2014

  • Мультимедиа презентация - это уникальный и самый современный на сегодняшний день способ представления информации. Важнейшей особенностью мультимедиа технологии является интерактивность – способность пользователя влиять на работу информационного средства.

    курсовая работа [106,5 K], добавлен 28.06.2008

  • Мультимедиа – это современная компьютерная информационная технология, позволяющая объединить в компьютерной системе текст, звук, видеоизображение, графическое изображение и анимацию. Описание, основные носители и возможности мультимедиа технологий.

    реферат [37,1 K], добавлен 19.10.2010

  • Характерные особенности мультимедиа-технологий и их возможности. Применение мультимедиа-технологий в обучении. Объединение многокомпонентной информационной среды в однородном цифровом представлении, долговечное хранение и простота переработки информации.

    курсовая работа [77,8 K], добавлен 15.07.2012

  • Стандартное устройство вывода графической информации в компьютере IBM - система из монитора и видеокарты. Основные компоненты видеокарты. Графическое и цветовое разрешение экрана. Виды мониторов и видеокарт. Мультимедиа-проекторы, плазменные панели.

    контрольная работа [38,7 K], добавлен 09.06.2010

  • Исследование видов программного обеспечения для мультимедиа и средств редактирования. Описания редакторов векторной и растровой графики. Анализ методов преобразования изображений. Технологии баз данных, требуемые для графики. Преобразование текста в речь.

    презентация [154,7 K], добавлен 11.10.2013

  • Различные виды определения термина "мультимедиа". Мультимедиа-технологии как одно из наиболее перспективных и популярных направлений информатики. Мультимедиа в сети Internet. Компьютерная графика и звуки. Различные области применения мультимедиа.

    курсовая работа [43,5 K], добавлен 19.04.2012

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

    курсовая работа [386,3 K], добавлен 21.12.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.