Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bass.dll "channelgetdata" Analyzer unter 43Hz ? (https://www.delphipraxis.net/118295-bass-dll-channelgetdata-analyzer-unter-43hz.html)

Ronny81 4. Aug 2008 22:46


Bass.dll "channelgetdata" Analyzer unter 43Hz ?
 
Hallo zusammen,

ich habe mir vor einiger Zeit einen Analyzer mit der Bass.dll geschrieben, funktioniert soweit
super, nur hätte ich auch gerne Frequenzen unter 43Hz gesehen, weis einer von euch wie ich das
anstellen so?

Ich habs bis jetzt so gemacht:

Delphi-Quellcode:

function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall;
var i: integer;
    a: integer;
    FFTFata : TFFTData;
begin

   Form1.WaveStream.Write(buffer^, length);

   Result := True;

BASS_ChannelGetData(Handle, @fft, BASS_DATA_FFT1024);

Form1.ProgressBar1.Position := Trunc( Abs(FFT[1]) * 500 );   //    43 Hz
Form1.ProgressBar2.Position := Trunc( Abs(FFT[2]) * 500 );   //    86 Hz
Form1.ProgressBar3.Position := Trunc( Abs(FFT[3]) * 500 );   //    129 Hz
Form1.ProgressBar4.Position := Trunc( Abs(FFT[4]) * 500 );   //    172 Hz
Form1.ProgressBar5.Position := Trunc( Abs(FFT[5]) * 500 );   //    215 Hz
Form1.ProgressBar6.Position := Trunc( Abs(FFT[6]) * 500 );   //    258 Hz
Form1.ProgressBar7.Position := Trunc( Abs(FFT[7]) * 500 );   //    301 Hz
Form1.ProgressBar8.Position := Trunc( Abs(FFT[8]) * 500 );   //    344 Hz
Form1.ProgressBar9.Position := Trunc( Abs(FFT[9]) * 500 );   //    387 Hz

usw...
Aber so kann ich eben nur bis min 43Hz runter. Wegen der Bässe hätte ich es aber gerne bis
5 oder 10Hz.

Vielen Dank schon mal.

Gruß Ronny

Wishmaster 5. Aug 2008 04:40

Re: Bass.dll "channelgetdata" Analyzer unter 43Hz
 
http://www.michaelgaedtke.de/Home/index.html

8)

omata 5. Aug 2008 12:41

Re: Bass.dll "channelgetdata" Analyzer unter 43Hz
 
Du benutzt 1024 Stützpunkte, real benutzbar ist nur die Hälfte also 512 Werte.

20000Hz / 512 = 40Hz

Ich weiss nicht wie du da auf 43Hz kommst. Wenn du jetzt mehr Stützpunkte benutzt dann wird der Abstand zwischen den Einzelfrequenzen kleiner.
Also z.B. 8192 Werte (Konstante = BASS_DATA_FFT8192) dann ist 20000Hz / 4096 = 5Hz.

Dafür ist die bass-Hilfe auch sehr sinnvoll...
Zitat:

Zitat von bass.chm
When requesting FFT data, floating-point values ranging from 0 to 1 are returned. Only the first half of the FFT is useful, so that's what BASS returns. For example, with a 2048 sample FFT, it will return 1024 values; the 1st value being the DC component, the 2nd being the amplitude at 1/2048 of the channel's sample rate, then the amplitude at 2/2048, 3/2048, etc... A Hann window is applied to the sample data to reduce leakage, unless the BASS_DATA_FFT_NOWINDOW flag is used.

Hier erfährt man auch etwas über den ersten Werten. Dieser stellt den DC-, also den Gleichspannungswert, dar.

Ronny81 5. Aug 2008 13:45

Re: Bass.dll "channelgetdata" Analyzer unter 43Hz
 
Hallo Wishmaster und omata,

danke für eure Antworten.
Ich habe jetzt die Sempelrate rauf gestellt so wie "omata" das beschrieben hat. Danke
Ich habes auch genau so auf der Webseite von "Wishmaster" gefunden. Super Tutorials.

Danke euch.

P.S. Die Hilfe kenn ich schon, aber mein Englisch und mein Delphi ist dafür einfach nicht gut genug :lol:

Jetzt läuft die Basserkennung schon viel besser.

Gruß Ronny


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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