Registriert seit: 31. Aug 2005
1.622 Beiträge
FreePascal / Lazarus
|
Upsampling Algorithmus
4. Mär 2007, 18:10
Hallo,
ich möchte bei einer Wav Datei die Abtastfrequenz von 32000 Hz auf 44100 Hz erhöhen. Dazu habe ich mir folgenden Code zusammengebastelt:
Delphi-Quellcode:
procedure TWaveTransformer.TransformTo44100Hz;
var ms2:TMemoryStream;
smpl1,smpl2,smpl3:TWaveSample;
i,i2:int64;
alength:int64;
begin
if SampleRate <> 44100 then
begin
Memory.Position := 0;
alength := round((Memory.Size / sizeof(TWaveSample))*(44100 / SampleRate))+1;
i := 0;
ms2 := TMemoryStream.Create;
while i < alength do
begin
i2 := round(i*(SampleRate/44100)) * sizeof(TWaveSample);
Memory.Position := i2;
Memory.Read(smpl1,sizeof(TWaveSample));
smpl2.l := smpl1.l;
smpl2.r := smpl1.r;
ms2.Write(smpl2,sizeof(TWaveSample));
i := i + 1;
end;
Memory.Clear;
Memory.LoadFromStream(ms2);
Memory.SaveToFile('out.raw');
ms2.Free;
end;
end;
Leider entsteht dabei ein hochfrequentes Rauschen. Ich habe leider nur wenig Informationen zum Upsampling im Internet gefunden. Gibt es irgendwo eine Beschreibung, wie man da am besten ran geht? Oder sieht jemand direkt was ich verändern muss?
Danke,
Igel457
Andreas "Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
|