Hallo Emil,
habe mir Dein Projekt angeschaut.
Zuerst : Deine Grafik ist echt gut. (Optik)
Dann habe ich mir die
procedure TBassPlayer.XFFT angeschaut.
Sehe da mehrere Probleme
1. Du willst ja was zurück , dann solltest Du zumindest die 2 Arrays als Var deklarieren.
aktuell schiebst Du die nur über den Stack in die procedure, da kommt niemals was zurück.
Also so:
procedure TBassPlayer.XFFT(var FR, FI: array of single; Sign, Sample, SampleCount: Integer);
Innerhalb der procedure fehlt eine Abbruch-Bedingung in
Delphi-Quellcode:
M := ((SampleCount) div 2);
while M < J do
begin
J := J - M;
M := M div 2;
// Nachtragen
if M=0 then break; // Hier steckst Du in einer endlosSchleife
end;
Und leere Exceptblöcke sind böse. So eine methode sollte keine Exceptions werfen,
und wenn Doch willst Du das wissen
Und deine FloatingPoint Probleme:
Delphi-Quellcode:
procedure TBassPlayer.DrawData(PaintDC: HDC);
var
k: integer;
TRA: array[1..256] of single;
TIA: array[1..256] of single;
begin
// Render alle Bilder in den temporären Buffer TempBufferDC
for k := 0 to 255 do
TRA[k + 1] := WaveData[k] / 1.50;
// Das Array TIA liegt auf dem Stack da ist zu 100% Müll drin
// Also:
fillchar(TIA, sizeof(TIA), #0);
XFFT(TRA, TIA, -1, 1, 255);
//
Mit diesen Änderungen läuft es bei mir durch ohne Probleme
Gruss Fritz