
Привет) Заждался, да? Часть 1, если что. Вот часть 2, вспомним былое.
Итак, пойдём по порядку, расставим все точки над и. Ты уже заметил, что мы пишем используя только модуль windows.pas. Поэтому в модуле melody.pas (там, где все функции) мы пишем свой StrToInt без использования SysUtils.
[парсим!]
Ты уже заметил, что мелодия в формате nokia состоит из неких последовательностей, разделенных пробелами? Да? Ок = )
Нам надо это всё разбить на звуки и записать в массив типа taos. Он должен быть динамическим, но у меня почему-то изначально задана длина.
function FillInTAOS(s: string):taos;
var
p: integer;
l: integer;
begin
repeat
p:=Pos(' ', s);
if Length(s)<=1 then exit;
l:=Length(Result);
SetLength(Result, l + 1);
if p <> 0 then
Result[l]:=Copy(s, 1, p-1)
else
Result[l]:=s;
Delete(s, 1, p);
until p = 0;
end;
А теперь надо превратить отдельно каждый звук в TSound. Углубляться не буду, времени сейчас мало’(
function ParseSound(s: string):TSound;
var
p,i: integer;
f: char;
const
ch = '1234567890';
begin
p:=Pos('#', s);
if p=0 then
Result.d:=False
else begin
Result.d:=True;
Delete(s, p, 1);
end;
p:=Pos('.', s);
if p=0 then
Result.t:=False
else begin
Result.t:=True;
Delete(s, p, 1);
end;
for i:=1 to Length(s) do
if Pos(s[i], ch)=0 then Break;
Dec(i);
Result.l:=StrToInt(Copy(s, 1, i));
Delete(s, 1, i);
f:=s[1];
Delete(s, 1, 1);
case f of
'c': Result.n:=ndo;
'd': Result.n:=nre;
'e': Result.n:=nmi;
'f': Result.n:=nfa;
'g': Result.n:=nso;
'a': Result.n:=nla;
'b': Result.n:=nsi;
else begin
Result.n:=nsl;
exit;
end;
end;
Result.n:=oct(Result.n,StrToInt(s));
end;
С парсингом вроде всё.
[финал]
И напоследок пару функций, например для определения длины звука в миллисекундах при определенном темпе, ну и для проигрывания TSound.
function notlen(l, bpm: integer): integer;
begin
Result:= 240000 div l div bpm;
end;
procedure PlaySound(s: TSound);
var
len: integer;
begin
len:=notlen(s.l, 225);
if s.t then
len:=len + len div 2;
notebeep(s.n, s.d, len);
end;
(c) crystalbit, http://parsers.info
А вот и исходник сороковой симфонии моцарта из внутреннего динамика!
Ну всё, я побежал, пора заняться веб-дизайном и продвижением сайта в сети интернет =) Контент это хорошо, хорошо когда его много, но без продвижения и рекламы далеко не уедешь.
Чёт я и не задумывалась даже что можно слушать музыку через динамик, однако :)