Звукові фрагменти знаходяться в файлах з розширенням 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.