Przyk³ad demonstruje odtwarzanie gamy d¼wiêków za pomoc± pascal'a.
Tworzenie Gamy d¼wiêków, czêstotliwo¶ci nut
W du¿ym przybli¿eniu: C = 538Hz, D=615Hz, (nagra³em widmo d¼wiêku C granego na flecie i zbada³em czêstotliwo¶æ najg³o¶niejszego tonu) E = D * D / C, F = E * D / C itd..
Ka¿dy d¼wiêk gamy ma w³asn± czêstotliwo¶æ, nastêpny jest po prostu kolejnym elementem ci±gu geometrycznego. Ten sam d¼wiêk wy¿szej oktawy ma dok³adnie dwukrotnie wy¿sz± czêstotliwo¶æ. D¼wiêków w oktawie jest 8. Jest 8 d¼wiêków granych normalnie, s± te¿ bemole i krzy¿yki. Ka¿dy kolejny d¼wiêk jest wy¿szy czêstotliwo¶ci± od poprzedniego o oko³o 71/65. Taki pomiar mo¿na uzyskaæ mierz±c 2 s±siednie progi gitary. Ich stosunek da nam ró¿nicê wysoko¶ci tonów. Za pierwszy d¼wiêk np. C mo¿na przyj±æ dowoln± czêstotliwo¶æ (tak jakby przestroiæ gitarê), ale lepiej przyj±æ standardow± warto¶æ, ok 538Hz
A teraz w praktyce:
{$N+}
PROGRAM Organki;
USES Crt;
CONST MaxNut=20;
FirstK1 = 16;
FirstK2 = 2;
C = 538;
D = 615;
VAR
Temp : Single;
Temp2 : Single;
Temp3 : Single;
Tab:ARRAY [0..MaxNut] OF Word;
PROCEDURE Generate;
VAR i:Integer;
BEGIN
Temp:=D;
Temp2:=C;
FOR i:=0 TO MaxNut DO
BEGIN
Temp3:=Temp+(Temp-Temp2)*65/71;
Temp2:=Temp;Temp:=Temp3;
Tab[i]:=Round(Temp);
END;
END;
BEGIN
Generate;
REPEAT
Sound(Tab[PORT[$60]-FirstK1]);
IF KeyPressed THEN ReadKey;
IF PORT[$60]>127 THEN NoSound;
UNTIL PORT[$60]=1;
END.