Книги-online
Event Oriented Programming.
32 урока по Delphi
Урок 11: Средства создания
мультимедийных приложений
Содержание урока
11:
Обзор
Что такое мультимедиа
Мультимедиа в Delphi
Компонент TMediaPlayer
Два вида программ, использующих
мультимедиа
Пример программы с мультимедиа
ex11.zip
Обзор
Delphi позволяет легко
и просто включать в программу такие мультимедийные объекты, как звуки,
видео и музыку. В данном уроке обсуждается,
как это сделать, используя встроенный в Delphi компонент
TMediaPlayer. Подробно рассматриваются
управление этим компонентом в программе и получение информации о текущем
состоянии.
Что такое мультимедиа
Точного определения,
что же это такое, нет. Но в данный момент и в данном месте, наверное, лучше
дать по-возможности наиболее общее определение и сказать, что “мультимедиа”
- это термин относящийся к почти всем формам анимации, звукам, видео, которые
используются на компьютере.
Давая такое общее определение,
нужно сказать, что в данном уроке мы имеем дело с подмножеством мультимедиа,
которое включает:
1. Показ видео в формате
Microsoft's Video for Windows (AVI).
2. Воспроизведение звуков
и музыки из MIDI и WAVE файлов.
Данную задачу можно выполнить
с помощью динамической библиотеки Microsoft Multimedia Extensions
для Windows (MMSYSTEM.DLL),
методы которой инкапсулированы в компоненте TMediaPlay,
находящийся на странице System Палитры
Компонент Delphi.
Для проигрывания файлов мультимедиа
может потребоваться наличие некоторого оборудования и программного обеспечения.
Так для воспроизведения звуков нужна звуковая карта. Для воспроизведения
AVI в Windows 3.1 (или
WFW) требуется установить ПО Microsoft
Video.
Мультимедиа в Delphi
В Delphi есть
компонент TMediaPlayer, который дает
Вам доступ ко всем основным возможностям программирования мультимедиа.
Данный компонент очень прост в использовании.
Фактически, он настолько прост, что многим
начинающим программистам будет проще создать свою первую программу, проигрывающую
видео или музыку, нежели показывающую классическую надпись "Hello
World".
Простоту использования можно
воспринимать двояко:
· С
одной стороны - это дает возможность любому создавать мультимедиа приложения.
· С
другой стороны, можно обнаружить, что в компоненте реализованы не все возможности.
Если Вы захотите использовать низкоуровневые
функции, то придется копаться достаточно глубоко, используя язык Delphi.
В данном уроке не описываются
подробности внутренних вызовов мультимедийных функций при работе компонента.
Все что нужно знать - это то, что компонент
называется TMediaPlayer, и что он дает
доступ к набору подпрограмм, созданных Microsoft и
называемых Media Control Interface (MCI). Эти
подпрограммы дают программисту простой доступ к широкому кругу устройств
мультимедиа. Собственно работа с TMediaPlayer
интуитивно понятна и очевидна.
Компонент TMediaPlayer
Для начала давайте создадим
новый проект, затем поместим компонент
TMediaPlayer (стр. System Палитры)
на форму, как показано на рис.1.
Рис.1:
Компонент TMediaPlayer на
форме.
Компонент TMediaPlayer оформлен,
как панель управления устройством с кнопками. Как и на магнитофоне, здесь
есть кнопки “воспроизведение”, “перемотка”, “запись” и др.
Поместив компонент на форму,
Вы увидите, что Инспектор Объектов содержит свойство "FileName"
(см. рис.2). Щелкните дважды
Рис.2:
Свойства TMediaPlayer в Инспекторе
Объектов
на этом свойстве и выберите имя файла с расширением AVI,
WAV или
MID. На рис.2 выбран AVI
файл DELPHI.AVI.
Далее нужно установить свойство AutoOpen
в True.
После выполнения этих шагов
программа готова к запуску. Запустив программу, нажмите зеленую кнопку
“воспроизведение” (крайняя слева) и Вы увидите видеоролик (если выбрали
AVI) или услышите звук (если выбрали
WAV или MID). Если
этого не произошло или появилось сообщение об ошибке, то возможны два варианта:
Вы ввели неправильное имя файла.
Вы не настроили правильным образом
мультимедиа в Windows. Это означает,
что либо у Вас нет соответствующего ”железа”, либо не установлены нужные
драйверы. Установка и настройка драйверов
производится в Control Panel, требования
к “железу” приводятся в любой книге по мультимедиа (нужна звуковая карта,
например совместимая с Sound
Blaster).
Итак, Вы имеете возможность
проигрывать AVI, MIDI и WAVE
файлы просто указывая имя файла.
Еще одно важное свойство
компонента TMediaPlayer - Display.
Изначально оно не заполнено и видео воспроизводится в отдельном окошке.
Однако, в качестве экрана для показа ролика можно использовать, например,
панель. На форму нужно поместить компонент TPanel,
убрать текст из св-ва Caption. Далее,
для TMediaPlayer, в свойстве Display
выбрать из списка Panel1.
После этого надо запустить программу и нажать кнопку “воспроизведение”
(см. рис.3)
Рис.3:
Воспроизведение AVI на панели.
Два вида программ мультимедиа
· Иногда
приходится предоставлять пользователям простой путь для проигрывания максимально
широкого круга файлов. Это означает,
что Вам нужно будет дать пользователю доступ к жесткому диску или CD-ROM,
и затем позволить ему выбрать и воспроизвести
подходящий файл. В этом случае, на форме обычно располагается TMediaPlayer,
предоставляющий возможность управления воспроизведением.
· Иногда
программист может захотеть скрыть от пользователя существование компонента
TMediaPlayer. То есть, воспроизвести
звук или видео без того, чтобы пользователь заботился об их источнике.
В частности, звук может быть частью презентации.
Например, показ какого-нибудь графика на экране
может сопровождаться объяснением, записанным в WAV файл.
В течении презентации пользователь даже не
знает о существовании TMediaPlayer. Он
работает в фоновом режиме. Для этого компонент делается невидимым (Visible
= False) и управляется программно.
Пример программы с мультимедиа
В данной главе мы рассмотрим
пример построения приложения с мультимедиа первого типа. Создайте новый
проект (File | New Project). Поместите
TMediaPlayer на форму; поместите компоненты
TFileListBox, TDirectoryListBox, TDriveComboBox, TFilterComboBox
для выбора файла. В свойстве FileList
для DirectoryListBox1
и FilterComboBox1 поставьте FileListBox1.
В св-ве DirList для DriveComboBox1
поставьте DirectoryListBox1. В св-ве
Filter для FilterComboBox1
укажите требуемые расширения файлов:
AVI File(*.avi)|*.avi
WAVE File(*.wav)|*.wav
MIDI file(*.MID)|*.mid
Пусть по двойному щелчку
мышкой в FileListBox1 выбранный файл
будет воспроизводиться. В обработчике события OnDblClick для
FileListBox1 укажите
Procedure TForm1.FileListBox1DblClick(Sender:TObject);
begin
with MediaPlayer1 do
begin
Close;
FileName:=FileListBox1.FileName;
Open;
Play;
end;
end;
Внешний вид формы представлен
на рис.4
Рис.4:
Начальный вид проекта
Сохраните проект, запустите
его, выберите нужный файл и дважды щелкните на него мышкой. MediaPlayer
должен воспроизвести этот файл в отдельном
окне.
Как уже говорилось выше,
видеоролик можно воспроизводить внутри формы, например, на панели. Давайте
слегка модифицируем проект и добавим туда панель TPanel
(см. рис.5). В св-ве Display для MediaPlayer1
укажите Panel1.
Нужно убрать надпись с панели (Caption)
и св-во
BevelOuter = bvNone. Чтобы переключаться
при воспроизведении с окна на панель - поместите TСheckBox
на форму и в обработчике события OnClick
для него запишите:
procedure TForm1.CheckBox1Click(Sender: TObject);
var
Start_From : Longint;
begin
with MediaPlayer1 do begin
if FileName='' then Exit;
Start_From:=Position;
Close;
Panel1.Refresh;
if CheckBox1.Checked then
Display:=Panel1
else
Display:=NIL;
Open;
Position:=Start_From;
Play;
end;
end;
Запустите проект и воспроизведите
видеоролик. Пощелкайте мышкой на CheckBox.
Рис.5:
Добавлена панель для воспроизведения видео и переключатель окно/панель.
Во время выполнения программы
может потребоваться отобразить текущее состояние объекта MediaPlayer
и самого ролика (время, прошедшее с начала воспроизведения, длину ролика).
Для этого у объекта TMediaPlayer есть
соответствующие свойства и события: Length, Position, OnNotify и
др. Давайте добавим в проект прогресс-индикатор (TGauge),
который отобразит в процентах, сколько прошло времени (см. рис.6). Для
обновления показаний индикатора можно воспользоваться таймером. Поместите
на форму объект TTimer, установите
для него Interval = 100 (100 миллисекунд).
В обработчике события OnTimer нужно
записать:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
with MediaPlayer1 do
if FileName<>'' then
Gauge1.Progress:=Round(100*Position/Length);
end;
Запустите проект, выберите
файл (AVI) и щелкните на нем два раза
мышкой. При воспроизведении ролика прогресс-индикатор должен отображать
процент, соответствующий прошедшему времени (см. рис.6).
Рис.6: Законченное
приложение для воспроизведения AVI, WAV и
MDI файлов.