Einzelnen Beitrag anzeigen

Ronny81

Registriert seit: 7. Jan 2007
7 Beiträge
 
#1

BASS_ChannelGetData und einzelne Frequenzen bestimmen ?

  Alt 14. Jan 2008, 21:04
Hallo zusammen,

ich hätte da mal eine Frage
Aber nicht gleich sauer sein, wenn ich mich vielleicht zu blöd anstelle.
Ich suche mir jetzt schon seid zwei Tagen die Finger wund aber ich finde nichts.
So jetzt zu meinem Problem:

Ich habe eine Wav-Stream den ich über die Bass.dll vom Wave-out meiner Soundkarte auslese.
Über "RecordingCallback" hole ich mir "BASS_ChannelGetData(Handle, @fft, BASS_DATA_FFT1024)".
Ich habe mir auch schon ein kleines Programm geschrieben dass mir in eine "PaintBox" ein
Oszilloskop zeichnet, aber ich will und brauche einen "Spektrumanalyzer".
Wie muss ich mit "FFT" umgehen um einen "Spektrumanalyzer" zu bekommen?
Am besten wäre es wenn ich die einzelnen Frquenzbereiche noch schön einstellen könnte.
Es soll aussehen wie auf dem Bild im Anhang. Muss nicht farbig sein oder so.
Auf einer Seite geht es mit den hohen Frequenzen los bis auf der anderen dann die
tiefen Frequenzen kommen.
Aber wie mach ich das ???

Bis jetzt verwende ich diesen Code

Delphi-Quellcode:
var
  Form1: TForm1;
  WaveHdr: WAVHDR; // WAV header
  rchan: HRECORD;   // recording channel
  chan: HSTREAM;   // playback channel
  fft: array[0..256] of single;

implementation

{$R *.dfm}


(* This is called while recording audio *)
function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall;
var i: integer;
begin
   Form1.WaveStream.Write(buffer^, length);
   Result := True;
//--------------------------------------------------------------------------
BASS_ChannelGetData(Handle, @fft, BASS_DATA_FFT1024);
  form1.PaintBox1.Canvas.Rectangle(0,0,form1.PaintBox1.Width,form1.PaintBox1.Height);
  for i:= 1 to 256 do
  Begin
    form1.PaintBox1.Canvas.MoveTo(i,form1.PaintBox1.height);
    form1.PaintBox1.Canvas.LineTo(i,form1.PaintBox1.height-round(fft[i]*(form1.PaintBox1.height)*i));
  end;
  form1.PaintBox1.Canvas.Unlock;
   Result := True;
//--------------------------------------------------------------------------
end;
Wer kann mir helfen?
Vielen Dank schon mal.

P.S. ich bin noch nicht so der Profi in Delphi

Gruß Ronny
Miniaturansicht angehängter Grafiken
analyzer_196.jpg  
  Mit Zitat antworten Zitat