• mpCanE j ect – извлечение носителя;
• mpCanPlay – воспроизведение;
• mpCanRecord – запись на носитель;
• mpCanStep – перемотка вперед или назад определенного количества кадров;
• mpUsedWindow – использование окна для вывода изображения.
Перед использованием устройства его нужно открыть, поскольку большинство методов, например Play и StartRecording, можно вызвать только после открытия устройства. Оно выполняется путем вызова метода Open (листинг 5.2). Если необходимо выполнить автоматическое открытие устройства, то свойству AutoOpen типа Boolean следует присвоить значение True (по умолчанию присвоено значение Fal s е). После открытия какого-либо устройства свойство Devi s е ID типа Wo г d проигрывателя определяет идентификатор этого устройства. Если открытых устройств нет, то значение свойства DeviselD равно 0.Листинг 5.2.
Открытие проигрывателя компакт-дисков
procedure TForm1.Button2Click(Sender: TObject);
begin
//Задаем устройство воспроизведения
MyMediaPlayer.DeviceType := dtCDAudio;
//Открываем устройство
MyMediaPlayer.Open;
end;
После завершения использования мультимедийного устройства его нужно закрыть, вызвав метод Close.
После открытия устройства с помощью свойства Tracks типа Longint можно получить информацию о количестве фонограмм (дорожек). Если устройство не поддерживает дорожки, то значение этого свойства неопределенно. Свойство TrackLength ITrackNum: Integer] типа Longint содержит длину фонограммы с индексом TrackNum (отсчет начинается с единицы). Длина дорожки указывается в формате времени, который определен свойством TimeFormat.
Свойство TimeFormat типа TMPTimeFormats задает формат значений свойств, которые связаны со временем. Оно влияет на способ интерпретации и отображение значений таких свойств, как TrackLength, Length, StartPos, EndPos и Position. Основными значениями свойства TimeFormat являются следующие.
• tfMilliseconds – целое четырехбайтовое число, счетчик миллисекунд.
• tfHMS – количество часов, минут и секунд, размещенных побайтно, начиная с младшего байта, в четырехбайтовом целом. Старший байт не учитывается.
• tfMSF – количество минут, секунд и кадров, размещенных побайтно, начиная с младшего байта, в четырехбайтовом целом. Старший байт не учитывается.
• tfFrames – целое четырехбайтовое число, содержащее количество кадров.
Теперь, когда мы ознакомились с основными свойствами мультимедиа-компонента MediaPlayer, можем приступать к непосредственному применению его на практике. Приведем пример исходного текста программы, при загрузке которой проигрывается звук (в формате WAV) (листинг 5.3).
Листинг 5.3.
Воспроизведение звука при создании формы приложения
//Функция вызывается при создании формы
procedure TForm1.FormCreate(Sender: TObject);
begin
//Скрываем компонент
MyMediaPlayer.Visible := false;
//Автоматически определяем устройство воспроизведения
MyMediaPlayer.DeviceType := dtAutoSelect;
//Загружаем файл воспроизведения
MyMediaPlayer.FileName := \'start.wav\
//Открываем устройство
if not MyMediaPlayer.AutoOpen then MyMediaPlayer.Open;
//Воспроизводим файл
MyMediaPlayer.Play;
end;
При создании формы Forml воспроизводится звуковой файл start. wav.
В некоторых случаях удобно хранить данные (например, звуковые записи) и использовать их прямо в запускаемом модуле (ЕХЕ-файле). Такой метод предусматривает хранение звука в файлах ресурсов (RES). На этапе сборки программы файлы ресурсов прикрепляются к запускаемому модулю, тем самым увеличивая размер модуля. Но количество файлов, необходимых для корректной работы программы, уменьшается. Так, в предыдущем случае для нормальной работы программы (воспроизведение звука при загрузке) необходим фaйлstart. wav. Следующий пример демонстрирует создание приложения, запускаемый модуль которого будет содержать все необходимые ресурсы, в нашем случае это звуковой файл.
Вначале необходимо создать файл ресурса, содержащий звуковую запись. Для этого понадобится компилятор ресурсов, который находится в кaтaлoгeBorland\ Delphi7\Bin\ и носит имяЬгсс32. ехе. Далее создаем файл ресурса. Все ресурсы (значки, указатели, изображения, таблицы строк и т. п.), используемые приложением, описываются в специальном файле. Такое описание имеет фиксированный формат:
<имя><тип><параметры><имя файла>
Имя – это уникальное имя ресурса, которое будет использоваться в процедурах работы с ресурсами. Имя файла – строка, содержащая путь к файлу. В нашем случае строка, описывающая ресурс:
LOADSOUND RCDATA LOADONCALL start.wav
Далее в командной строке записываемЬгсс32. ехе source. re, где source. re – текстовый файл, содержащий описание ресурса.
После компиляции получаем готовый файл pecypcasource. RES. Перемещаем его в каталог проекта. На этом этапе ресурс может использоваться.
Чтобы подключить файл ресурса, пишем в исходном тексте:
//Подключение ресурса
{$R SOURCE.RES}
Теперь, когда файл ресурса подключен и готов к использованию, необходимо создать функцию, которая будет доставать звуковой файл и воспроизводить его. Тело функции, выполняющей эти действия, выглядит следующим образом (листинг 5.4).
Листинг 5.4.
Использование ресурсов для хранения звуковых записей
//Функция, которая воспроизводит звук, находящийся в ресурсе
procedure RetrieveLoadSound;
var
hResource : THandle;
pData : Pointer;
begin
//Загружаем файл ресурса и находим звук под именем \'LOADSOUND\'
hResource := LoadResource( hInstance, FindResource(hInstance,
\'LOADSOUND\', RT_RCDATA));
try
//Находим адрес загруженного ресурса
pData := LockResource(hResource);
if pData = nil then raise Exception.Create(\'Ошибка чтения
ресурса LOADSOUND\');
//Воспроизводим звуковой файл
sndPlaySound(pData, SND_MEMORY);
finally
//Освобождаем ресурс
FreeResource(hResource);
end;
end;
Для работы функции RetrieveLoadSound понадобятся две следующие переменные: hResource (дескриптор ресурса) и pData (указатель на память, расположение ресурса). Перед использованием ресурса производится его загрузка (функция LoadResource). Но чтобы загрузить именно тот ресурс, который нам необходим (звук LOADSOUND), с помощью функции FindResource ищем его в ресурсах, подключенных к этому экземпляру приложения (hlnstance). Далее получаем указатель на память, в которой находится звуковой файл, и записываем его в переменную pData. Если ресурс не найден, то программа выдаст сообщение об ошибке.
После того как был получен указатель на память, его можно использовать в функции sndPlaySound для воспроизведения звука. Параметр SND_MEMORY говорит о том, что воспроизведение будет осуществляться из памяти.
Функция RetrieveLoadSound может использоваться в любом месте программы для воспроизведения start. wav. В этом случае данные звукового файла будут находиться в запускаемом модуле, увеличивая его объем, но сокращая количество файлов приложения. Такой подход эффективен при создании небольших приложений, которые снабжаются короткими звуковыми сопровождениями.
В конце главы будет подробно описан процесс создания универсального проигрывателя, работа которого целиком построена на использовании компонента MediaPlayer. Далее рассмотрим следующий мультимедийный компонент Delphi – Animate, который позволяет воспроизводить как стандартную (встроенную в Windows), так и пользовательскую анимацию.
5.3. Компонент Animate
Видеоклип представляет собой файл в формате AVI, содержащий последовательность отдельных кадров, при отображении которых создается эффект движения. Наряду с изображением AVI-файлы могут содержать звук. Для воспроизведения видеоклипов можно использовать любой из компонентов – Animate или MediaPLayer.
Компонент Animate позволяет проигрывать AVI-файлы, а также отображать стандартную анимацию, используемую в Windows. AVI-файлы, воспроизводимые компонентом Animate, имеют следующие ограничения:
• они не должны содержать звука;
• информация в них не должна быть сжатой;
• размер файла не должен превышать 64 Кбайт.
Для задания воспроизводимого видеоклипа используются свойства FileName и CommonAVI. В один момент можно использовать только одно из этих свойств. Проигрываемый AVI-файл, существующий на диске, указывается путем задания свойства FileName, при этом свойству CommonAVI автоматически присваивается значение aviNone. Свойство CommonAVI позволяет выбрать один из стандартных клипов Windows и принимает следующие значения:
• aviNone – отсутствие стандартной анимации;
• aviCopyFile – копирование файла;
• aviCopyFiles – копирование файлов;
• aviDeleteFile—удаление файла;
• aviEmptyRecycle – очистка Корзины;
• aviFindComputer – поиск компьютера;
• aviFindFile – поиск файла;
• aviFindFolder – поиск папки;
• aviRecycleFile – перемещение файла в Корзину.
При присвоении свойству CommonAVI значения, отличного от aviNone, свойство FileName автоматически сбрасывается, принимая в качестве значения пустую строку.
Для задания видеоклипа также можно использовать ResHandle типа THandle и ResID типа Integer, которые составляют альтернативу свойствам CommonAVI и FileName. Значение ResHandle задает ссылку на модуль, в котором содержится изображение в виде ресурса, а значение свойства ResID в этом модуле указывает номер ресурса.