AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Frequenzen erkennen, CRC - Check, Timer zu langsam?!
Thema durchsuchen
Ansicht
Themen-Optionen

Frequenzen erkennen, CRC - Check, Timer zu langsam?!

Offene Frage von "MotoNero112"
Ein Thema von MotoNero112 · begonnen am 8. Sep 2006 · letzter Beitrag vom 9. Sep 2006
Antwort Antwort
MotoNero112

Registriert seit: 7. Sep 2006
4 Beiträge
 
#1

Re: Frequenzen erkennen, CRC - Check, Timer zu langsam?!

  Alt 9. Sep 2006, 02:50
Also der Source-Code ließ sich hervorragend implementieren. Er ist enorm schneller als FFT, liefert auch bessere Werte. Jedoch variieren diese immernoch, was ich mir nicht erklären kann. Mit einem Testgenerator lasse ich stets die gleiche Folge über die Soundkarte laufen, und immer sind die Werte unterschiedlich. Zudem besteht noch das Timerproblem. Ich hab's mit dem MMTimer versucht. Auf 1ms eingestellt (minimum). Folge: Programm friert ein, Rechner am Boden.....Stelle ich den Wert auf 3 ms, so bekomme ich augenscheinlich nur jeden 3. Wert. Eigentlich müsste ich ja unter 0,8 ms um ordentlich Werte zu erzielen.

Auf jeden Fall erstmal vielen Dank für den Source und die äußerst ausführliche Erklärung.

Es muss doch irgendwie eine Möglichkeit geben das Ganze in (annäherend) Echtzeit laufen zu lassen. Schließlich dauert das ja wohl nicht so lange ein Array der Größe 44000 mit Werten zu füllen. Und schon garnicht auf heutigen Rechnern-....Was mache ich nur falsch?

Hier mal die Analyse:

Delphi-Quellcode:
function RecordingCallback():TData;
var
    Samples: TData;
    r_a,r_b: Double;
    aX,aY,aX_B,aY_B: Double;
    rX,rY,rX_B,rY_B: Integer;
    cX,cY,cX_B,cY_B: Integer;

    I,l: integer;
begin

BASS_ChannelGetData(Channel, @Samples,44000);
result:=Samples;

  aX := 0;
  aY := 0;
  rX := -1;
  rY := -1;
  cX := 0;
  cY := 9;
  for I := 36 to 36*2 do
  begin
    aX := aX - Samples[I - 36] * rX;
    aY := aY - Samples[I - 36] * rY;
    aX := aX + Samples[I] * rX;
    aY := aY + Samples[I] * rY;
    Inc(cX);
    if cX >= 18 then
    begin
      cX := 0;
      rX := -rX;
    end;
    Inc(cY);
    if cY >= 18 then
    begin
      cY := 0;
      rY := -rY;
    end;
    r_a := Sqrt(Sqr(aX) + Sqr(aY));
end;
   form1.Edit1.Text:=FloatToStr(r_a);
   if r_B > 4 THEN
    BEGIN
        cou:=cou+1;
        form1.Edit2.Text:=IntToStr(cou);
    END;


  aX_B := 0;
  aY_B := 0;
  rX_B := -1;
  rY_B := -1;
  cX_B := 0;
  cY_B := 6;
  for I := 24 to 24*2 do
  begin
    aX_B := aX_B - Samples[I - 24] * rX_B;
    aY_B := aY_B - Samples[I - 24] * rY_B;
    aX_B := aX_B + Samples[I] * rX_B;
    aY_B := aY_B + Samples[I] * rY_B;
    Inc(cX_B);
    if cX_B >= 12 then
    begin
      cX_B := 0;
      rX_B := -rX_B;
    end;
    Inc(cY_B);
    if cY_B >= 12 then
    begin
      cY_B := 0;
      rY_B := -rY_B;
    end;
    r_B := Sqrt(Sqr(aX_B) + Sqr(aY_B));
    if r_B > 4 THEN
    BEGIN
        cou:=cou+1;
        form1.Edit3.Text:=IntToStr(cou);
    END;
    end;
     end;
Der Timer ruft obige Funktion alle X-ms auf.

Hier die Record-Initialisierung:
Delphi-Quellcode:
procedure StartRecording();
begin

   BASS_ChannelStop(Channel);
                                                    // Nil or @ThresholdRecorder
    Channel:=BASS_RecordStart(44000, 2,BASS_SAMPLE_FLOAT,nil, 0); //BASS_RECORD_PAUSE

 if Channel=0 then
 begin
  Error('Couldn''t start recording');
  Exit;
 end;
    //BASS_ChannelPlay(Channel, false);
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz