Работа со звуком

Lazarus IDE: Основы программирования в Windows Lazarus IDE: Основы программирования в Windows

Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее...

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

Это может быть использовано для предупреждения пользователя о каком-то событии, или для того, чтобы привлечь внимание пользователя к программе.

В этой статье я расскажу вам, как использовать встроенный динамик компьютера. То есть этот звук будет слышен, даже если у вас нет колонок.

Итак, для вывода звука в Паскале есть процедура Sound. Процедура объявлена так:

procedure Sound(Частота: Word);

Как нетрудно догадаться, Частота - это частота звука в Герцах.

Проблема использования этой процедуры состоит в том, что она объявлена в двух модулях - в модуле CRT и в модуле WinCRT. Причём, в зависимости от того, какой модуль подключен к вашей программе, эта процедура будет вести себя по разному.

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

Итак, процедура Sound модуля CRT воспроизводит звук с указанной частотой до тех пор, пока не будет вызвана процедура NoSound. То есть процедура Sound включает звук, а процедура NoSound - выключает.

Немного по другому работает процедура модуля WinCRT . Она воспроизводит звук с указанной частотой в течение 500 миллисекунд.

Так как в Windows процедура Sound модуля CRT не работает, мы рассмотрим только работу процедуры модуля WinCRT. Этот модуль должен быть подключен к вашей программе.

Листинг 24.4. Работа со звуком.
program zvuk;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes,
  WinCRT;             //!!! Подключить этот модуль !!!

//Гамма ДО-МАЖОР (ноты)
const Note : array[1..15] of string = ('ДО ',       //ДО, 1-я октава
                                       'РЕ ',       //РЕ, 1-я октава
                                       'МИ ',       //МИ, 1-я октава
                                       'ФА ',       //ФА, 1-я октава
                                       'СОЛЬ ',     //СОЛЬ, 1-я октава
                                       'ЛЯ ',       //ЛЯ, 1-я октава
                                       'СИ ',       //СИ, 1-я октава
                                       'ДО ',       //ДО, 2-я октава
                                       'СИ ',       //СИ, 1-я октава
                                       'ЛЯ ',       //ЛЯ, 1-я октава
                                       'СОЛЬ ',     //СОЛЬ, 1-я октава
                                       'ФА ',       //ФА, 1-я октава
                                       'МИ ',       //МИ, 1-я октава
                                       'РЕ ',       //РЕ, 1-я октава
                                       'ДО ');      //ДО, 1-я октава
//Гамма ДО-МАЖОР (частота)
const Freq : array[1..15] of word = (262,         //ДО, 1-я октава
                                     294,         //РЕ, 1-я октава
                                     330,         //МИ, 1-я октава
                                     349,         //ФА, 1-я октава
                                     392,         //СОЛЬ, 1-я октава
                                     440,         //ЛЯ, 1-я октава
                                     494,         //СИ, 1-я октава
                                     524,         //ДО, 2-я октава
                                     494,         //СИ, 1-я октава
                                     440,         //ЛЯ, 1-я октава
                                     392,         //СОЛЬ, 1-я октава
                                     349,         //ФА, 1-я октава
                                     330,         //МИ, 1-я октава
                                     294,         //РЕ, 1-я октава
                                     262);        //ДО, 1-я октава

var i : byte;

begin
  for i := 1 to 15 do
    begin
      Write(Note[i]);
      Sound(Freq[i]);
    end;
  for i := 2 to 15 do
    begin
      Write(Note[i]);
      Sound(Freq[i]);
    end;
  ReadLn;
end.

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

Что касается нот, то нота - это звук (кто бы мог подумать))). И каждая нота каждой октавы имеет свою частоту.

Данная программа воспроизводит гамму ДО-МАЖОР. Кто в теме, то поймёт. Кто не в теме - идите в музыкальную школу))))


Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика