Skip to Content

Воспроизведение звука

Воспроизведение звука

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

  1. unit WinSound_;
  2. interface
  3.  
  4. uses
  5. Windows, Messages, SysUtils,
  6. Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, MPlayer;
  8.  
  9. type
  10.  
  11. TForm1 = class(TForm)
  12. MediaPlayerl: TMediaPlayer; // медиаплеер
  13. Label1: TLabel; // информационное сообщение
  14. ListBox1: TListBox; // список WAV-файлов
  15. Label2: TLabel; // выбранный из списка файл
  16.  
  17. procedure FormActivate(Sender: TObject);
  18. procedure ListBoxlClick(Sender: TObject);
  19. procedure MediaPlayerlClick(Sender: TObject; Button: TMPBtnType;
  20. var DoDefault: Boolean);
  21.  
  22. private
  23. { Private declarations }
  24. public
  25. { Public declarations }
  26. end;
  27.  
  28. const
  29.  
  30. SOUNDPATCH='с:\winnt\media\'; // положение звуковых файлов
  31.  
  32. var
  33. Form1: TForm1;
  34.  
  35. implementation
  36. {$R *.DFM}
  37.  
  38. procedure TForm1.FormActivate(Sender: TObject);
  39. var
  40.  
  41. SearchRec: TSearchRec; // структура, содержащая информацию о файле,
  42.  
  43. // удовлетворяющем условию поиска
  44.  
  45. begin
  46.  
  47. Form1.MediaPlayer1.Play ;
  48.  
  49. // сформируем список WAV-файлов, находящихся
  50. // в каталоге c:\winnt\media
  51.  
  52. if FindFirst(SOUNDPATCH+'*.wav', faAnyFile, SearchRec) =0 then
  53. begin
  54.  
  55. // в каталоге есть файл с расширением WAV
  56. // добавим имя этого файла в список
  57.  
  58. Form1.ListBox1.Items.Add(SearchRec.Name) ;
  59.  
  60. // пока в каталоге есть другие файлы с расширением WAV
  61.  
  62. while (FindNext(SearchRec) = 0) do
  63.  
  64. Form1.ListBox1.Items.Add(SearchRec.Name);
  65.  
  66. end;
  67. end;
  68.  
  69. // щелчок на элементе списка
  70.  
  71. procedure TForm1.ListBoxlClick(Sender: TObject);
  72. begin
  73.  
  74. // вывести в поле метки Label2 имя выбранного файла
  75.  
  76. Label2.Caption:=ListBox1.Items[Box1.itemlndex];
  77.  
  78. end;
  79.  
  80. // щелчок на кнопке компонента Media Player
  81.  
  82. procedure TForm1.MediaPlayerlClick(Sender: TObject; Button: TMPBtnType;
  83. var DoDefault: Boolean);
  84. begin
  85.  
  86. if (Button = btPlay) and (Label2.Caption <> '') then
  87. begin
  88.  
  89. // нажата кнопка Play
  90.  
  91. with MediaPlayerl do begin
  92. FileName:=SOUNDPATCH+Label2.Caption; // имя выбранного файла
  93. Open; // открыть и проиграть звуковой файл
  94.  
  95. end;
  96. end;
  97. end;
  98.  
  99. 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 для вывода звука

  1. unit FuntToKg1_;
  2. interface
  3.  
  4. uses
  5. Windows, Messages, SysUtils,
  6. Classes, Graphics, Controls,
  7. Forms, Dialogs, StdCtrls, MPlayer;
  8.  
  9. type
  10.  
  11. TForm1 = class(TForm)
  12. Edit1: TEdit; // поле ввода веса в фунтах
  13. Button1: TButton; // кнопка Пересчет
  14. Label2: TLabel; // поле вывода результата
  15. Label1: TLabel; // поле информационного сообщения
  16. MediaPlayer1: TMediaPlayer; // медиаплеер
  17.  
  18. procedure Button1Click(Sender: TObject);
  19.  
  20. private
  21. { Private declarations }
  22. public
  23. { Public declarations }
  24. end;
  25.  
  26. var
  27. Form1: TForm1;
  28.  
  29. implementation
  30. {$R *.DFM)
  31.  
  32. // щелчок на кнопке Пересчет
  33.  
  34. procedure TForm1.ButtonlClick(Sender: TObject);
  35. var
  36.  
  37. f: real; // вес в фунтах
  38. k: real; // вес в килограммах
  39.  
  40. begin
  41.  
  42. form1.Label2.Caption: =' ';
  43.  
  44. try // возможна ошибка, если в поле
  45.  
  46. // Edit1 будет не число
  47.  
  48. f:=StrToFloat(Edit1.Text);
  49. Forml.MediaPlayer1.Play;
  50.  
  51. // звуковой сигнал k:=f*0.4095;
  52.  
  53. Label2.caption:=Editl.text+' ф. - это ' +
  54. FloatToStrF(k,ffGeneral,4,2}+' кг. ';
  55.  
  56. except
  57.  
  58. on EConvertError do // ошибка преобразования
  59.  
  60. begin
  61.  
  62. // определим и проиграем звук "Ошибка"
  63.  
  64. Form1.MediaPlayer1.FileName:=
  65. 'c:\windows\media\chord.wav';
  66.  
  67. Form1.MediaPlayer1.Open;
  68. Form1.MediaPlayer1.Play; // звуковой сигнал
  69.  
  70. ShowMessage('Ошибка! Вес следует ввести числом.');
  71.  
  72. form1.Edit1.SetFocus; // курсор в поле ввода
  73.  
  74. // восстановим звук
  75.  
  76. Forml.MediaPlayer1.FileName:=
  77. 'c:\windows\media\ding.wav';
  78.  
  79. Forml.MediaPlayer1.Open;
  80.  
  81. end;
  82. end;
  83. end;
  84. end.

[/]


Delphi Для профессионалов &1   |    Delphi Для профессионалов &2   |    Delphi Для профессионалов &3   |    Иллюстрированный самоучитель &1   |    Иллюстрированный самоучитель &2