Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №22.pdf
Скачиваний:
35
Добавлен:
16.03.2015
Размер:
1.63 Mб
Скачать

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Рисунок 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.

 

Доступно только для чтения

Если содержит значение True, управление возвращается в программу только после завершения перехода устройства в другое состояние, связанное с методом Back, Close, Eject, Next, Open, Pause, PauseOnly, Play, Previous, StartRecording, Resume, Rewind, Step или Stop.

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Свойство

Описание

 

 

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);