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);