Смекни!
smekni.com

Учебно-методическое пособие для студентов физико-математических специальностей вузов Балашов (стр. 14 из 18)

Замечание. Для того чтобы данная функция была доступна, необходимо подключить модуль MMSystem. После этого весь блок подключаемых модулей должен иметь следующий вид:

Uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,MMSystem;

Приведем примеры использования функции PlaySound. Оператор

PlaySound('C:\Windows\Media\Звук Microsoft.wav' ,0, SND_ASYNC);

воспроизводит асинхронно и однократно стандартный звук Microsoft, который вы обычно можете слышать при открытии Windows. В процессе воспроизведения продолжается выполнение приложения.

Пример 1

Создать приложение, которое могло бы воспроизводить любой волновой файл.

Введите в приложение диалоговый компонент OpenDialog и кнопку со следующим обработчиком щелчка:

procedure TForm1.Button1Click(Sender: TObject);

begin

if OpenDialog1.Execute then

Begin

PlaySound(pchar(OpenDialog1.FileName),0,SND_ASYNC);

end;

end;

В данном примере в функции PlaySound используется преобразование типов строковой переменой, которое имеет свойство OpenDialog1. FileName указателя на строку типа PChar. В этом случае служебное слово Pchar будет восприниматься как функция, которая преобразует строковую переменную в данный тип, хотя в общем случае PChar — это тип указателя на строку, которая заканчивается нулем. В предыдущих примерах звук задавался именем его волнового файла. Функция PlaySound позволяет воспроизводить и системные звуки, просто называя их псевдонимы. Псевдоним — это системное имя, определяющее путь к конкретному файлу, воспроизводимому на какое-то действие. Все псевдонимы занесены в системный реестр Windows и могут быть изменены с помощью редактора реестра. Например, оператор

PlaySound('SystemStart',0,SND_ASYNC);

воспроизводит тот же звук открытия Windows, что и приведенный ранее оператор, указывавший имя и путь к нему. Оператор

PlaySound( 'C:\Windows\Media\Звук Microsoft.wav', 0,SND_ASYNC or SND_LOOP);

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

PlaySound(0,0,SND_PURGE);

Все рассмотренные ранее операторы прерывали при своем выполнении звук, который асинхронно воспроизводился в момент вызова PlaySound. Если же вы выполните оператор с флагом SND_NOSTOP, например:

PlaySound(‘C:\Windows\Media\3вyк Microsoft.wav’,0, SND_SYNC or SND_NOSTOP);

то в случае, если в этот момент драйвер занят воспроизведением другого звука, это воспроизведение не будет прерываться, а функция PlaySound сразу вернет false. Заказанного этим оператором звука не услышите, т. к. в очередь он не встанет.

Теперь рассмотрим способ воспроизведения в приложении Delphi стандартных мультипликаций Windows и файлов .avi — клипов без звукового сопровождения. Это позволяет сделать компонент Animate, расположенный на странице Win32.

Компонент Animate со страницы Win32 позволяет воспроизводить на форме стандартные видеофайлы Windows (типа копирования файлов, поиска файлов и т. п.) и немые видеофайлы avi (Audio Video Interleaved). Эти файлы представляют собой последовательность кадров битовых матриц. Они могут содержать и звуковую дорожку, но компонент Animate воспроизводит только немые клипы.

Воспроизводимое им изображение задается одним из двух свойств: FileName или CommonAVI. Первое из этих свойств позволяет в процессе проектирования или выполнения задать имя воспроизводимого файла.
А свойство CommonAVI позволяет воспроизводить стандартные мультипликации Windows. Данный параметр может принимать предопределенные в Windows значения, например мультипликаций типа копирования файлов, поиска файлов, удаления файлов и т. п. На рисунке 28 представлен инспектор объектов, в котором перечислены основные типы анимации.

Рисунок 28

Если значение свойства CommonAVI задать, например, aviCopyFile, что соответствует стандартному изображению копирования файла, то соответствующий начальный рисунок немедленно появится на компоненте Animate (рис. 29).

Рисунок 29

Свойство Repetitions задает число повторений воспроизведения клипа. Если оно равно 0 (значение по умолчанию), то воспроизведение повторяется вновь и вновь до тех пор, пока не будет выполнен метод Stop. При выполнении этого метода генерируется событие OnStop.

Если же свойство Repetitions задать больше 0, оно определит число повторений клипа. Логическое свойство Active компонента Animate определяет, показывается или нет в данный момент мультипликация.

В компоненте Animate также предусмотрены события OnClose, OnOpen, OnStart, генерируемые соответственно в моменты закрытия
и открытия компонента и начала воспроизведения.

Пример 2

Создать приложение, в котором можно воспроизвести все стандартные мультипликации Windows некоторое заранее заданное, количество раз.

Поместим компонент Animate на форму и установим свойство Visible
в false. Это надо для того, чтобы изображение возникало только тогда, когда произойдет соответствующее событие: копирование, файлов, поиск файлов и т. п. Свойство Active установите в false. Полезно также установить свойство AutoSize в false, а свойство Center в true, чтобы изображение всегда появлялось в центре экрана.

Рисунок 30

В приложении будем имитировать начало и окончание события, которое должно сопровождаться мультипликацией, нажатиями кнопок запуска
и остановки воспроизведения. При этом будем независимо устанавливать как видео фрагмент, так и количество демонстраций. Для этого поместим на форму компонент Edit1 и установим значение свойства Text равным 1, для того чтобы видео фрагмент демонстрировался по умолчанию один раз.

На форме также разместим компонент RadioGroup, в котором будем выбирать номер фрагмента. В свойстве Items зададим следующие строки: номер 1, номер 2 и т. д. до номера 8. Свойству ItemsIndex присвоим значение 0. На форме разместим две кнопки. При нажатии на первую кнопку будет происходить демонстрация видеофрагмента, а на вторую — остановка. Форма может иметь вид, представленный на рисунке 30.

Тогда процедуры обработки нажатий могут иметь следующий вид:

procedure TForm1.Button1Click(Sender: TObject);

begin

Animate1.Visible:=True;

Animate1.CommonAVI:=TCommonAVI(RadioGroup1.ItemIndex+1);

Animate1.Repetitions:=SpinEdit1.Value;

Animate1.Active:=True;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Animate1.Stop;

end;

procedure TForm1.Animate1Stop(Sender: TObject);

begin

Animate1.Visible:=False;

end;

Можете посмотреть воспроизводимое изображение по кадрам. Для этого из локального меню выберите разделы NextFrame (следующий кадр) или PreviousFrame (предыдущий кадр). Это позволит вам выбрать фрагмент клипа, если вы не хотите воспроизводить клип полностью. Воспроизвести фрагмент клипа можно, установив соответствующие значения свойств: StartFrame — начальный кадр воспроизведения и StopFrame — последний кадр воспроизведения.

Воспроизводить фрагмент клипа можно и методом Play, который определен следующим образом:

procedure Play(FromFrame, ToFrame: Word; Count: Integer);

Метод воспроизводит заданную последовательность кадров клипа от FromFrame до ToFrame включительно, воспроизведение повторяется Count раз. Значение ToFrame должно быть не меньше FromFrame и не больше значения, определяемого свойством FrameCount (свойство только для чтения), указывающим полное число кадров в клипе. Если Count = 0, то воспроизведение повторяется до тех пор, пока не будет выполнен метод Stop.

В качестве видеофайла можете использовать файл …Delphi5\Demos\ Coolstuf\cool.avi, поставляемый с примерами Delphi, или любой другой видеофайл.

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

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

Рисунок 31

Назначение кнопок, перечисленных слева направо, представлено
в таблице 6.

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

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