A
APTEM
Простейшая музыкальная программа. Проблема в том, что при долгом нажатии на клавишу (музыка активируется при нажатии на z,x,c,v,b,n) звук ведет себя очень странно. Кажется переполнение буфера клавиатуры. Как можно решить эту проблему?
uses crt,graph;
var ch:char;
i,j:integer;
ch1: byte;
procedure Sound(cc: byte; i:integer;F:single);
var k:word;
c:byte;
begin
k:=round(1.193e6/f);
port[$43]:=$be;
port[$42]:=lo(k);
port[$42]:=hi(k);
setfillstyle(1,12);
bar(i*50,100,(i+1)*50-5,300);
c:=port[$61];
port[$61]:=c or 3;
repeat until (port[$60]<>cc);
port[$61]:=c and (not 3);
setfillstyle(1,i);
bar(i*50,100,(i+1)*50-5,300);
end;
begin
i:=detect;
initgraph(i,j,'d:\tp7');{pri zapisi na disk C:\ zamenit d:\tp7 na c:\tp7}
for i:=1 to 7 do
begin
setfillstyle(1,i);
bar(i*50,100,(i+1)*50-5,300);
end;
repeat
ch1:=port[$60];
(* writeln(port[$60]);*)
case ch1 of
(44):sound(ch1,1,440);
(45):sound(ch1,2,460);
(46):sound(ch1,3,490);
(47):sound(ch1,4,530);
(46):sound(ch1,5,590);
(49):sound(ch1,6,650);
(50):sound(ch1,7,720);
end;
until ch1=27;
closegraph;
end.
uses crt,graph;
var ch:char;
i,j:integer;
ch1: byte;
procedure Sound(cc: byte; i:integer;F:single);
var k:word;
c:byte;
begin
k:=round(1.193e6/f);
port[$43]:=$be;
port[$42]:=lo(k);
port[$42]:=hi(k);
setfillstyle(1,12);
bar(i*50,100,(i+1)*50-5,300);
c:=port[$61];
port[$61]:=c or 3;
repeat until (port[$60]<>cc);
port[$61]:=c and (not 3);
setfillstyle(1,i);
bar(i*50,100,(i+1)*50-5,300);
end;
begin
i:=detect;
initgraph(i,j,'d:\tp7');{pri zapisi na disk C:\ zamenit d:\tp7 na c:\tp7}
for i:=1 to 7 do
begin
setfillstyle(1,i);
bar(i*50,100,(i+1)*50-5,300);
end;
repeat
ch1:=port[$60];
(* writeln(port[$60]);*)
case ch1 of
(44):sound(ch1,1,440);
(45):sound(ch1,2,460);
(46):sound(ch1,3,490);
(47):sound(ch1,4,530);
(46):sound(ch1,5,590);
(49):sound(ch1,6,650);
(50):sound(ch1,7,720);
end;
until ch1=27;
closegraph;
end.