Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВВЕДЕНИЕ В МУЛЬТИМЕДИА.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
661.5 Кб
Скачать

2. Использование mci-команд в программах

Программы, использующие MCI, посылают драйверам команды с помощью функций mciSendString и mciSendCommand из стандартной библиотеки Mmsystem.dll (папка Windows\System). Первая из них посылает команду в виде текстовой строки, а вторая – в виде стандартных констант и структур данных, которые предварительно нужно заполнить. Ввиду большей простоты рассмотрим только первый способ.

Прототип функции  mciSendString на языке С имеет вид:

DWORD mciSendString(LPSTR lpstrComand,

LPSTR lpstrReturnString,

UINT wReturnLength,

HWND hwndCallback)

Первый параметр обязателен – это сама командная строка. Остальные необязательны. Они определяют буфер, куда посылается ответ, его длину и окно для посылки сообщения (notify) программе от устройства. Сама функция при успешном выполнении команды возвращает 0, а в случае ошибки – отрицательное значение. Это значение можно передать в качестве первого параметра функции mciGetErrorString (из той же библиотеки Mmsystem.dll) – функция возвратит текстовое описание ошибки:

UINT mciGetErrorString(DWORD dwError,

LPSTR lpstrBuffer,

UINT wLength)

Для уточнения подробностей нужно в [Windows 3.1 Multimedia Reference] выбрать ссылку Function Overview, затем ссылку Media Control Interface services и, наконец, ссылку Communicating with MCI Devices.

Но не только в языке С можно использовать команды MCI. Ниже мы будем рассматривать авторские системы, в которых также используются эти команды. Они позволяют очень гибко управлять воспроизведением и записью мультимедийных данных. Например, в системе Toolbook для этого используется функция callMCI.

Работа программы с устройством начинается с его открытия командой open и заканчивается закрытием командой close. Незакрытое устройство не может быть открыто ещё раз, если оно не было объявлено обоими командами open как разделяемое (shareable). Приведем примеры последовательностей MCI-команд в основном командном потоке.

Проигрывание CD-Audio:

open cdaudio

...

set cdaudio time format tmsf

... -- tmsf - дорожка:минута:секунда:кадр

play cdaudio from 1:00:00 to 3:00:00 wait

... -- играть дорожки с 1 по 3

pause cdaudio

close cdaudio

-- для CD-Audio только pause прекращает проигрывание.

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

open c:\windows\media\Passport.mid type sequencer alias s

...

set s time format ms -- ms - миллисекунда

...

play s from 0 to 10000 wait -- играть первые 10 секунд

...

close s

Проигрывание Wav-файла:

open c:\windows\media\Tada.wav type waveaudio alias s

...

play s from 0

... -- ожидание события, означающего "конец проигрывания"

close s

Запись Wav-файла:

open new type waveaudio alias s

...

record s

... -- ожидание события, означающего "конец записи"

save s c:\windows\temp\haha.wav

close s

 

3. Синтаксис командной строки mci

Командная строка имеет вид

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

где 

команда – это название команды, например open, play, close;

указатель-устройства – это 

  • тип устройства – для любой команды простого устройства, например cdaudio

  • путь и имя файла в команде для сложного устройства, например c:\windows\media\Tada.wav; в любой команде, кроме open может быть заменен псевдонимом (это, как правило, и происходит)

  • псевдоним, установленный параметром alias  предшествующей команды open, например s

  • слово new в команде open при открытии устройства на запись (звука или видео)

  • слово all – для посылки команды всем открытым в данной программе устройствам (можно применять только к командам, не возвращающим информацию), например, close all.

параметры – это (возможно пустая) последовательность параметров, разделённых пробелом, в которой каждый параметр – это непустая последовательность ключевых слов и значений, разделённых пробелами, например, time format tmsf, или type waveaudio, или from 0, или c:\windows\temp\haha.wav в команде save.

Параметры записываются в произвольном порядке, могут быть обязательными и необязательными. Их набор определяется командой, но два параметра являются общими для всех команд (и необязательными) – это wait и notify.