Відтворення звуку

Звукові фрагменти знаходяться в файлах з розширенням WAV. Наприклад, в каталозі C:\ Winnt \ Media можна знайти файли зі стандартними звуками Windows.
Наступна програма (Вид її діалогового вікна приведений на рис. 11.6, а текст – в лістингу 11.2) демонструє використання компонента ediaPiayer для відтворення звукових фрагментів, знаходяться в WAV-файлах.
Крім компонента MediaPiayer на формі знаходиться компонент ListBox і два компонента Label, перший з яких використовується для виведення інформаційного повідомлення, другий – для відображення імені WAV-файлу, обраного користувачем зі списку.
Працює програма наступним чином. Після появи діалогового вікна відтворюється ” Звук Microsoft “, потім користувач може зі списку вибрати будь-який з пасажирів в каталозі C: \ Windows \ Media звукових файлів і після клацання на кнопці Відтворення почути, що знаходиться в цьому файлі.

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

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

Таблиця 11.6. Значення властивостей компонента MediaPlayer1

Компонент Значення
  DeviceType DtAutoSelect
FileName C: \ Winnt \ Media \ 3вук Microsoft.wav
AutoOpen True
 VisibleButtons. btNext False
VisibleButtons .btPrev False
VisibleButtons. btStep False
VisibleButtons. btBack False
VisibleButtons. btRecord False
VisibleButtons .btEject False

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

unit WinSound_; interface
uses
Windows, Messages, SysUtils,

Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer;
type
TForm1 = class (TForm)
MediaPlayerl: TMediaPlayer; // медіаплеєр
Label1: TLabel; // інформаційне повідомлення
ListBox1: 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 = 'з: \ winnt \ media \'; // положення звукових файлів

var
Form1: TForm1;
implementation
{$ R * .DFM}
procedure TForm1.FormActivate (Sender: TObject);

var
SearchRec: TSearchRec; // структура, що містить інформацію про фото,
// задовольняє умові пошуку

begin
Form1.MediaPlayer1.Play ;
// сформуємо список WAV-файлів, що знаходяться
// в каталозі c: \ winnt \ media
if FindFirst (SOUNDPATCH + '*. Wav', faAnyFile, SearchRec) = 0 then
begin
// в каталозі є файл з розширенням WAV
// додамо ім'я цього файлу в список
Form1.ListBox1.Items.Add (SearchRec.Name) ;
// поки в каталозі є інші файли з розширенням WAV
while (FindNext (SearchRec) = 0) do
Form1.ListBox1.Items.Add (SearchRec.Name);

end;

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

end;
// клацання на кнопці компонента Media Player
procedure TForm1.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; // відкрити і програти звуковий файл

end;

end;

end;
end.

Відтворення звуку відразу після запуску програми активізує процедура обробки події onFormActivate шляхом застосуванням методу Play до компоненту MediaPlayerl (дія цього методу аналогічно кліку на кнопці Відтворення). Ця ж процедура формує список WAV-файлів, що знаходяться в каталозі C: ??\ Winnt \ Media. Для формування списку використовуються функції FindFirst і FindNext, які, відповідно, виконують пошук першого і наступного (по відношенню до останнього, знайденого функцією FindFirst або FindNext) файлу, що задовольняє вказаним при виклику функцій критерієм. Обом функцій в якості параметрів передаються маска WAV-файлу (критерій пошуку) і змінна – структура searchRec, поле Name якій в разі успішного пошуку буде містити ім’я файлу, що задовольняє критерієм пошуку.

Клацання на елементі списку обробляється процедурою TForm1.ListBox1Click, яка виводить в поле мітки Label2 ім’я файлу, обраного користувачем (під час роботи програми властивість ItemIndex містить номер елемента списку на якому виконаний клацання).
В результаті клацання на одній з кнопок компонента MediaPiayeri активізується процедура TForm1.MediaPiayer1Сlick, яка перевіряє, яка з кнопок компонента була натиснута. Якщо натиснута кнопка Відтворення (btPlay), то в властивість FileName компонента MediaPiayeri записується ім’я обраного користувачем файлу, потім метод open завантажує цей файл і активізує процес його відтворення.

Наявність у компонента MediaPiayer властивості visible дозволяє приховати компонент від користувача і при цьому застосовувати його для відтворення звуку без участі користувача. наприклад, наступна програма перераховує вагу з фунтів в кілограми і супроводжує видачу результату звуковим сигналом. У разі, якщо користувач забуде ввести вихідні дані або введе їх невірно, програма виведе повідомлення про помилку, також супроводжується звуковим сигналом. Вид діалогового вікна програми під час її розробки наведено на рис. 11.7, значення властивостей компонента MediaPlaer в табл. 11.7. Текст модуля програми наведений у лістингу 11.3.

 

Рис. 11.7. Діалогове вікно програми фунти-кілограми

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

Властивість Значення
Name DeviceType MediaPiayer1
FileName dtAutoSelect з: \ winnt \ media \ ding . wav
AutoOpen True
Visible False

 

Лістинг 11.3. Використання компонента MediaPlayer для виведення звуку

unit FuntToKg1_; interface
uses
Windows, Messages, SysUtils,

Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls, MPlayer;
type
TForm1 = class (TForm)
Edit1: TEdit; // поле введення ваги у фунтах
Button1: TButton; // кнопка Перерахунок
Label2: TLabel; // поле виведення результату
Label1: TLabel; // поле інформаційного повідомлення
MediaPlayer1: TMediaPlayer; // медіаплеєр
procedure Button1Click (Sender: TObject);

private
{ Private declarations}

public
{ Public declarations}

end;
var
Form1: TForm1;
implementation
{$ R * .DFM)
// клацання на кнопці Перерахунок
procedure TForm1.ButtonlClick (Sender: TObject);
var
f: real; // вагу в фунтах k: real; // вагу в кілограмах

begin
form1.Label2.Caption: = '';
try // можлива помилка, якщо в поле
// Edit1 буде не число

f: = StrToFloat (Edit1.Text);
Forml.MediaPlayer1.Play;

// звуковий сигнал k: = f * 0.4095;

Label2.caption: = Editl.text + ' ф. - це '+
FloatToStrF (k, ffGeneral, 4,2} + ' кг. ';

except
on EConvertError do // помилка перетворення

begin
// визначимо і програємо звук & quot; Помилка & quot;
Form1.MediaPlayer1.FileName: =

'c: \ windows \ media \ chord.wav';

Form1.MediaPlayer1.Open;
Form1.MediaPlayer1.Play; // звуковий сигнал

ShowMessage ( 'Помилка! Вага слід ввести числом. ');

form1.Edit1.SetFocus; // курсор в поле вводу

// відновимо звук
Forml.MediaPlayer1.FileName: =

'c: \ windows \ media \ ding.wav';

Forml.MediaPlayer1.Open;

end;

end;

end;

end.