Электронная библиотека » Александр Чиртик » » онлайн чтение - страница 10


  • Текст добавлен: 10 ноября 2013, 00:08


Автор книги: Александр Чиртик


Жанр: Программирование, Компьютеры


сообщить о неприемлемом содержимом

Текущая страница: 10 (всего у книги 24 страниц)

Шрифт:
- 100% +

Глава 5
Мультимедиа

• Воспроизведение звука с помощью системного динамика

• Использование компонента MediaPlayer

• Компонент Animate

• Разработка звукового проигрывателя

• Видеопроигрыватель


Использование мультимедийных технологий позволяет повысить качество программ и придает им профессиональный, более привлекательный для пользователя, вид. Среди множества областей применения мультимедиа наиболее интересны аудио– и видеовозможности компьютера. Использование звуков и видео в программах позволяет иным образом взаимодействовать с пользователем: озвучивать его действия, информировать о различных событиях, просматривать видеоролики и т. п.

В рамках этой главы будут рассмотрены основные возможности мультимедийных средств и компонентов среды Delphi. Будут описаны компоненты Animate и MediaPLayer, способы использования API-функций для генерации звука системным динамиком и воспроизведения звука из ресурсных файлов.

В отличие от языков Turbo Pascal и Borland Pascal, Delphi не содержит процедур типа Sound или NoSound, предназначенных для работы со звуком. Для использования мультимедийных возможностей компьютера в Delphi служат специальные компоненты Animate и MediaPLayer.

Компонент MediaPLayer является основным элементом воспроизведения аудио– и видеофайлов. Многофункциональный элемент MediaPLayer обладает рядом возможностей и обеспечивает управление мультимедийными устройствами.

Для создания и воспроизведения простейшей анимации предназначен компонент Animate. Он позволяет воспроизводить файлы в формате AVI (Audio-Video Interleaved – аудио-и видеосмесь).

Воспроизведение звука с помощью системного динамика

Звуковое сопровождение является важной частью большинства современных мультимедийных приложений. В простейших случаях для генерации звукового сигнала достаточно использовать процедуру Beep модуля SysUtils. В этом случае отсутствует необходимость использовать компоненты Animate и MediaPLayer, а звук создается встроенным системным динамиком. Процедура Beep осуществляет вызов одноименной API-функции, поэтому ее использование не составляет большого труда (листинг 5.1).

Листинг 5.1. Генерация звукового сигнала посредством функции Beep

procedure TForm1.Button1Click(Sender: TObject);

begin

Beep; //Генерация иязвукового огосигнала

MessageDlg(‘Звуковой сигнал был подан' , mtError, [mbOK], 0);

end;


Наряду с функцией Beep для получения звукового сигнала используется API-функция MessageBeep(uType: UINT): Boolean, генерирующая стандартный системный звук, тип которого указывается параметром uType. Параметр функции MessageBeep может задаваться двумя способами: в виде шестнадцатеричного числа и поименованной константы. Например, системный звук по умолчанию задается константой MB_OK, а стандартный системный звук задается шестнадцатеричным числом $FFFFFFFF. Функция возвращает параметр типа Boolean, который в случае успешного выполнения (воспроизведения звука) имеет значение True.

Использование компонента MediaPlayer

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

Компонент MediaPlayer содержит следующие кнопки (рис. 5.1, слева направо).

• Play – воспроизведение.

• Pause – пауза.

• Stop – остановка.

• Next – переход к следующей фонограмме (дорожке). Если в списке воспроизведения присутствует всего одна фонограмма, то выполняется переход в ее конец.

• Prev – переход к предыдущей фонограмме. Если в списке воспроизведения присутствует всего одна фонограмма, то выполняется переход в ее начало.

• Step – переход на несколько кадров вперед.

• Back – переход на несколько кадров назад.

• Record – включение режима записи.

• Eject – извлечение носителя.

Рис. 5.1. Вид компонента MediaPlayer


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

• AutoOpen – определяет, должно ли устройство автоматически открываться после загрузки.

• AutoRewind – если свойство имеет значение True, то после завершения списка воспроизведения будет осуществлен переход в его начало.

• DeviceType – определяет тип устройства, которым должен управлять объект MediaPlayer. Свойство принимает одно из следующих значений:

· dtAVIVideo – файл AVI;

· dtCDAudio – аудио компакт-диски;

· dtDAT – цифровой кассетный аудиопроигрыватель;

· dtDigitalVideo – цифровое видео (AVI, MPG, MOV-файлы или ММ-фильм);

· dtMMMovie – формат multimedia movie;

· dtOther – неопределенный формат;

· dtSequencer – MIDI-файл;

· dtVCR – видеомагнитофон;

· dtVideodisc – проигрыватель видеодисков;

· dtWaveAudio – звуковой файл типа WAV;

· dtAutoSelect – компонент выбирает устройство автоматически (устанавливается по умолчанию).

• Display – задает оконный элемент, в котором будут воспроизводиться видеоданные. Если свойство не задано, то будет открываться новое дополнительное окно.

• DisplayRec – задает прямоугольную область для воспроизведения данных.

• EnableButtons – определяет набор командных кнопок, которые можно использовать в компоненте.

• StartPos – определяет начальную позицию для воспроизводимых данных. Если свойство не задано, то воспроизведение идет с начала.

• EndPos – определяет конечную позицию для воспроизведимых данных. Если свойство не задано, то воспроизведение идет до конца.

• Position – текущая позиция при воспроизведении.

• Tracks – определяет количество дорожек для компакт-дисков.

• Frames – определяет число кадров, на которое перемещается позиция устройства при вызове методов Back и Next.

• Length – длина файла (носителя).

• TimeFormat – устанавливает временной формат, используемый конкретным устройством.

• Wait – определяет, будет управление возвращено вызывающему приложению немедленно или после завершения воспроизведения.

Одним из важных свойств является свойство Capabilities типа TMPDevCapsSet, которое позволяет определить возможности выбранного и открытого устройства. Это свойство может принимать следующие значения, определяющие доступность соответствующих операций:

• mpCanEject – извлечение носителя;

• mpCanPlay – воспроизведение;

• mpCanRecord – запись на носитель;

• mpCanStep – перемотка вперед или назад на определенное количество кадров;

• mpUsedWindow – использование окна для вывода изображения.

Перед использованием устройства его нужно открыть, поскольку большинство методов, например, Play и StartRecording, можно вызвать только после открытия устройства. Открытие выполняется путем вызова метода Open (листинг 5.2). Если необходимо выполнить автоматическое открытие устройства, то свойству AutoOpen типа Boolean следует присвоить значение True (по умолчанию ему присвоено значение False). После открытия какого-либо мультимедийного устройства свойство DeviseID типа Word проигрывателя будет содержать идентификатор открытого устройства. Если открытых устройств нет, то значение свойства DeviseID будет равно 0.

Листинг 5.2. Открытие устройства проигрывания компакт-дисков

procedure TForm1.Button2Click(Sender: TObject);

begin

//Задаем устройства воспроизведения

MyMediaPlayer.DeviceType:= dtCDAudio;

//Открываем устройство

MyMediaPlayer.Open;

end;


После использования мультимедийного устройства его нужно закрыть, вызвав метод Close.

Открыв устройство с помощью свойства Tracks типа Longint, можно получить информацию о количестве фонограмм (дорожек). Если устройство не поддерживает дорожки, то значение этого свойства не определено. Свойство TrackLength [TrackNum: Integer] типа Longint содержит длину фонограммы с индексом TrackNum (отсчет начинается с единицы). Длина дорожки указывается в формате времени, заданным свойством TimeFormat.

Свойство TimeFormat типа TMPTimeFormats задает формат значений свойств, которые связаны со временем. Это свойство влияет на способ интерпретации и отображение значений таких свойств, как TrackLength, Length, StartPos, EndPos и Position. Основными значениями свойства TimeFormat являются следующие:

• tfMilliseconds – целое четырехбайтовое число (счетчик миллисекунд);

• tfHMS – количество часов, минут и секунд, размещенных побайтно, начиная с младшего байта, в четырехбайтовом целом (старший байт не учитывается);

• tfMSF – количество минут, секунд и кадров, размещенных побайтно, начиная с младшего байта, в четырехбайтовом целом (старший байт не учитывается);

• tfFrames – целое четырехбайтовое число, содержащее количество кадров.

Теперь, когда вы ознакомились с основными свойствами мультимедиа-компонента MediaPlayer, можно приступать к непосредственному применению его на практике. Ниже представлен пример исходного текста программы, при загрузке которой проигрывается звук (в формате WAV) (листинг 5.3).

Листинг 5.3. Воспроизведение звука при создании формы приложения

//Функция вызывается при создании формы

procedureTForm1. FormCreate (Sender: TObject);

begin

//Скрываем компонент

MyMediaPlayer.Visibleee:= false;

//Автоматически определяем устройство воспроизведения

MyMediaPlayer.DeviceType:= dtAutoSelect;

//Загружаем файл воспроизведения

MyMediaPlayer.FileName:= ‘start.wav’;

//Открываем устройство

if not MyMediaPlayer.AutoOpen then MyMediaPlayer.Open;

//Воспроизводим файл

MyMediaPlayer.Play;

end


При создании формы Form1 воспроизводится звуковой файл start.wav.

В некоторых случаях удобнее хранить и использовать данные (например, звуковые записи) прямо в запускаемом модуле (EXE-файле). Такой метод предусматривает хранение звука в файлах ресурсов (RES). На этапе сборки программы файлы ресурсов прикрепляются к запускаемому модулю, тем самым увеличивая размер модуля, но количество файлов, необходимых для корректной работы программы, уменьшается. Так, в предыдущем примере для нормальной работы программы (воспроизведения звука при загрузке) необходим файл start. wav. Следующий пример демонстрирует создание приложения, запускаемый модуль которого будет содержать все необходимые ресурсы (в данном случае это звуковой файл).

В начале необходимо создать файл ресурса, который будет содержать звуковую запись. Для этого понадобится компилятор ресурсов, который находится в папке BorlandDelphi7Binи имеет имя brcc32.exe. Далее нужно создать файл ресурса. Все ресурсы (значки, указатели, изображения, таблицы строк и т. п.), используемые приложением, описываются в специальном файле. Такое описание имеет фиксированный формат:


<имя> <тип> <параметры> <имя файла>


Имя – это уникальное имя ресурса, которое используется в процедурах работы с ресурсами. Имя файла – строка, содержащая путь к файлу. В рассматриваемом случае строка, описывающая ресурс (звуковой файл в формате wav), имеет следующий вид:


LOADSOUND RCDATA LOADONCALL start.wav


Далее в командной строке нужно записать brcc32.exe source.rc, где source. rc – текстовый файл, содержащий описание ресурса.

После компиляции получается готовый файл ресурса source. res. Переместите его в папку проекта. На этом этапе ресурс уже может использоваться для сборки приложения.

Чтобы подключить файл ресурса, напишите в исходном тексте программы следующее:


//Подключение ресурса

{$R SOURCE.RES}


Теперь, когда файл ресурса подключен и готов к использованию, необходимо создать процедуру, которая будет загружать звуковой файл из ресурса и воспроизводить его. Процедура, выполняющая эти действия, выглядит следующим образом (листинг 5.4).

Листинг 5.4. Использование ресурсов для хранения звуковых записей

//Функция, которая воспроизводит звук, находящийся в ресурсе

procedure RetrieveLoadSound;

var

hResource: THandle;

pData: Pointer;

begin

//Загружаем файл ресурса и находим звук под именем 'LOADSOUND'

hResource:= LoadResource(hInstance, FindResource(hInstance, 'LOADSOUND', RT_RCDATA));

try

//Находим адрес загруженного ресурса

pData:= LockResource(hResource);

if pData = nil then raise Exception.Create('Ошибка чтения ресурса LOADSOUND');

//Воспроизводим звуковой файл

sndPlaySound(pData, SND_MEMORY);

finally

//Освобождаем ресурс

FreeResource(hResource);

end;

end;


Для работы функции RetrieveLoadSound понадобятся две переменные: hResource (дескриптор ресурса) и pData (указатель на память, расположение ресурса). Прежде чем приступить к непосредственному использованию, необходимо загрузить ресурс в память приложения (функция LoadResource), но, чтобы загрузить именно тот ресурс, который необходим (звук LOADSOUND), с помощью функции FindResource найдите LOADSOUND во всех ресурсах, подключенных к этому экземпляру приложения (hInstance). Теперь осталось получить указатель на память, в которой находится звуковой файл, и записать его в переменную pData. Если ресурс не будет найден, то программа выдаст сообщение об ошибке. После того как будет получен указатель на память, его можно будет использовать в функции sndPlaySound для воспроизведения звука. Параметр SND_MEMORY означает, что воспроизведение будет осуществляться из памяти приложения (а не из файла, как было показано ранее).

Функция RetrieveLoadSound может использоваться в любом месте программы для воспроизведения файла start.wav. При ее использовании данные звукового файла помещаются в запускаемый модуль, тем самым увеличивая его объем, но сокращая количество файлов приложения. Такой подход эффективен при создании небольших приложений, которые используют короткие звуковые сопровождения.

В конце главы будет подробно описан процесс создания универсального проигрывателя, работа которого целиком построена на использовании компонента MediaPLayer. Пока же рассмотрим следующий мультимедийный компонент Delphi – Animate, который позволяет воспроизводить как стандартную (встроенную в Windows), так и пользовательскую анимацию.

Компонент Animate

Видеоклип представляет собой файл в формате AVI, содержащий последовательность отдельных кадров, при отображении которых создается эффект движения. Наряду с изображением AVI-файлы могут содержать и звук. Для воспроизведения видеоклипов можно использовать любой из мультимедийных компонентов Delphi – Animate или MediaPLayer.

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

• они не могут содержать звука;

• информация в них должна быть несжатой;

• размер файла не должен превышать 64 Кбайт.

Для определения воспроизводимого видеоклипа используются свойства FileName и CommonAVI, которые не могут использоваться одновременно. Проигрываемый AVI-файл, расположенный на диске, указывается с помощью свойства FileName, при этом свойству CommonAVI автоматически присваивается значение aviNone.

Свойство CommonAVI позволяет выбрать один из стандартных клипов Windows и принимает следующие значения:

• aviNone – стандартная анимация отсутствует;

• aviCopyFile – копирование файла;

• aviCopyFiles – копирование файлов;

• aviDeleteFile – удаление файла;

• aviEmptyRecycle – очистка Корзины;

• aviFindComputer – поиск компьютера;

• aviFindFile – поиск файла;

• aviFindFolder – поиск папки;

• aviRecycleFile – перемещение файла в Корзину.

При назначении свойству CommonAVI значения, отличного от aviNone, свойство FileName автоматически очищается, принимая в качестве значения пустую строку.

Для воспроизведения видеоклипа также можно использовать свойства ResHandle типа THandle и ResID типа Integer, которые составляют альтернативу свойствам CommonAVI и FileName. Значение свойства ResHandle содержит ссылку на модуль, содержащий изображение в виде ресурса, а значение свойства ResID в этом модуле содержит номер ресурса.

После выбора видеоклипа свойства FrameCount, FrameHeight и FrameWidth типа Integer определяют количество, высоту и ширину кадров (в пикселах) клипа соответственно. Эти свойства являются свойствами времени выполнения и, следовательно, доступны только для чтения.

По умолчанию размеры компонента Animate автоматически подстраиваются под размеры кадров видеоклипа, что определяется свойством AutoSize, имеющим значение True. Если этому свойству присвоить значение False, то отсечение части кадра изображения будет возможно, если его размеры превысят размеры компонента Animate.

Воспроизведение видеоклипа начинается при установке свойству Active значения True. Первый и последний кадры определяют диапазон воспроизведения и определяются значениями свойств StartFrame и StopFrame типа SmallInt соответственно. По умолчанию свойство StartFrame указывает на первый кадр анимации и его значение равно 1.

Свойство Repetitions типа Integer определяет количество повторений воспроизведения видеоклипа. По умолчанию его значение равно нулю, при котором видеоклип проигрывается до тех пор, пока процесс воспроизведения не будет остановлен (например, при закрытии приложения).

Для запуска и остановки воспроизведения клипов можно использовать методы Play, Stop и Reset. Процедура Play (FromFrame: Word, ToFrame: Word, Count: Integer) проигрывает видеоклип, начиная с кадра, заданного параметром FromFrame, и заканчивая кадром, заданным параметром ToFrame. Параметр Count определяет количество повторений. Таким образом, процедура Play позволяет одновременно управлять свойствами StartFrame, StopFrame и Repetitions, задавая для них требуемые при воспроизведении значения, а также устанавливает свойство Active в значение True.

Свойство Open типа Boolean доступно при выполнении программы и позволяет определить, готов ли компонент Animate к воспроизведению. Если выбор и загрузка видеоклипа выполнены успешно, то свойству Open автоматически устанавливается значение True (компонент можно открыть и воспроизвести анимацию). При неуспешной загрузке видеоклипа это свойство получает значение False. При необходимости программист может сам присваивать свойству Open значение False, тем самым отключая компонент Animate.

Процедура Stop прерывает воспроизведение видеоклипа и присваивает свойству Active значение False. Процедура Reset, кроме того, дополнительно сбрасывает свойства StartFrame и StopFrame, устанавливая им значения по умолчанию (первый и последний кадры воспроизводимой анимации).

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

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

Рис. 5.2. Приложение для просмотра стандартной анимации


Рассмотрим исходный текст приложения подробно. Для работы программы необходим набор констант, значения которых может принимать свойство CommonAVI, поэтому в начале программы нужно объявить константный массив Typeof AVI типа TCommonAVI, который и будет содержать необходимые значения:


const TypeofAVI: array[0..8] of TCommonAVI =

(aviNone, aviCopyFile, aviCopyFiles,

aviDeleteFile, aviEmptyRecycle, aviFindComputer,

aviFindFile, aviFindFolder, aviRecycleFile);


При создании главного окна приложения определите положение переключателя в группе выбора стандартной анимации Windows:


procedure TFormViewAnim.FormCreate(Sender: TObject);

begin

//Стандартная анимация “Копирование файла ”

RadioGroupSelectAnimEffects.ItemIndex:= 1;

end;


Затем создайте обработчик выбора группы независимых переключателей. При выборе анимации первым делом устанавливается доступность кнопок управления. Далее задается вид воспроизводимого ролика (например Копирование файлов). В блоке if производится проверка индекса выбранной анимации и, если она не выбрана (индекс равен нулю), блокируется кнопка Просмотр, так как в этом случае просмотр стандартной анимации невозможен (листинг 5.5).

Листинг 5.5. Обработчик выбора анимационных роликов

//Выбор стандартной анимации

procedure TFormViewAnim.RadioGroupSelectAnimEffectsClick(Sender: TObject);

begin

//Устанавливаем доступность кнопок управления

bnStopView.Enabled:= False;

bnStartView.Enabled:= True;

//Устанавливаем значение свойства CommonAVI

StandartAnimate.CommonAVI:= TypeofAVI[RadioGroupSelectAnimEffects.ItemIndex];

//Если анимация не выбрана, делаем недоступной кнопку старта показа

if RadioGroupSelectAnimEffects.ItemIndex = 0

then bnStartView.Enabled:= False

else bnStopView.Enabled:= True;

end;


Значения индексов (RadioGroupSelectAnimEffects.ItemIndex) переключателей соответствуют порядковым номерам в массиве TypeofAVI, который содержит возможные значения свойства CommonAVI.

При нажатии кнопки начала показа производится вызов метода Play, компонента Animate и устанавливается доступность кнопок управления показом:


//Старт показа

procedure TFormViewAnim.bnStartViewClick(Sender: TObject);

begin

//Начинаем показ выбранной анимации

StandartAnimate.Play(1, StandartAnimate.FrameCount, 0);

bnStartView.Enabled:= False;

bnStopView.Enabled:= True;

end;


Обработчик кнопки Стоп основан на вызове метода Stop компонента Animate и выглядит следующим образом:


procedure TFormViewAnim.bnStopViewClick(Sender: TObject);

begin

//Остановка показа анимации

StandartAnimate.Stop;

bnStartView.Enabled:= True;

bnStopView.Enabled:= False;

end;


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

Компонент Animate обеспечивает воспроизведение только простых AVI-файлов. С этой же целью можно использовать компонент MediaPlayer, который, с функциональной точки зрения, значительно сложнее и обеспечивает больше мультимедийных возможностей.


Страницы книги >> Предыдущая | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Следующая
  • 0 Оценок: 0

Правообладателям!

Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.


Популярные книги за неделю


Рекомендации