- •Введение
- •Компонент TTimer
- •Создание анимации
- •Использование спрайтов
- •Использование компонента TImage
- •Использование маски спрайта
- •Использование компонента TImageList
- •Воспроизведение звуковых и видеофайлов
- •Функция MessageBeep
- •Функция PlaySound
- •Компонент TMediaPlayer
- •Задания к лабораторной работе
- •Вопросы к лабораторной работе
- •Справочные таблицы
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Рисунок 9 – Настройка звуковой схемы
Функцию PlaySound можно использовать для озвучивания консольных приложений. Ниже приведен пример консольного приложения использующего стандартные звуки
Windows.
Листинг 2
program ConsolePrj; {$APPTYPE CONSOLE}
uses SysUtils, mmSystem;
begin //вход
PlaySound('SystemStart', 0, SND_SYNC); writeln('Press Enter to Exit'); readln;
//выход
PlaySound('SystemExit', 0, SND_SYNC); end.
Компонент TMediaPlayer
Компонент TMediaPlayer
представляет собой набор кнопок (рисунок 10)
предназначенных для управления различными мультимедийными устройствами (компактдисками, звуковыми картами и т. п.).
Рисунок 10 – Кнопки компонента TMediaPlayer.
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Компонент TMediaPlayer
находится на вкладке System палитры компонентов (рисунок 11).
Рисунок 11 – Расположение компонента TMediaPlayer в палитре компонентов.
Каждая кнопка компонента имеет собственное имя, позволяющее программисту сделать какую-либо кнопку невидимой или недоступной. В таблице 3 приводится имя и назначение каждой кнопки (под носителем информации подразумеваются файлы и физические устройства, которые могут служить источником или приемником информации).
Таблица 3 – Назначение кнопок компонента TMediaPlayer
Значок |
Имя |
Описание |
кнопки |
кнопки |
|
|
|
|
|
btPlay |
Инициирует воспроизведение носителя информации |
|
btPause |
Прерывает процесс записи или воспроизведения информации. |
|
|
Повторный щелчок на этой кнопке возобновляет прерванный |
|
|
процесс |
|
btStop |
Останавливает запись или воспроизведение |
|
btNext |
Позиционирует устройство на следующую дорожку или конец |
|
||
|
|
носителя информации, если устройство не имеет дорожек |
|
btPrev |
Позиционирует устройство на предыдущую дорожку или в начало |
|
|
носителя информации, если устройство не имеет дорожек |
|
btStep |
Позиционирует устройство на один блок кадров ближе к концу |
|
|
носителя информации. Количество кадров в блоке содержится в |
|
|
свойстве Frames компонента |
|
btBack |
Позиционирует устройство на один блок кадров ближе к началу |
|
|
носителя информации |
|
btRecord |
Начинает запись в носитель информации |
|
btEject Освобождает устройство от носителя информации
Основные свойства компонента TMediaPlayer представлены в таблице 4.
Таблица 4 – Свойства компонента TMediaPlayer
Свойство |
Описание |
|
|
property AutoEnable: Boolean; |
Разрешает/запрещает автоматическое |
|
определение доступных и недоступных кнопок |
property AutoOpen: Boolean; |
Разрешает/запрещает автоматический старт |
|
записи/воспроизведения в момент создания |
|
формы, в которую вставлен компонент |
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Свойство |
Описание |
|
|
|
|
property AutoRewind: Boolean; |
Разрешает/запрещает автоматическую |
|
|
"перемотку" носителя информации в момент |
|
|
начала записи или воспроизведения. |
|
|
Игнорируется, если устройство имеет дорожки |
|
|
или если установлены значения в свойства |
|
|
StartPos и EndPos |
|
TMPDeviceTypes = (dtAutoSelect, |
Содержит тип устройства. Если DeviceTypes = |
|
dtAVIVideo, dtCDAudio, dtDAT, |
dtAutoSelect, тип определяется автоматичен по |
|
dtDigitalVideo, dtMMMovie, dtOther, |
расширению файла в свойстве FileName. В |
|
dtOverlay, dtScanner, dtSequencer, |
момент установки любого мультимедийного |
|
dtVCR, dtVideodisc, dtWaveAudio); |
устройства в файл System.ini заносятся |
|
property DeviceType: |
расширения файлов, которые поддерживаются |
|
этим устройством |
||
TMPDeviceTypes; |
||
|
||
property Display: TWinControl; |
Содержит ссылку на окно для устройств, которые |
|
|
могут его использовать в процессе |
|
|
записи/воспроизведения |
|
property DisplayRect: TRect; |
Содержит область окна, указанного в свойстве |
|
|
Display, которое устройство может использовать |
|
|
для отображения процесса |
|
|
эаписи/воспроизведения. Для улучшения |
|
|
процесса отображения рекомендуется в свойстве |
|
|
DisplayRect указывать размеры, заданные по |
|
|
умолчанию (координаты (0, 0) для правого |
|
|
нижнего угла) |
|
property EnabledButtons: |
Содержит множество доступных кнопок |
|
TButtonSet; |
|
|
property EndPos: LongInt; |
Содержит положение носителя информации в |
|
|
момент прекращения записи или |
|
|
воспроизведения. Переустановка значения |
|
|
приводит к повторению записи или |
|
|
воспроизведения |
|
property Error: LongInt; |
Содержит код ошибки. Доступно только для |
|
|
чтения. |
|
property ErrorMessage: String; |
Содержит сообщение об ошибке. Доступно |
|
|
только для чтения. |
|
property FileName: String; |
Содержит имя читаемого или записываемого |
|
|
файла. |
|
property Frames: LongInt; |
Определяет количество кадров, пропускаемых |
|
|
при выполнении методов Step или Back |
|
property Length: LongInt; |
Содержит текущую длину носителя информации. |
|
|
Доступно только для чтения |
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Свойство |
Описание |
||
|
|
||
TMPModes = (mpNotReady, |
Показывает текущее состояние мультимедийного |
||
mpStopped, mpPlaying, mpRecording, |
устройства: |
||
mpSeeking, mpPaused, mpOpen); |
− mpNotReady – не готово; |
||
property Mode: TMPModes; |
− |
mpStopped – остановлено; |
|
− mpPlaying – воспроизводит информацию; |
|||
|
|||
|
− mpRecording – записывает информацию; |
||
|
− mpSeeking – перемещает носитель |
||
|
− |
информации; |
|
|
mpPaused – приостановлено; |
||
|
− |
mpOpen – открыто. |
|
|
Доступно только для чтения |
||
property Notify: Boolean; |
Содержит значение True, если методы Back, |
||
|
Close, Eject, Next, Open, Pause, PauseOnly, Play, |
||
|
Previous, StartRecording, Resume, Rewind, Step и |
||
|
Stop будут генерировать событие OnNotify |
||
TMPNotifyValues = (nvSuccessful, |
Содержит результат последней команды, |
||
nvSuperseded, nvAborted, nvFailure); |
генерирующей событие OnNotify: |
||
property NotifyValue: |
− nvSuccessful – выполнена успешно; |
||
− nvSuperseded – заменена другой командой; |
|||
TMPNotifyValues; |
|||
− nvAborted – досрочно прервана; |
|||
|
|||
|
− nvFailure – завершилась ошибкой. |
||
|
Доступно только для чтения |
||
property Position: LongInt; |
Содержит текущую позицию носителя |
||
|
информации |
||
property Start: LongInt; |
Содержит позицию от начала носителя, с которой |
||
|
начинается запись или воспроизведение. |
||
|
Определяется в момент открытия устройства и |
||
|
доступно только для чтения |
||
property StartPos: LongInt; |
Содержит текущую позицию от начала носителя, |
||
|
с которой начинается запись или |
||
|
воспроизведение |
||
TMPTimeFormats = (tfMilliseconds, |
Определяет формат представления данных в |
||
tfHMS, tfMSF, tfFrames, tfSMPTE24, |
свойствах StartPos, Length, Position, Start и EndPos |
||
tfSMPTE25, tfSMPTE30, |
(см. пояснения далее) |
||
tfSMPTE30Drop, tfBytes, tfSamples, |
|
|
|
tfTMSF); |
|
|
|
property TimeFormat: |
|
|
|
TMPTimeFormats; |
|
|
|
property TrackLength[TrackNum: |
Возвращает длину (в формате TimeFormat) |
||
Integer]: LongInt; |
дорожки с индексом TrackNum. Доступно только |
||
|
для чтения. |
||
property TrackPosition[TrackNum: |
Возвращает стартовую позицию (в формате |
||
Integer]: LongInt |
TimeFormat) дорожки с индексом ТrаскNum. |
||
|
Доступно только для чтения |
||
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Свойство |
Описание |
|
|
property Tracks: LongInt; |
Содержит количество дорожек в открытом |
|
устройстве. Доступно только для чтения. |
property VisibleButtons: TButtonSet; Содержит множество видимых кнопок. property Wait: Boolean;
Если свойство AutoEnable имеет значение True, компонент автоматически по типу устройства или расширению файла и значению свойства Mode определяет, какие кнопки будут доступны пользователю. Если свойство AutoEnable имеет значение False, доступными будут только те кнопки, которые входят в множество EnabledButtons. Множество EnabledButtons игнорируется, если свойство AutoEnable имеет значение
True.
Свойство AutoRewind игнорируется, если устройство имеет дорожки и если процесс записи/воспроизведения вызван изменением значения в свойстве StartPos или EndPos.
Свойство Display позволяет указать компонент (обычно – панель TPanel), который будет служить "экраном" для отображения видеочасти файлов типа AVI. Таким образом, в отличие от компонента TAnimate, компонент TMediaPlayer может воспроизводить и звук, и изображение одновременно.
Положение носителя в свойствах StartPos, Length, Position, Start и End в зависимости от значения свойства TimeFormat должно интерпретироваться следующим образом (отсчет ведется от начала носителя информации):
−tfMilliseconds – миллисекунды в диапазоне от 0 до 4 294 967 295;
−tfHMS – часы, минуты, секунды (занимают в порядке перечислениям одному байту начиная с младшего; старший байт LongInt не используется.
−tfMSF – минуты, секунды и кадры (занимают в порядке перечисления по одному байту начиная с младшего; старший байт LongInt не используется);
−tfFrames – кадры в диапазоне от 0 до 4 294 967 295;
−tfSMPTE24 – часы, минуты, секунды и количество блоков по 24 кадра в секунду (занимают в порядке перечисления по одному байту, начиная с младшего);
−tfSMPTE25 – часы, минуты, секунды и количество блоков по 25 кадров в секунду;
−tfSMPTE30 – часы, минуты, секунды и количество блоков по 30 кадров в секунду;
−tfSMPTE30Drop – часы, минуты, секунды и количество пропущенных блоков по 30 кадров в секунду;
−tfBytes – байты в диапазоне от 0 до 4 294 967 295;
−tfSamples – количество условных блоков информации в диапазоне от 0 до 4 294 967 295;
−tfTMSF – дорожки, минуты, секунды и кадры (занимают в порядке перечисления по одному байту, начиная с младшего).
Свойство TimeFormat в окне инспектора объектов недоступно и устанавливается автоматически при открытии мультимедийного устройства методом Open. В связи с этим значения в свойствах StartPos, Position и EndPos могут устанавливаться, а в свойствах Length, Start, TrackLength и TrackPosition становятся действительными только после
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
вызова метода Open. Некоторые методы компонента TMediaPlayer перечислены в таблице 5.
Таблица 5 – Методы компонента TMediaPlayer
Метод |
Описание |
|
|
procedure Back; |
Перемещает текущую позицию в носителе информации назад |
|
на количество кадров, содержащихся в свойстве Frames |
procedure Close; |
Закрывает связанное с компонентом устройство |
procedure Eject; |
Выгружает носитель информации из устройства. |
procedure Next; |
Перемещает текущую позицию носителя на начало следующей |
|
дорожки, а если устройство не имеет дорожек – в конец |
|
носителя |
procedure Open; |
Открывает мультимедийное устройство |
procedure Pause; |
Приостанавливает процесс воспроизведения или записи |
|
информации. Если устройство уже было приостановлено, |
|
восстанавливает процесс с помощью вызова метода Resume |
procedure PauseOnly; |
Приостанавливает процесс воспроизведения или записи |
|
информации. Если устройство уже было приостановлено, |
|
ничего не делает |
procedure Play; |
Начинает воспроизведение с позиции StartPos а если это |
|
свойство не установлено – с текущей позиции Position |
procedure Previous; |
Перемещает текущую позицию носителя на начало |
|
предыдущей дорожки, а если устройством имеет дорожек – в |
|
начало носителя. |
procedure Resume; |
Восстанавливает процесс записи или воспроизведения. |
|
Вызывается при повторном щелчке кнопке btPause. |
procedure Rewind; |
Перемещает текущую позицию носителя к положению, |
|
определяемому свойством Start. |
procedure Save; |
Сохраняет информацию в файле с именем FileName. |
procedure |
Начинает запись информации с текущей позиции или позиции |
StartRecording; |
StartPos. |
procedure Step; |
Перемещает текущую позицию в носителе информации вперед |
|
на количество кадров, содержащихся в свойстве Frames. |
procedure Stop; |
Прекращает запись или воспроизведение информации. |
События компонента TMediaPlayer представлены в таблице 6.
Таблица 6 – События компонента TMediaPlayer
Событие |
Описание |
|
|
EMPNotify = procedure(Sender: TObject; |
Возникает после щелчка на кнопке Button |
Button: TMPBtnType; var DoDefault: |
компонента. Если DoDefault=True, |
Boolean) of object; |
вызывается метод, связанный с этой кнопкой |
property OnClick: EMPNotify; |
|
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Событие |
Описание |
|
|
property OnNotify: PNotifyEvent; |
Возникает после завершения вызова одного |
|
из методов Back, Close, Eject, Next, Open, |
|
Pause, PauseOnly, Play, Previous, Resume, |
|
Rewind, StartRecording, Step или Stop, если |
|
свойство Notify имеет значение True |
EMPPostNotify = procedure (Sender: |
Если Wait=True, событие OnPostClick |
TObject; Button: TMPBtnType) of object; |
возникает только после завершения |
property OnPostClick: EMPPostNotify; |
соответствующей операции, вызванной |
|
событием OnClick, в противном случае – |
|
немедленно после события OnClick |
В качестве примера использования компонента TMediaPlayer рассмотрим программу мультимедиа проигрывателя.
На форму frmEasyPlayer поместите две панели (pnView, pnCommand). Установите значение свойства Align для компонента pnCommand равным alBottom, а для компонента pnView равным alClient.
Поместите на панель pnCommand компонент TMediaPlayer (mmPlayer). Установите значение свойства AutoSize компонента pnCommand равным True. Поместите на панель pnCommand компонент TBitBtn (btnOpen). Настройте вид компонента mmPlayer как показано на рисунке 12. Добавьте на форму компонент TOpenDialog (OpenDialog).
Рисунок 12 – Вид формы после добавления компонентов
Настройте свойство Filter компонента OpenDialog как показано на рисунке 13
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Рисунок 13 – настройка свойства Filter компонента OpenDialog
Добавьте в секцию public формы метод SetTitle. Этот метод служит для установки заголовка формы в зависимости от имени открытого файла. Тело метода приведено ниже.
procedure TfrmEasyPlayer.SetTitle(ATitle: string); begin
if ATitle<>'' then Caption:='Проигрыватель - ' + ATitle else Caption:='Проигрыватель';
end;
Добавьте в форму обработчики событий OnClick для компонента btnOpen и OnCreate для формы.
procedure TfrmEasyPlayer.FormCreate(Sender: TObject); begin
SetTitle(''); end;{FormCreate}
procedure TfrmEasyPlayer.btnOpenClick(Sender: TObject); begin
if OpenDialog.Execute then begin
try mmPlayer.FileName:=OpenDialog.FileName; mmPlayer.Open;
SetTitle(ExtractFileName(OpenDialog.FileName)); except
on Err:EMCIDeviceError do ShowMessage(Err.Message); else
ShowMessage('Неизвестная ошибка'); end;{except}
end;{if} end;{btnOpenClick}
Для того чтобы видеоизображение выводилось не в окно медиапрогрывателя, а на компонент pnView укажите его в свойстве Display компонента mmPlayer. Чтобы обеспечить масштабирование выводимого видеоизображения необходимо при изменении размеров панели pnView изменять значение свойства mmPlayer.DisplayRect. Создайте обработчик события OnResize для компонента pnView.
procedure TfrmEasyPlayer.pnViewResize(Sender: TObject); begin
//изменяем размер области для вывода изображений mmPlayer.DisplayRect:=pnView.ClientRect;
end;{pnViewResize}
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Запустите программу, проверьте ее работоспособность. Вид окна работающей программы приведен на рисунке 14.
Рисунок 14 – Окно программы «EasyPlayer».
Обратите внимание на то, что будут проигрываться только те мультимедиа файлы, для которых в операционной системе установлены драйверы. Поэтому вызовы методов Open и Play компонента TMediaPlayer необходимо обязательно помещать в защищенную секцию исключения.
Иногда необходимо проиграть несколько файлов подряд, если использовать для этого код, приведенный ниже, то будет проигрываться только последний файл.
...
mmPlayer.FileName:=’file1.mp3’; mmPlayer.Open;
mmPlayer.Play;
mmPlayer.FileName:=’file2.mp3’; mmPlayer.Open;
mmPlayer.Play;
...
Создайте новый проект. Поместите на форму (frmSndList) компонент TMediaPlayer (mmPlayer). Установите значение свойства Visible компонента mmPlayer равным False. Добавьте обработчики событий OnCreate, OnKeyDown и OnDestroy для формы. Создайте обработчик события OnNotify для компонента mmPlayer. Листинг программы приведен ниже.
Листинг 3
unit UPlayer;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer;
type
TfrmSndList = class(TForm)
Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
mmPlayer: TMediaPlayer;
procedure mmPlayerNotify(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormDestroy(Sender: TObject); private
{Private declarations } public
{Public declarations }
//список для хранения списка mp3 файлов
SndList:TStringList;
//индекс текущего проигрываемого файла
CurFile:Integer;
end;
var frmSndList: TfrmSndList;
implementation
{$R *.dfm}
procedure TfrmSndList.mmPlayerNotify(Sender: TObject); begin
//если проигрыватель остановлен, //то запускаем следующий файл из списка if mmPlayer.Mode=mpStopped then
begin Inc(CurFile);//следующий файл
if CurFile<=SndList.Count-1 then begin
mmPlayer.FileName:=SndList.Strings[CurFile];
mmPlayer.Open;
mmPlayer.Play;
//устанавливаем заголовок формы
Caption:=SndList.Strings[CurFile]; end
else //список исчерпан закрываем программу
Halt(0); end;{if}
end;{mmPlayerNotify}
procedure TfrmSndList.FormCreate(Sender: TObject); var Search:TSearchRec;
begin
//создаем список
SndList:=TStringList.Create;
//ищем все файлы mp3 в текущем каталоге if FindFirst('*.mp3', 0, Search)=0 then
begin repeat
SndList.Add(Search.Name); until FindNext(Search)<>0;
CurFile:=0;//индекс первого файла для проигрывания end{if}
else CurFile:=-1; //нет файлов в списке FindClose(Search);
