Hangállomány görgetése

F.30. Hangállomány grafikus görgetése

{$M $4000, $ffff, 655360}

uses crt,graph;

type myarray= array [0..$fffe] of byte;

var f:file of byte;

c:char;

h,x,y,x1,y1,w,z:longint;

pointer: ^myarray;

m:byte;

n,o:longint;

time: array [0..12] of longint;

{ Egész szám sztringgé alakítása }

function IntToStr(I: word): String;

var S: string[6];

begin

Str(I, S);

IntToStr := S;

end;

{ Kicsinyített oszcillogram rajzoltatása a mintavételi frekvencia csökkentésével}

procedure DrawMiniLine;

var k,u:longint;

begin

for k:=x1 to y1 do

begin

u:=k-x1;

setcolor(red);

lineto(u+64,round(pointer^[k]/8)+404) ;

end; {for}

end;

{ Rendes méretű oszcillogram rajzoltatása }

procedure DrawMaxyLine;

var u,k:longint;

begin

for k:=x to y do

begin

u:=k-x;

seek(f,k);

read(f,m);

setcolor(red);

lineto(u+64,m+72) ;

end; {for}

end;

{ Kijelző rajzoltatása }

procedure DrawDisplay;

var i,j,k,l:byte;

xd1,yd1,xd,yd,xd2,yd3,xd3:word;

begin

cleardevice;

setbkcolor(white);

setcolor(blue);

OutTextXy(200,20,’Wave (sampling rate: 44100 Hz)’);

rectangle(575,380,63,460);

line(63,420,575,420);

OutTextXy(10,180,’Sample’);

OutTextXy(10,196,inttostr(x));

OutTextXy(580,180,’Sample’);

OutTextXy(580,196,inttostr(y));

OutTextXy(10,412,inttostr(x1*8));

OutTextXy(10,400,’Sample’);

OutTextXy(580,412,inttostr(((y1+1)*8)-1));

OutTextXy(580,400,’Sample’);

OutTextXy(40,72,’127′);

OutTextXy(30,320,’-128′);

OutTextXy(10,470,’Tab: forward,’);

OutTextXy(125,470,’BackSpace: back,’);

OutTextXy(260,470,’Home: 0-511,’);

OutTextXy(360,470,’End: end of file,’);

OutTextXy(520,470,’Esc: escape’);

xd2:=60;

for k:=0 to 12 do

begin

OutTextXy(xd2,50,inttostr(time[k]));

inc(xd2,43);

end;

OutTextXy(605,50,'[ms]’);

OutTextXy(0,50,’Time:’);

OuttextXy(180,350,’Reduced-sized copy (not accurate!)’);

xd:=103;

yd:=103;

for i:=0 to 10 do

begin

line(xd,72,yd,327);

inc(xd,43);

inc(yd,43);

end;

xd1:=136;

yd1:=136;

for j:=0 to 2 do

begin

line(63,xd1,575,yd1);

inc(xd1,64);

inc(yd1,64);

end;

xd3:=127;

for j:=0 to 6 do

begin

line(xd3,380,xd3,460);

inc(xd3,64);

end;

setcolor(10);

line(w,380,w,460);

line(z,380,z,460);

moveto(64,420);

setcolor(blue);

rectangle(575,72,63,327);

end;

{ Graph egység detektálása }

Procedure DetectGraph;

var gd, gm: integer;

begin

gd:=detect;

initgraph(gd,gm,’d:\pascal\bgi’);

if GraphResult<>grOk then

begin

textmode(c80);

writeln(‘Check your BGI path!’);

exit;

end; {if}

end;

{ Állomány ellenőrzése }

procedure CheckFile;

begin

if IOResult<>0 then

begin

writeln(‘File open error’);

delay(5000);

close(f);

exit;

end;

end;

{ Állomány olvasása }

procedure ReadFile;

var i,j:word;

m:byte;

begin

n:=(512*(filesize(f) div 512))-1;

if filesize(f)>65535 then

o:=65535

else

o:=n;

for i:=0 to o do

begin

if (i mod 8)=0 then

begin

j:=i div 8;

seek(f,i);

read(f,m);

pointer^[j]:=m;

end;

end;

end;

{ Függvény kirajzolása az első elemtől }

procedure Home;

var i:byte;

begin

x:=0;

y:=511;

x1:=0;

y1:=511;

w:=63;

z:=127;

for i:=0 to 12 do

begin

time[i]:=i;

end;

end;

{ Függvény görgetése előre 512 mintával }

procedure Tabulator;

var i:byte;

begin

if not(y=o) then

begin

inc(x,512);

inc(y,512);

inc(w,64);

inc(z,64);

for i:=0 to 12 do

inc(time[i],12);

if (w=575) then

begin

w:=63;

z:=127;

inc(x1,512);

inc(y1,512);

end;

end

else

begin

outtextxy(160,210,’End of file! Press Home or BackSpace!’);

delay(5000);

end;

end;

{ Függvény görgetése hátra 512 mintával }

procedure Backspace;

var i:byte;

begin

dec(x,512);

dec(y,512);

dec(w,64);

dec(z,64);

if time[1]>12 then

begin

for i:=12 downto 0 do

dec(time[i],12);

end;

if (z=63) and (x1>511) then

begin

dec(x1,512);

dec(y1,512);

z:=575;

w:=z-64;

end;

if (x1<511) and (z<127) then

begin

x:=0;

y:=511;

x1:=0;

y1:=511;

w:=63;

z:=127;

end;

end;

{ Függvény végének kirajzolása }

procedure Ende;

var i:byte;

begin

while y<>o do

Tabulator;

outtextxy(160,210,’End of file! Press Home or BackSpace!’);

delay(5000);

end;

{ Főprogram }

begin

clrscr;

assign(f,’2cd.sam’);

reset(f);

Checkfile;

New(pointer);

ReadFile;

DetectGraph;

w:=63;

z:=127;

DrawDisplay;

Setcolor(red);

OuttextXy(210,200,’Press any key to continue!’);

c:=readkey;

x:=0;

y:=511;

x1:=0;

y1:=511;

for h:=0 to 12 do

time[h]:=h;

while (c<>#27) do

begin

DrawDisplay;

DrawMiniLine;

moveto(64,200);

DrawMaxyLine;

moveto(64,420);

c:=readkey;

case c of

#9: Tabulator;

#8: Backspace;

#71: Home;

#79: Ende;

end; {case}

end; {while}

Dispose(pointer);

closegraph;

end.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s