Интерфейс управляющих строк MCI
MCI представляет собой универсальный, независимый от особенностей аппаратного обеспечения интерфейс, предназначенный для управления устройствами мультимедиа, такими как звуковые и видеоадаптеры, устройства чтения (проигрывания) звуковых компакт-дисков и лазерных видеодисков. В большинстве случаев возможности, предоставляемые этим интерфейсом, удовлетворят потребности любого приложения мультимедиа, предназначенного для записи и воспроизведения звуковой или видеоинформации. Если же приложение должно обрабатывать данные на низком уровне или в реальном времени (задачи редактирования и преобразования wav-файлов, распознавания речи, образов, преобразования речи в реальном времени), оно может воспользоваться низкоуровневым интерфейсом, который мы рассмотрим позже.
Все функции интерфейса MCI экспортируются библиотекой mmsystem.dll . Эти функции обращаются непосредственно к драйверам устройств ввода/вывода, а также к функциям более низкого уровня, определенным в библиотеке mmsystem.dll.
Приложения могут использовать два типа программного интерфейса MCI .
Первый тип называется интерфейс управляющих строк (Command-String Interface ). Он основан на использовании текстовых команд (таких, как open, play, close).
Второй тип - это интерфейс управляющих сообщений (Command-Message Interface ). Для управления устройствам посылаются сообщения, коды которых определены в файле mmsystem.h через символические константы (например, MCI_OPEN, MCI_PLAY, MCI_CLOSE).
Интерфейс управляющих строк удобен для использования в системах программирования высокого уровня, так как позволяет быстро получить необходимый результат. Например, для проигрывания звукового файла ding.wav достаточно передать звуковому адаптеру следующую последовательность управляющих строк:
open ding.wav type waveaudio alias snd wait play snd wait close snd
Не намного сложнее выглядят управляющие строки (команды) для записи звукового фрагмента в wav-файл или для проигрывания видеофрагмента из avi-файла.
Для передачи команд используется функция mciSendString , которой в качестве первого параметра передается указатель на строку команды.
Однако более простое и тесное взаимодействие между приложением, составленным на языке программирования С, и устройством мультимедиа можно достичь при использовании интерфейса управляющих сообщений. Для посылки такого управляющего сообщения приложение должно вызвать функцию mciSendCommand . Второй параметр этой функции содержит код управляющего сообщения.
Мы рассмотрим основные приемы использования обоих типов интерфейса MCI на примере работы со звуковым адаптером и wav-файлами. В дальнейшем, при описании работы с устройствами других типов, мы ограничимся только особенностями команд MCI этих устройств.
Для передачи управляющей строки устройству чтения CD ROM вы должны использовать функцию mciSendString . Вам могут потребоваться и другие функции, описанные во второй главе и предназначенные для работы с интерфейсом MCI.
Для работы с музыкальным синтезатором, входящим в комплект звукового адаптера, используется драйвер mciseq.drv . Свое название он получил от слова sequencer (дословно можно перевести как "устройство задания последовательности"). Именно так в терминологии мультимедиа называется устройство, предназначенное для работы с файлами в стандарте MIDI.
При работе с mid-файлами на уровне управляющих строк MCI вы можете пользоваться практически всеми командами, рассмотренными нами в разделе, посвященном записи и воспроизведению звука при помощи устройства waveaudio (не поддерживаются команды resume, record и save). Например, следующая последовательность команд выполнит проигрывание файла canyon.mid, который поставляется в составе дистрибутива операционной системы Windows:
open g:\win\canyon.mid alias music wait play music wait close music
Если с помощью команды play будет предпринята попытка проиграть mid-файл, не авторизованный для Windows, на экране появится предупреждающее сообщение о том, что при стандартной конфигурации MIDI данный файл может проигрываться неправильно (рис.4.1).
Рис. 4.1. Сообщение о попытке выполнить проигрывание файла MIDI, не авторизованного для Windows
Драйвер 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, позволяющий задать темп исполнения мелодии, и некоторые другие. Полный перечень вы сможете найти в документации, которая поставляется вместе с Microsoft SDK для Windows 3.1.