AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi lame_enc.dll 24 Bit wave -> mp3
Thema durchsuchen
Ansicht
Themen-Optionen

lame_enc.dll 24 Bit wave -> mp3

Offene Frage von "rapante"
Ein Thema von rapante · begonnen am 21. Jun 2011 · letzter Beitrag vom 23. Jun 2011
Antwort Antwort
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#1

lame_enc.dll 24 Bit wave -> mp3

  Alt 21. Jun 2011, 11:59
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?
Micha
  Mit Zitat antworten Zitat
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 23. Jun 2011, 00: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
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#3

AW: lame_enc.dll 24 Bit wave -> mp3

  Alt 23. Jun 2011, 07:22
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.

Geändert von samso (23. Jun 2011 um 07:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#4

AW: lame_enc.dll 24 Bit wave -> mp3

  Alt 23. Jun 2011, 08:48
Hi,
soweit ich mich erinnere erlaubt die lame_enc.dll nur 16 Bit
...das war die entscheidene Info die ich nicht gefunden/übersehen hatte.
Also zunächst die Waves auf 16 bit bringen und dann erst durch den lame jagen....

Kaum macht mans richtig - schon funktionierts

Vielen Dank euch beiden
Micha
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz