AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi FFT Berechnung fails

FFT Berechnung fails

Ein Thema von venice2 · begonnen am 15. Jul 2021 · letzter Beitrag vom 4. Okt 2021
Antwort Antwort
Seite 2 von 2     12
Delphi.Narium

Registriert seit: 27. Nov 2017
1.854 Beiträge
 
Delphi 7 Professional
 
#11

AW: FFT Berechnung fails

  Alt 15. Jul 2021, 17:13
Vor längerer Zeit hat mal hier bei der Konkurenz jemand was dazu gepostet, die dort verlinkte ZIP-Datei mit den Quellen ist noch verfügbar.

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.
  Mit Zitat antworten Zitat
venice2

Registriert seit: 5. Dez 2019
Ort: Köln
732 Beiträge
 
Delphi 2010 Architect
 
#12

AW: FFT Berechnung fails

  Alt 15. Jul 2021, 17:26
Vor längerer Zeit hat mal hier bei der Konkurenz jemand was dazu gepostet, die dort verlinkte ZIP-Datei mit den Quellen ist noch verfügbar.

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.
Danke ich benötige keinen Fremdcode es funktioniert doch alles.
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.
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
108 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: FFT Berechnung fails

  Alt 2. Okt 2021, 18:01
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.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.327 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: FFT Berechnung fails

  Alt 4. Okt 2021, 17:24
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:
VisData.Spectrum[0, I] := fn(Data32Pos^)
inc(Data32Pos);
VisData.Spectrum[1, I] := fn(Data32Pos^)
inc(Data32Pos, 1 + (2 * FFT_SkipCount));
Schon bei FFT_SkipCount = 1 wird jetzt DataPos bei jedem Schleifendurchlauf um 4 Samples weiter gesetzt.
Bei 256 Durchläufen sind das 1024 Samples. Größere Werte für FFT_SkipCount sind hier nicht zulässig.
  Mit Zitat antworten Zitat
venice2

Registriert seit: 5. Dez 2019
Ort: Köln
732 Beiträge
 
Delphi 2010 Architect
 
#15

AW: FFT Berechnung fails

  Alt 4. Okt 2021, 22:16
Keine Ahnung auf was du hinaus willst.
Du weist doch gar nicht wofür FFT_SkipCount steht.

Delphi-Quellcode:
  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
Definition von FFT_SKIPCOUNT und WAVE_SKIPCOUNT.

Der Speicher wird so zugewiesen
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:
        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)));
Dementsprechend hole ich mir dann die passenden Werte über Bass_ChannelGetdata. Siehe FFTSize
Zitat:
Bei 256 Durchläufen sind das 1024 Samples. Größere Werte für FFT_SkipCount sind hier nicht zulässig.
Man muß das gesamt Bild sehen und nicht nur einen Teil davon. Du darfst hier nicht von einen festen Wert ausgehen BASS_DATA_FFT1024

Aber hat nichts mit meiner Frage in diesen Thread zu tun und dieser war ja auch schon beantwortet.

Geändert von venice2 ( 5. Okt 2021 um 08:03 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf