![]() |
AW: FFT Berechnung fails
Vor längerer Zeit hat mal
![]() Habe das vor Jahren mal für meinen Player genutzt. Eventuell kannst Du den Quellen ja entnehmen, wie der Umgang mit FFT dort realisiert wurde und das eine oder andere für Dich entsprechend adaptieren. |
AW: FFT Berechnung fails
Zitat:
Es ging nur um die frage warum ich BASS_DATA_FFT2048 anstelle von BASS_DATA_FFT1024 1024 verwenden muß weil mir einige Balken fehlten. Das ist mittlerweile beantwortet. Es gab da einige Unstimmigkeiten. |
AW: FFT Berechnung fails
Eine FFT ist bei einem realen Input symetrisch, d.h. es genügt die Hälfte der Werte.
Wenn ich es richtig verstehe, dann hast Du ja zwei Kanäle, daher macht das alles schon Sinn. |
AW: FFT Berechnung fails
Was soll FFT_SkipCount den in dieser Reihenfolge bewirken?
Die Samples der einzelnen Channels liegen direkt hintereinander. Da wäre es eher anders herum sinnvoll, wenn man Samples auslassen will. Ich würde in FFT_SkipCount eher die zu überspringenden Sample-Paare angeben:
Delphi-Quellcode:
Schon bei FFT_SkipCount = 1 wird jetzt DataPos bei jedem Schleifendurchlauf um 4 Samples weiter gesetzt.
VisData.Spectrum[0, I] := fn(Data32Pos^)
inc(Data32Pos); VisData.Spectrum[1, I] := fn(Data32Pos^) inc(Data32Pos, 1 + (2 * FFT_SkipCount)); Bei 256 Durchläufen sind das 1024 Samples. Größere Werte für FFT_SkipCount sind hier nicht zulässig. |
AW: FFT Berechnung fails
Keine Ahnung auf was du hinaus willst.
Du weist doch gar nicht wofür FFT_SkipCount steht.
Delphi-Quellcode:
Definition von FFT_SKIPCOUNT und WAVE_SKIPCOUNT.
BASS_SONIQUEVIS_CONFIG_FFT_SKIPCOUNT = 2; // Skip count range is from 1 to 3 (because of limited FFT request size)
BASS_SONIQUEVIS_CONFIG_WAVE_SKIPCOUNT = 3; // Skip count range is from 0 to (...) try it out, whenever Bass crashes or does not return enough sample data Der Speicher wird so zugewiesen
Delphi-Quellcode:
GetMem(Data32, FFT_SkipCount shl 13);
FFTSize ist abhängig vom übergebenen FFT_SkipCount BASS_DATA_FFT1024, BASS_DATA_FFT2048, BASS_DATA_FFT4096
Delphi-Quellcode:
Dementsprechend hole ich mir dann die passenden Werte über Bass_ChannelGetdata. Siehe FFTSize
case (FFT_SkipCount) of
1: FFTSize := BASS_DATA_FFT1024; 2: FFTSize := BASS_DATA_FFT2048; 3: FFTSize := BASS_DATA_FFT4096; else FFT_SkipCount := 1; FFTSize := BASS_DATA_FFT1024; end; Bass_ChannelGetdata(channel, Data32, FFTSize or DWORD(IfThen(ChanInfo.chans = 2, BASS_DATA_FFT_INDIVIDUAL) or IfThen(not VisInfo^.UltraPlayerVis, BASS_DATA_FFT_NOWINDOW))); Zitat:
Aber hat nichts mit meiner Frage in diesen Thread zu tun und dieser war ja auch schon beantwortet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 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