Звуковые фрагменты находятся в файлах с расширением wav. Например, в каталоге C:\Windows\Media можно найти стандартные звуковые файлы Windows.

Следующая программа, вид ее диалогового окна приведен на рис. 11.6, а текст - в листинге 11.2, демонстрирует использование компонента MediaPlayer для воспроизведения звукового фрагмента, находящегося в WAV-файле.

Рис. 11.6. Окно программы Звуки Microsoft Windows

Помимо компонента MediaPlayer на форме находится компонент ListBox и два компонента Label, первый из которых используется для вывода информационного сообщения, второй - для отображения имени WAV-файла, выбранного пользователем из списка.

Работает программа следующим образом. После появления диалогового окна воспроизводится "Звук Microsoft" (проигрывается Microsoft.wav), затем пользователь может из списка выбрать любой из находящихся в каталоге C:\Windows\Media звуковых файлов и нажатием на кнопку Воспроизведение услышать, что находится в этом файле.

Значения измененных свойств компонента MediaPlayerl приведены в табл. 11.6, значения остальных свойств оставлены без изменения.

Таблица 11.6. Свойства компонента MediaPlayerl

Компонент

Значение

Name

MediaPlayerl

DeviceType

DtWaveAudio

FileName

С:Windows\Media\3ByK Microsoft.wav

AutoOpen

True

Таблица 11.6 (окончание)

Компонент

VisibleButtons.btNext

Значение

False

VisibleButtons.BtPrev

False

VisibleButtons.btStep

False

VisibleButtons.btBack

False

VisibleButtons.btRecord

False

VisibleButtons.btEject

False

i Листинг 11.2. Программа Звуки Microsoft Windows

unit WinSound_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer;

type TForml = class(TForm) MediaPlayerl: TMediaPlayer; // медиаплейер

Labell: TLabel; // информационное сообщение

ListBoxl: TListBox; // список WAV-файлов

Label2: TLabel; // выбранный из списка файл

procedure FormActivate(Sender: TObject);
procedure ListBoxlClick(Sender: TObject);
procedure MediaPlayerlClick(Sender: TObject;
Button: TMPBtnType;
var DoDefault: Boolean);
private { Private declarations } public

{ Public declarations } end;

const

SOUNDPATCH='с:\windows\media\'; // положение звуковых файлов var Forml: TForml; implementation

{$R *.DFM} procedure TForml. ForroActivate (Sender: TObject); var SearchRec: TSearchRec; // структура, содержащая информацию

// о файле, удовлетворяющем условию поиска

begin
Forml.MediaPlayerl.Play;

// сформируем список WAV-файлов, находящихся // в каталоге c:\windows\media

if FindFirst(SOUNDPATCH+'*.wav', faAnyFile, SearchRec) =0 then begin // в каталоге есть файл с расширением wav

// добавим имя этого файла в список

Forml.ListBoxl.Items.Add(SearchRec.Name);

// пока в каталоге есть другие файлы с расширением wav

while (FindNext(SearchRec) = 0) do
Forml.ListBoxl.Items.Add(SearchRec.Name);
end;
end;

// щелчок на элементе списка

procedure TForml.ListBoxlClick(Sender: TObject);
begin
// вывести в поле метки Label2 имя выбранного файла Label2.Caption:=ListBoxl.Items[ListBoxl.itemlndex];
end;

// щелчок на кнопке компонента MediaPlayer

