Einzelnen Beitrag anzeigen

Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#2

AW: lame_enc.dll 24 Bit wave -> mp3

  Alt 22. Jun 2011, 23:13
Hi
soweit ich mich erinnere erlaubt die lame_enc.dll nur 16 Bit
ich kann dir weiterhelfen wen du die bass.dll nutzt!


mit der bass.dll, ich lade alle Dateien/Audio Formate als 32-bit floating-point für die beste Qualität
danach konvertiere ich die Daten nach 8/16/24/32 Bit (kommt auf den encoder an libFlac.dll, lame_enc.dll,....)
Delphi-Quellcode:

(************ Convert 32 Bit Floating-point to 16 Bit integer LE/BE ************)

function Clip_16(Value: Integer): SmallInt;
asm
        cmp eax, 32767
        jle @@Lower
        mov ax, 32767
        ret
@@Lower:
        cmp eax, -32768
        jge @@Finished
        mov ax, -32768
@@Finished:
end;

procedure DSP32f_16bitLE(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: Pointer); stdcall;
var
  src : array of Single;
  dst : array of SmallInt;
  i : Integer;
  SaveValue : Integer;
begin
   SetLength(src, length);
   SetLength(dst, length div 2);

   move(buffer^, src[0], length);

  for I := 0 to (length div 4) do
   begin
    // convert to integer
    SaveValue := Trunc(src[I] * 32768);
    // clip it
    SaveValue := Clip_16(SaveValue);
    // store it (native endian)
    dst[I] := SmallInt(SaveValue);
   end;




 //Encoder_Write(@dst[0], length div 2);
end;

// Bass.dll
BASS_ChannelSetDSP(Chan_Mixer, @DSP32f_16bitLE, Self, 1);
  Mit Zitat antworten Zitat