hallo,
ich hab mal wieder ein problem:
ich gebe mit hilfe der port.dll einen sound aus und währendessen soll er aber gleichzeitig auch einen button abfragen, ob der ton gehört wurde.
das programm soll als billiger hörtester fungieren und ist folgendermaßen aufgebaut:
ich habe eine äußere schleife, in der die frequenz hochgezählt wird und eine schleife darin, wo immer die lautsärke von 0 hochgefahren wird. der nutzer soll dann drücken wenn er den sound gehört hat - verstanden?
beispiel:
frequenz steht auf 440hz und auf der lautstärke '1' --> sound wird ausgegeben und der user kann ihn nicht hören (zu leise).
nun wird die lautstärke erhöht:
frequenz steht auf 440hz und auf der lautstärke '101' --> sound wird ausgegeben und der user kann ihn nicht hören (zu leise).
usw. bis die lautstärke meinetwegen 500 hat und dann soll der user den button gedrückt hat.
so das funktioniert leider nicht, weil ich nicht innerhalb der schleife buttons abfragen kann.
ich hab es probiert mit einem globalen hook, aber auch der 'kommt' auch nciht in die schleife.
dann habe ich einen tipp von schubi bekommen, dass ich
application.processmessages;
benutzen soll, aber wenn ich das benutzte gibt er den sound nicht mehr aus - aber ich kann die buttons drücken bzw. die hook-signale verwenden
programm-code:
erklärung:
t_fq <- Frequenz
t_db <- pseudo
db also die lautstärke
soundausgeben_kurz(...) <- gibt den sound aus, ist egal was da drin steht(funktioniert auf jedenfall)
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var s:
string;
begin
while t_fq <= fqmax
do
begin
t_db:=1;
//gehort:=false;
for T_i :=1
to dbmax
do
begin
//soundausgeben_kurz(t_fq,t_db);
//application.processmessages;
//showmessage(inttostr(t_db));
t_db:=t_db+100;
form1.l1.caption := inttostr(t_db);
if timer1.Tag = 1
then
begin
raster.RowCount:= raster.RowCount+1;
raster.cells[0,stelle]:=inttostr(t_db);
raster.cells[1,stelle]:=inttostr(t_fq);
raster.cells[2,stelle]:='
ja';
t_fq:=t_fq+fq_step;
inc(stelle);
timer1.Tag := 0;
end;
{if Buchstabe_gedruckt='J' then
begin
raster.RowCount:= raster.RowCount+1;
raster.cells[0,t_i]:=inttostr(t_db);
raster.cells[1,t_i]:=inttostr(t_fq);
raster.cells[2,t_i]:='ja';
t_fq:=t_fq+fq_step;
Buchstabe_gedruckt:='X';
end; }
application.processmessages;
//application.HandleMessage;
end;
//for ende db ende
end;
// fq while ende
timer1.Enabled := false;
end;