Moin,
ich möchte etwas mit der FastFourierTransformation machen und bin auf
FFT in der Code-Library gestoßen. Jetzt wollte ich diesen Code mal ausprobieren, aber leider bekomme ich ihn nicht kompiliert.
Der Debugger meint immer, es gäbe keine überladene Version von 'DFT', die mit dem Argument aufgerufen werden kann ("Es gibt keine überladene Version von 'DFT', die man mit diesen Argumenten aufrufen kann") - ich bin da aber anderer Meinung
.
Ich habe zunächst nur versucht den Code mit Beispiel zu testen.
Ich kann den Fehler nicht finden... und wäre für einen Tipp dankbar. Stehe irgendwie gerade auf dem Schlauch.
Gruß
Ben
P.S.: Win XP, Delphi 5 Standard
P.P.S.: Mir ist klar, dass der Code so noch nichts macht! (Ich möchte ihn ja in meinen Code einbinden, aber ich bekomme ihn noch nicht einmal so kompiliert.)
complex.pas genau wie hier:
FFT (obere Teil)
main.pas (genau wie im Beispiel)
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, complex;
type
TForm1 =
class(TForm)
Button1: TButton;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function GetFrequency(Data:
array of Single; SampleRate, SampleIndex,
Samples: Integer): Integer;
var I, n, max: Integer;
a:
array of Single;
begin
max := 0;
if length(Data) - SampleIndex < Samples
then
raise EAccessViolation.Create('
Sound index or length out of bounds.');
setlength(a, Samples);
for I := 0
to Samples - 1
do
a[I] := Data[SampleIndex + I];
dft(a);
for I := 0
to (n
shr 1) - 1
do if a[I] > a[max]
then
begin
max := I;
end;
Result := trunc(SampleRate / Samples * max);
end;
end.