![]() |
lame_enc.dll 24 Bit wave -> mp3
Hallo zusammen,
ich nutze die lame_enc.dll (über TLameCoder) um mp3's zu encodieren. Mit 16 bit Wave-Files funktioniert das auch underbar - bei 24 Bit Files enthalten die erzeugten mp3-Files nur rauschen. Alle Programme/Beispiele(newac/wav2mp3encoder...) die ich im Netz gefunden habe und auf die lame_enc.dll aufbauen haben das selbe Problem. Einzige Ausnahme ist Audacity - dort funktioniert es mit der dll. Es muss also irgendwie möglich sein ;) Hat jemand eine Idee wie man die dll ansprechen muss, damit die 24 bit Files korekt verarbeitet werden? |
AW: lame_enc.dll 24 Bit wave -> mp3
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); |
AW: lame_enc.dll 24 Bit wave -> mp3
Die 24 Bit Auflösung bringt sowieso nichts, weil das Rauschen eines MP3-Datenstroms so optimiert wird, das es knapp unter der Hörschwelle liegt. Du kannst die 24-Bit-Werte einfach durch 256 teilen (x := x shr 8), also die unteren 8 Bits schlicht ignorieren, um auf die 16-Bit-Audiosamples zu kommen. (Letztendlich macht das trunc() im Beispielcode nichts anderes - nämlich die unteren 8 Bits wegwerfen)
Falls es auf optimale Audioqualität ankommt, muss die Audiodatei zunächst auf Vollpegel normalisiert werden, dann auf 16 Bit runter gerechnet werden und erst danach in den MP3-Encoder geschickt werden. |
AW: lame_enc.dll 24 Bit wave -> mp3
Hi,
Zitat:
Also zunächst die Waves auf 16 bit bringen und dann erst durch den lame jagen.... Kaum macht mans richtig - schon funktionierts :thumb: Vielen Dank euch beiden |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz