Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi BASS_ChannelGetData und einzelne Frequenzen bestimmen ? (https://www.delphipraxis.net/106665-bass_channelgetdata-und-einzelne-frequenzen-bestimmen.html)

Ronny81 14. Jan 2008 20:04


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:
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 :mrgreen:

Gruß Ronny

Ghostwalker 14. Jan 2008 21:49

Re: Spektrumanalyzer aus BASS_ChannelGetData?
 
BASSVIS-Plugin benutzen und das entsprechende Plugin für Winamp...feddich :)

Ronny81 15. Jan 2008 11:14

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

Gehstock 15. Jan 2008 11:45

Re: BASS_ChannelGetData und einzelne Frequenzen bestimmen ?
 
http://www.delphipraxis.net/internal...ct.php?t=30232

dominikkv 15. Jan 2008 12:35

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.

Ronny81 29. Jan 2008 07:55

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

Medium 29. Jan 2008 15:39

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.

omata 29. Jan 2008 19:00

Re: BASS_ChannelGetData und einzelne Frequenzen bestimmen ?
 
Vielleicht hilft dir ja das hier weiter.

Gruss
Thorsten


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