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