procedure TForml.MediaPlayerlClick(Sender: TObject;
Button: TMPBtnType;
var DoDefault: Boolean);
begin
if (Button = btPlay) and (Label2.Caption <> ") then begin
// нажата кнопка Play with MediaPlayerl do begin
FileName:=SOUNDPATCH+Label2.Caption; // имя выбранного файла Open; // открыть звуковой файл Play; // проиграть звуковой файл end;
end;
end;
end.

Воспроизведение звука сразу после запуска программы активизирует процедура обработки события onFormActivate путем применения метода Play к компоненту MediaPiayeri (действие этого метода аналогично нажатию на кнопку Воспроизведение). Эта же процедура формирует список WAV-файлов, находящихся в каталоге C:\Windows\Media. Для формирования списка используются функции FindFirst и FindNext, которые выполняют поиск соответственно первого и следующего (по отношению к последнему, найденному функцией FindFirst или FindNext) файла, удовлетворяющего указанному при вызове функций критерию. Обеим функциям в качестве параметров передаются маска WAV-файла (критерий поиска) и переменная-структура searchRec, поле Name которой в случае успешного поиска будет содержать имя файла, удовлетворяющего критерию поиска.

Щелчок на элементе списка обрабатывается процедурой TFormi. ListBoxiciick, которая выводит в поле метки Labei2 имя файла, выбранного пользователем (во время работы программы свойство itemindex содержит номер элемента списка, на котором выполнен щелчок).

В результате нажатия одной из кнопок компонента MediaPiayeri активизируется процедура TFormi .MediaPiayericiick, которая проверяет, какая из кнопок компонента была нажата. Если нажата кнопка Воспроизведение (btPlay), то в свойство Name записывается имя выбранного пользователем файла, затем, вызовом метода open, данный файл открывается. После этого метод Play активизирует воспроизведение WAV-файла.

Наличие у компонента MediaPlayer свойства visible позволяет скрыть компонент от пользователя и при этом использовать его для воспроизведения звука без участия пользователя. Например, следующая программа пересчитывает вес из фунтов в килограммы и сопровождает выдачу результата звуковым сигналом. В случае, если пользователь забудет ввести исходные данные или введет их неверно, программа выводит сообщение об ошибке, также сопровождаемое звуковым сигналом. Вид диалогового окна программы во время ее разработки приведен на рис. 11.7, значения свойств компонента MediaPiayeri - в табл. 11.7. Текст модуля программы представлен в листинге 11.3.

Рис. 11.7. Диалоговое окно программы

Таблица 11.7. Значения свойств компонента Media Player l

Свойство

Значение

Name

MediaPlayerl

DeviceType

DtWaveAudio

FileName

c: \windows\media\ding.wav

AutoOpen

True

Visible

False

j Листинг 11.3. Использование MediaPiayer для вывода звука

unit FuntToKgl_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer;

type TForml = class(TForm) Editl: TEdit; // поле ввода веса в фунтах

Buttonl: TButton; // кнопка Пересчет

Label2: TLabel; // поле вывода результата

Labell: TLabel; // поле информационного сообщения

MediaPlayerl: TMediaPlayer; // медиаплейер

procedure ButtonlClick(Sender: TObject);
private { Private declarations } public

{ Public declarations } end;

var Forml: TForml; implementation

{$R *.DFM} // щелчок на кнопке Пересчет

procedure TForml.ButtonlClick(Sender: TObject);
var
f: real; // вес в фунтах к: real; // вес в килограммах begin
forml.Label2.Caption : = ''; try // возможна ошибка, если в поле // Editl будет не число f:=StrToFloat(Editl.Text);
Forml.MediaPlayerl.Play; // звуковой сигнал k:=f*Û.4Û95;

label2.caption:=Editl.text+' ф. - это ' +

FloatToStrF(k,ffGeneral,4/2)+' кг.

except

on EConvertError do // ошибка преобразования begin // определим и проиграем звук "Ошибка"

Forml.MediaPlayerl.FileName:='с:\windows\media\chord.wav'; Forml.MediaPlayerl.Open;

Forml.MediaPlayerl.Play; // звуковой сигнал ShowMessage('Ошибка ! Вес следует ввести числом.'); forml.Editl.SetFocus; // курсор в поле ввода // восстановим звук

Forml.MediaPlayerl.FileName:='с:\windows\media\ding.wav'; Forml.MediaPlayerl.Open;
end;
end;
end; end.

Компонент MediaPlayer || Оглавление || Запись звука


Delphi 6. Программирование на Object Pascal



Новости за месяц

  • Ноябрь
    2018
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс