4.8.3 Универсальный проигрыватель MediaPlayer

В Delphi (начиная с Delphi 2) имеется компонент MediaPlayer — универсальный проигрыватель аудио- и видео-информации. Этот медиа-плеер расположен на странице System библиотеки компонентов.

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

Пользовательский интерфейс медиа-плеера представлен на рис. 4.23. Он имеет ряд кнопок, управляемых мышью или клавишей пробела и клавишами со стрелками.

Рис. 4.23
Панель компонента MediaPlayer

Назначение кнопок (перечисляются слева направо):
КнопкаДействие
PlayВоспроизведение
PauseПауза воспроизведения или записи. Если медиа-плеер в момент щелчка уже в состоянии паузы, то воспроизведение или запись возобновляются
StopОстанов воспроизведения или записи
NextПереход на следующий трек или на конец
PrevПереход на предыдущий трек или на начало
StepПеремещение вперед на заданное число кадров
BackПеремещение назад на заданное число кадров
RecordНачало записи
EjectОсвобождение объекта, загруженного в устройство

Каждой кнопке медиа-плеера соответствует метод, осуществляющий по умолчанию требуемую операцию: Play, Pause, Stop, Next, Previous, Step, Back, StartRecording, Eject.

Тип устройства мультимедиа, с которым работает медиа-плеер, определяется его свойством DeviceType. Если устройство мультимедиа хранит объект воспроизведения в файле, то имя файла задается свойством FileName. По умолчанию свойство DeviceType имеет значение dtAutoSelect. Это означает, что медиа-плеер пытается определить тип устройства исходя из расширения имени файла FileName.

Еще одно свойство MediaPlayerAutoOpen. Если оно установлено в true, то медиа-плеер пытается открыть устройство, указанное свойством DeviceType, автоматически во время своего создания в процессе выполнения приложения.

Воспроизведение видео информации по умолчанию производится в окно, которое создает само открытое устройство мультимедиа. Однако это можно изменить, если в свойстве Display указать оконный элемент, в котором должно отображаться изображение. Это может быть, например, форма или панель. Можно также задать в свойстве DisplayRect типа TRect (свойство только времени выполнения) прямоугольную область этого окна, в которую должно выводиться изображение. Для задания свойства DisplayRect можно использовать функцию Rect. Однако, в данном свойстве использование типа TRect не совсем обычно. Первые две координаты, как и обычно, задают положение левого верхнего угла изображения. А два следующих числа задают ширину и высоту изображения, а не координаты правого нижнего угла. Например, оператор

MediaPlayer1.DisplayRect := Rect(10, 10, 200, 200);
задает для вывода область с координатами левого верхнего угла (10, 10), длиной и шириной, равными 200.

В компоненте MediaPlayer определены события OnClick и OnNotify. Первое из них происходит при выборе пользователем одной из кнопок медиа-плеера и определено как

type TMPBtnType=(btPlay, btPause, btStop,
btNext, btPrev, btStep,
btBack, btRecord, btEject);
procedure(Sender: TObject; Button:TMPBtnType; var DoDefault: Boolean);

Параметр Button указывает выбранную кнопку. Параметр DoDefault, передаваемый как var, определяет выполнение (при значении true по умолчанию) или отказ от выполнения стандартного метода, соответствующего выбранной кнопке.

Событие OnNotify происходит после возвращения очередного метода, если свойство медиа-плеера Notify было установлено в true. Способ возврата любого метода медиа-плеера определяется свойством Wait. Если установить Wait равным false, то возвращение управления в приложение происходит сразу после вызова метода, не дожидаясь завершения его выполнения. Таким образом, задав Notify равным true и Wait равным false, можно обеспечить немедленный возврат в приложение и отображение пользователю текущего состояния объекта мультимедиа.

Свойства Notify и Wait действуют только на один очередной метод. Поэтому их значения надо каждый раз восстанавливать в обработчиках событий OnClick или OnNotify.

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

Вот, собственно, в конспективном виде основная информация о компоненте MediaPlayer. А теперь попробуйте все это на практике. Простое и в то же время мощное приложение можно сделать очень легко. Начните новый проект и перенесите на форму компоненты MediaPlayer, MainMenu и OpenDialog. В фильтре компонента OpenDialog можно, например, задать:


ауди *.wav, *.mid*.wav;*.mid
видео *.avi*.avi
все файлы*.*

В меню достаточно задать одну команду: Файл | Открыть. Обработчик события OnClick этой команды может содержать оператор

if OpenDialog1.Execute then
with MediaPlayer1 do
begin
FileName := OpenDialog1.FileName;
Open;
end;
который открывает устройство мультимедиа, соответствующее выбранному пользователем файлу. При этом надо проследить, чтобы в компоненте MediaPlayer свойство DeviceType равнялось dtAutoSelect. Это обеспечит автоматический выбор соответствующего устройства мультимедиа исходя из расширения выбранного файла.

В компоненте MediaPlayer при желании можно указать имя файла FileName, открываемого в момент начала выполнения приложения. Тогда надо установить свойство AutoOpen в true. Впрочем, это, конечно, не обязательно.

Вот и все. Можете выполнять свое приложение и наслаждаться музыкой или фильмами (если, конечно, все вопросы, связанные с настройкой мультимедиа на вашем компьютере решены).

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

Рис. 4.24
Приложение универсального проигрывателя при воспроизведении звукового файла

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

const
ModeStr: array[TMPModes] of string =
(' He готово', 'Остановлено', 'Воспроизведение',
'Запись', 'Поиск', 'Пауза', 'Открыто');
ButtonStr: array[TMPBtnType] of string =
('Воспроизведение', 'Пауза', 'Стоп',
'Следующий', 'Предыдущий', 'Вперед',
'Назад', 'Запись', 'Конец');
procedure TForm1.OpenClick(Sender: TObject);
begin
if OpenDialog1.Execute
then with MediaPlayer1 do
begin
FileName := OpenDialog1.FileName;
Label1.Caption := 'Файл: ' + FileName;
Open;
Notify:=true;
end;
end;
procedure TForm1.MediaPlayer1Notifу(Sender: TObject);
begin
with MediaPlayer1 do
begin
Label2.Caption := 'Состояние: ' + ModeStr[Mode];
{Переустановка Notify, чтобы событие произошло в следующий раз}
Notify := true;
end;
end;
procedure TForm1.FormCreate (Sender: TObject);
begin
with MediaPlayer1 do
begin
Label1.Caption := 'Файл: ' + FileName;
Label2.Caption := 'Состояние: ' + ModeStr[Mode];
Notify:=true;
end;
end;
procedure TForm1.MediaPlayer1Click(Sender: TObject;
Button: TMPBtnType; var DoDefault: Boolean);
begin
Label3.Caption := 'Операция: ' + ButtonStr[Button];
{Переустановка Notify, чтобы произошло событие OnNotify}
MediaPlayer1.Notify := true;
end;


Рис. 4.25
Приложение универсального проигрывателя при воспроизведении видео файла

Запустите приложение и проверьте его в работе. На рис. 4.24 показана приложение в момент воспроизведения звукового файла. А на рис. 4.25 то же приложение воспроизводит видео файл. Причем, поскольку мы не определили окно и область вывода изображения, то проигрыватель сам создает соответствующее окно.


к началу страницы