08.12.2009, 10:07
общий
это ответ
Здравствуйте, Камынин Владислав Дмитриевич.
Я бы поместил частоту нот и мелодию в отдельные массивы. И проигрывал мелодию в цикле из массива. Программный код сокращается в разы и редактировать мелодию стало гораздо легче.
Еще я добавил процедуру myBeep, в которой происходит проигрывание нотки. Её можешь подправить так, как тебе больше нравится. Весь код в приложении:
Приложение:
Uses crt;
const
Mnot:array[1..7] of integer=(2615, 2935, 3295, 3495, 3925, 4400, 4940);{chastoty not}
q=500;{dlya zadergki}
DlMel=24;
Mmelod:array[1..DlMel, 1..2] of integer= {Массив с мелодией. Ноты в виде (Нота, Длительность)}
((3,10), (3,10), (3,20), (3,10), (3,10), (3,20),
(3,10), (5,10), (1,10), (2,10), (3,40),
{part 2}
(4,10), (4,10), (4,10), (4,10), (4,10), (3,10),
(3,10), (3,10), (5,10), (5,10), (4,10), (2,10), (1,40));
procedure myDelay(t:word);{procedura zadergki vmesto DELAY, chtoby zdelat zadergku bolee dlitelnoy}
var i,k:word;
f:real;
begin
for i:=1 to t do
for k:=1 to 30 do
f:=SQRT(38342);
end;
procedure myBeep(Ch, Dl:integer);
{Это процедура проигрывания нотки}
begin
{по Вашему методу}
Sound(Ch);
mydelay(q*Dl);
NoSound;
mydelay(q);
{Или по методу, предложенному в мини-форуме sir Henry}
{Beep(Ch, q*Dl);}
end;
var i:integer;
BEGIN
for i:=1 to DlMel do
myBeep(Mnot[Mmelod[i, 1]], Mmelod[i, 2]);
END.