Nun bin ich ein paar Schritte weiter - eigentlich (fast) fertig.
Es gab noch ein paar Kleinigkeiten zu bereinigen, die da wären:
- Ein definierter Ausgangpegel mit Werten zwischen -32767/32768 (ein SmallInt), damit die Hardware nicht übersteuert und
- Azsgangspegel regelbar,
Ersteres gestattet sich ein wenig schwierig, weil m.M.n. die Ableitung von Maximalwerten aus dem Random-Wert nicht so ganz einfach ist. Ich habe das mittels sukzessiver Approximation folgendermaßen gelöst:
Randnom bekommt zunächst einen Wert zugewiesen, mit dem "pur"-Werte bis ca. 55.000 erreicht werden.
Diese Werte werden dann normalisiert, so dass man im Ergebnis maximal-Werte von +-27.500 erhält.
Sowas?
Delphi-Quellcode:
type
TOutputArray = array of Single;
function GetNoiseArray(ALength : Integer) : TOutputArray;
var
I : Integer;
const
MaxAmplitude : Integer = High(SmallInt);
HalfMaxAmplitude : Integer = High(SmallInt) div 2;
begin
SetLength(Result, ALength);
for I := Low(Result) to High(Result) do
begin
Result[I] := (Random(MaxAmplitude) - HalfMaxAmplitude) / HalfMaxAmplitude;
end;
end;
procedure TForm2.Button1Click(Sender: TObject);
var
TestNoise : TOutputArray;
begin
TestNoise := GetNoiseArray(512);
end;