![]() |
BASS_ChannelGetData und einzelne Frequenzen bestimmen ?
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Wer kann mir helfen?
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; Vielen Dank schon mal. P.S. ich bin noch nicht so der Profi in Delphi :mrgreen: Gruß Ronny |
Re: Spektrumanalyzer aus BASS_ChannelGetData?
BASSVIS-Plugin benutzen und das entsprechende Plugin für Winamp...feddich :)
|
Re: Spektrumanalyzer aus BASS_ChannelGetData?
Hallo Ghostwalker,
ja das wäre natürlich eine Lösung, aber mir geht es weniger um die Visualisierung als um die einzelnen Frequenzen die ich dann an den Analyzer sende. Ich brauche eigentlich nur ein paar VU-Meter für bestimmte Frequenzen. Aber danke für den Tip. Gruß Ronny |
Re: BASS_ChannelGetData und einzelne Frequenzen bestimmen ?
|
Re: BASS_ChannelGetData und einzelne Frequenzen bestimmen ?
Schau dir mal die Beispiele an die bei der bass.dll dabei sind, da wird sowas auch gemacht.
|
Re: BASS_ChannelGetData und einzelne Frequenzen bestimmen ?
Hallo zusammen,
sorry für die verspätete Antwort. Erst mal danke für eure Tips. Haben mir zwar alle nicht so richtig weiter geholfen -Plugin für Winamp: Will ich nicht, da ich nur die Frequenzen brauche und nicht die Visu. -er Link von "Gehstock": Das ist leider mehr ein Qazi als ein Spaktrumanalyzer. -Beispiele der Bass.dll: ja da wird sowas schon gemacht aber leider nur mit Spezialkomandos der dll, Ich brauche ja wirklich nur die einzelnen Frequenzen. Aber trozdem, vielen vielen Danke für eure Hilfe. Ich habe mitlerweile genau das gefunden was ich suche. Meine Analyzer läuft top. Ich werde in den nächsten Tagen mal den Quelltext posten. Dann könnt ihr euch ansehen was ich gesucht habe ;-) . Gruß Ronny |
Re: BASS_ChannelGetData und einzelne Frequenzen bestimmen ?
Du hast eine DFT bzw. FFT gesucht. In dem verlinkten Thread ist keines der beiden erstellt worden, nicht mal "quasi". Da gibts ne Unit mit der du die Waveform aus .wav Dateien einlesen kannst, und ist genau das andere als das, was du brauchtest.
Die Bass.dll kann man dafür missbrauchen, es gibt aber auch ein paar ganz gute fertige Libs zur FFT (sogar hier im Forum) - und das wäre die erste Wahl, wenn man nicht auch abspielen möchte, bzw. man sich schon für eine andere Methode dafür entschieden hat. |
Re: BASS_ChannelGetData und einzelne Frequenzen bestimmen ?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 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