AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi FFT Problem in verbindung mit WMP
Thema durchsuchen
Ansicht
Themen-Optionen

FFT Problem in verbindung mit WMP

Ein Thema von EWeiss · begonnen am 24. Mai 2007 · letzter Beitrag vom 25. Mai 2007
 
EWeiss
(Gast)

n/a Beiträge
 
#1

FFT Problem in verbindung mit WMP

  Alt 24. Mai 2007, 08:34
Hallo

Hier mal meine FFT Routine..

Delphi-Quellcode:
       
function BASS_WMPVIS_Render(channel: DWORD): boolean; stdcall;

      BASS_ChannelGetData(channel, Data32, FFTSize or
                          DWORD(IfThen(ChanInfo.chans = 2,
                          BASS_DATA_FFT_INDIVIDUAL)));
                          
      if (ChanInfo.chans = 2) then
      begin
        for i := 0 to 1023 do
        try
        begin
          VisData^.frequency[0, i] :=
            Max(0, Min(1023, (Trunc(Power(Data32Pos^, FFTSAmplification) * 1023))));
          Inc(Data32Pos, FFT_SkipCount);

          VisData^.frequency[1, i] :=
            Max(0, Min(1023, (Trunc(Power(Data32Pos^, FFTSAmplification) * 1023))));
          Inc(Data32Pos, FFT_SkipCount);
        end;
        except
          Result := false;
          exit;
        end;
      end
      else
      begin
        for i := 0 to 1023 do
        begin
          VisData^.frequency[0, i] :=
            Max(0, Min(1023, (Trunc(Power(Data32Pos^, FFTSAmplification) * 1023))));
          VisData^.frequency[1, i] :=
            VisData^.frequency[0, i];
          Inc(Data32Pos, FFT_SkipCount);
        end;
      end;
      
      FreeMem(Data32);
      try
        _IWMPEffects.Render(VisData^, BassWMPVis1.ContainerHdc, pRect);
      except
        Result := false;
        exit;
      end;
      
      Result := true;
      BassFuncs^.SetError(BASS_OK);
      exit;
  end;

  Result := False;
  BassFuncs^.SetError(BASS_ERROR_MEM);

end;
Mein Problem ist nun das in dieser schleife bedingt durch TimedLevel
nur 1024 samples übergeben werden können.

Delphi-Quellcode:
      if (ChanInfo.chans = 2) then
      begin
        for i := 0 to 1023 do
        try
        begin
          VisData^.frequency[0, i] :=
            Max(0, Min(1023, (Trunc(Power(Data32Pos^, FFTSAmplification) * 1023))));
          Inc(Data32Pos, FFT_SkipCount);

          VisData^.frequency[1, i] :=
            Max(0, Min(1023, (Trunc(Power(Data32Pos^, FFTSAmplification) * 1023))));
          Inc(Data32Pos, FFT_SkipCount);
        end;
Im Original Quelltext wird aber ein VariablesArray erstellt
TimedLvl.frequency = new byte[2048];
in dem nun unabhängig von TimedLevel die Daten ausgelesen werden können.

Wie kann ich in meiner schleife den rechten Kanal trotzdem auslesen und die samples
von 1024 to 2048 übergeben damit kein rangecheck error auftritt ?

Code:
            // The first value is the DC component so we'll skip it and start at index 1
            for (int i = 1; i < 1024; i++)
            {
                try
                {
                    float val = (fft[i] * 255);

                    if (val < 0)
                        val = 0;

                    if (val > 255)
                        val = 255;

                    audioData[i] = (byte)val;
                    audioData[i + 1024] = (byte)val;
                }

                catch (Exception ex)
                {
                    Console.WriteLine("Exception occurred at index {0}", i);
                    return false;
                }
            }

            return true;
Zur zeit sieht es so aus das rechts und links die gleichen Daten übergeben werden.
Und seltsamer weise (wohl bedingt durch den rechten Kanal) einige Samples bei einigen Plugins fehlen.
Das sieht dann so aus siehe PIC die hellgrüne grundläsche die frei ist.
Müßte eigentlich mit Samples belegt sein.

Gruss Emil
Angehängte Grafiken
Dateityp: jpg hmm_196.jpg (89,6 KB, 24x aufgerufen)
Dateityp: jpg wmppic_109.jpg (71,0 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
 


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 +1. Es ist jetzt 22:23 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