Thema: Delphi Upsampling Algorithmus

Einzelnen Beitrag anzeigen

Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Upsampling Algorithmus

  Alt 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
  Mit Zitat antworten Zitat