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

Что делать, чтобы стать программистом Что делать, чтобы стать программистом

Многие сегодня хотят стать программистами. Хотят. Но ничего не делают для этого. Не делают даже простых вещей. Не хотят даже прочитать книжку из 10 страниц. В итоге так и остаются никем. Потому что мечты не сбываются никогда. Сбываются только планы… Подробнее...

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

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

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

Итак, для вывода звука в Паскале есть процедура 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

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