Работа со звуком
Lazarus IDE: Основы программирования в Windows
Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее... |
В современных программах, как правило, для вывода каких-либо звуковых сигналов используются аудио-файлы и стандартные проигрыватели. Однако в некоторых случаях можно вполне обойтись старым добрым способом - использованием встроенного динамика (зуммера).
Это может быть использовано для предупреждения пользователя о каком-то событии, или для того, чтобы привлечь внимание пользователя к программе.
В этой статье я расскажу вам, как использовать встроенный динамик компьютера. То есть этот звук будет слышен, даже если у вас нет колонок.
Итак, для вывода звука в Паскале есть процедура Sound. Процедура объявлена так:
procedure Sound(Частота: Word);
Как нетрудно догадаться, Частота - это частота звука в Герцах.
Проблема использования этой процедуры состоит в том, что она объявлена в двух модулях - в модуле CRT и в модуле WinCRT. Причём, в зависимости от того, какой модуль подключен к вашей программе, эта процедура будет вести себя по разному.
Если же к вашей программе подключены оба модуля, то работать будет та процедура, модуль которой объявлен последним. Впрочем, о модулях мы будем говорить в следующих разделах. Если вам пока что-то непонятно, просто примите как данность.
Итак, процедура Sound модуля CRT воспроизводит звук с указанной частотой до тех пор, пока не будет вызвана процедура NoSound. То есть процедура Sound включает звук, а процедура NoSound - выключает.
Немного по другому работает процедура модуля WinCRT . Она воспроизводит звук с указанной частотой в течение 500 миллисекунд.
Так как в Windows процедура Sound модуля CRT не работает, мы рассмотрим только работу процедуры модуля WinCRT. Этот модуль должен быть подключен к вашей программе.
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.
Если вы внимательно изучали предыдущие уроки, то вопросов у вас возникнуть не должно. Ну а если НЕ внимательно, или если вы случайно попали на эту страницу, то рекомендую подписаться на рассылку Основы программирования и на этот раз внимательно и добросовестно изучить все предыдущие уроки.
Что касается нот, то нота - это звук (кто бы мог подумать))). И каждая нота каждой октавы имеет свою частоту.
Данная программа воспроизводит гамму ДО-МАЖОР. Кто в теме, то поймёт. Кто не в теме - идите в музыкальную школу))))