compiler/src/test/sound/beep.Mod
Norayr Chilingarian 72292bedf8 not important change
Former-commit-id: a7eaf9cacb
2014-02-03 20:29:11 +04:00

58 lines
1 KiB
Modula-2

MODULE beep;
IMPORT Files := OakFiles, rm:=oocRealMath, Unix;
CONST pi2=6.28318;
(*pi2 = 6.2831802368164062;*)
rate=44.1E3;
lf=20.0;
seconds=2.0;
VAR t,a,b,freq,xkm1,ykm1,est,gf:REAL;
i,e:LONGINT;
ai:INTEGER;
outvar: Files.File;
outfile: Files.Rider;
first: BOOLEAN;
PROCEDURE highpass(t,fhp,xk:REAL;VAR yk:REAL);
BEGIN
IF first THEN
est:=rm.exp(-pi2*fhp*t);
gf:=(1+est)/(1-est);first:=FALSE;
END(*IF*);
yk:=(xk-xkm1)/2;
xkm1:=xk;
xk:=yk;
yk:=est*ykm1+(1-est)*xk;
ykm1:=yk;
yk:=gf*yk;
END highpass;
BEGIN
t:=1.0/rate; xkm1:=0.0; ykm1:=0.0; first:=TRUE;
outvar:=Files.New("beepfile");
IF outvar # NIL THEN
Files.Set(outfile, outvar, 0);
ELSE
HALT(1)
END;
e:=ENTIER(rate*seconds);freq:=1000;
FOR i:=1 TO e DO
a:=3000*rm.sin(pi2*freq*i/rate);
(* highpass(t,lf,a,b);*)
(* ai:=SHORT(ENTIER(b));*)
ai:=SHORT(ENTIER(a));
IF i>ENTIER(rate*10/lf)THEN
Files.WriteInt(outfile, ai);;
END;
END;
Files.Register(outvar);
i:=Unix.System("oggenc -r -C 1 beepfile");
i:=Unix.System("ogg123 beepfile.ogg");
END beep.