Thema: Delphi Morsecode erkennen

Einzelnen Beitrag anzeigen

any_key

Registriert seit: 7. Okt 2005
96 Beiträge
 
Delphi 7 Personal
 
#1

Morsecode erkennen

  Alt 1. Jun 2008, 13:22
Ahoi,
zur Zeit versuche ich Morsecode, welchen ich von einem Programm generieren lasse über ein anderes Programm zu erkennen. Zum Erkennen der Töne verwende ich ein Beispiel, das ich hier im Board gefunden habe (http://www.delphipraxis.net/internal...630&highlight= - LiveTest).
Jetzt habe ich mir dazu auch eine Strategie überlegt, wie der Code erkannt werden soll. Undzwar überprüfe ich, sobald die Aufzeichnung des Codes gestartet wurde, ob der Ton über einem bestimmten Pegel liegt. Wenn dies nicht der Fall ist ruft sich die Prozedur wieder selbst auf bis der Ton über diesem Pegel liegt. Danach wird die vordefinierte Tonlänge für einen kurzen Ton abgewartet und erneut eine Überprüfung des Pegels vorgenommen. Liegt dieser nun noch immer über dem vorbestimmten Maß dann handelt es sich um einen langen Ton und es wird wieder der Zeitraum der Tonlänge abgewartet und die Prozedure von vorne gestartet. Wenn der Ton unterhalb dieses Pegels liegt, was der Fall ist wenn es sich um einen kurzen Ton handelt, dann wird eine Tonlänge abgewartet und die Prozedure wiederum von vorne gestartet.
Das habe ich auch alles in Quelltext umgesetzt, aber sobald ich die Aufzeichnung starte bleibt das Programm hängen
Die Überprüfung des Tons sieht so aus:
Delphi-Quellcode:
procedure TForm1.TonPruefen;
var Anfangszeit,Zwischenzeit : integer;
begin
  if Pegel > 2000000000 then begin
    Anfangszeit := GetTickCount;
    repeat
      Zwischenzeit := GetTickCount;
    until Zwischenzeit - Anfangszeit >= 800;
    if Pegel > 2000000000 then begin
      MemoLog.Text := MemoLog.Text + #13#10 + 'Lang';
      Anfangszeit := GetTickCount;
      repeat
        Zwischenzeit := GetTickCount;
      until Zwischenzeit - Anfangszeit >= 800;
      TonPruefen;
    end
    else
    begin
      MemoLog.Text := MemoLog.Text + #13#10 + 'Kurz';
      Anfangszeit := GetTickCount;
      repeat
        Zwischenzeit := GetTickCount;
      until Zwischenzeit - Anfangszeit >= 800;
      TonPruefen;
    end;
  end
  else
    TonPruefen;
end;
Kann mir vielleicht jemand sagen, warum das Programm hängen bleibt und wie man das beheben kann?

Schon mal vielen Dank im Vorraus für eure Antworten.
mfg any_key
  Mit Zitat antworten Zitat