Seite 1 von 1

suche wav to mp3 konvertierung

Verfasst: 09.11.2006 15:40
von 24dan
Hallo ist es möglich in pure auch wav to mp3 konvertierung zu realisieren?

Verfasst: 09.11.2006 15:57
von ts-soft
Mit der entsprechenden Lib, sowie notwendigen KnowHow kann man das machen

Re: suche wav to mp3 konvertierung

Verfasst: 10.11.2006 10:38
von Jason
24dan hat geschrieben:Hallo ist es möglich in pure auch wav to mp3 konvertierung zu realisieren?
Wenn man LAME einbindet wird es sogar sehr gut.

http://www.mpex.net/software/details/lamedll.html

http://de.wikipedia.org/wiki/LAME

Verfasst: 19.11.2006 00:51
von Helle
Hier ein kleines Beispiel für die Nutzung der lame_enc.dll.

Code: Alles auswählen

;- Beispiel für die Nutzung der lame_enc.dll zur Erzeugung von MP3-Dateien aus Wave-Dateien
;- Die Wave-Datei muss folgendes Format haben: 44100 Hertz, Stereo, 16 Bits per Sample
;- Diese PB-Datei, die Test.wav und die lame_enc.dll müssen im selben Verzeichnis liegen 
;- "Helle" Klaus Helbing, 18.11.2006, PB v4.01
;- Um Zeitaufwand und Festplatten-Stress zu minimieren wird die komplette Wave-Datei 
;- ins RAM geladen und die MP3-Datei erst als Ganzes auf Festplatte gespeichert
 
Global DLL_ID.l                        ;für die lame_enc.dll
Global Samples.l
Global BufferSize.l
Global StreamHandle.l
Global FilelaengeWav.l
Global OutputBytes.l

Global FileWav$ = "Test.wav"           ;oder sonstwie
Global FileMP3$ = "Test.mp3"
Global Version$

Global TempWord.w
Global TempByte.b

Global Dim BufferInf.b(511)            ;reichlich Luft 
Global *PointerInf = @BufferInf()

Global Dim Einstellungen.l(83)         ;eigentlich 331 Bytes
Global *PointerEinst = @Einstellungen()

StartTime = ElapsedMilliseconds()

DLL_ID = OpenLibrary(#PB_Any, "lame_enc.dll")

;--------
If ExamineLibraryFunctions(DLL_ID)
   ;-------- Versionsdaten einlesen -----------------------------------------------------------
   CallFunction(DLL_ID,"beVersion", *PointerInf) ;das Ergebnis der Abfrage in BufferInf schreiben
   Version$ = "Lame Interface Version : "
   TempByte = PeekB(*PointerInf) 
   Version$ = Version$ + Str(TempByte) + "."
   TempByte = PeekB(*PointerInf + 1) 
   Version$ = Version$ + Str(TempByte) + #CRLF$ + "Lame Engine Version : "
   TempByte = PeekB(*PointerInf + 2)
   Version$ = Version$ + Str(TempByte) + "."
   TempByte = PeekB(*PointerInf + 3)
   Version$ = Version$ + Str(TempByte) + #CRLF$ + "Vom : "
   TempByte = PeekB(*PointerInf + 4)
   Version$ = Version$ + Str(TempByte) + "." 
   TempByte = PeekB(*PointerInf + 5)  
   Version$ = Version$ + Str(TempByte) + "."
   TempWord = PeekW(*PointerInf + 6)           ;das Jahr ist Word!
   Version$ = Version$ + Str(TempWord) + #CRLF$ + "URL : "  
   Version$ = Version$ + PeekS(*PointerInf + 8)
   ;---------------------------------------------------------------------------------------- 
 Else 
    MessageRequester("Fehler!", "Die Lame-Datei kann nicht verwendet werden!") 
      End
EndIf 

If OpenFile(0, FileWav$)
    FilelaengeWav = Lof(0) - 44        ;die 44 Bytes des Wave-Headers überspringen
    *BufferWav = AllocateMemory(FilelaengeWav + 44)
    If *BufferWav = 0
      MessageRequester("Fehler!", "Die Wave-Datei kann nicht in einem Rutsch verarbeitet werden!")
      End 
    EndIf  
       
      FileSeek(0, 44)
         ReadFile(0, FileWav$)
         ReadData(0, *BufferWav, FilelaengeWav)
  Else 
    MessageRequester("Fehler!", "Die Wave-Datei kann nicht gefunden werden!")
      End 
EndIf

If OpenFile(1, FileMP3$)
  Else 
    MessageRequester("Fehler!", "Die MP3-Datei kann nicht angelegt werden!")
      End 
EndIf

;-------- "Struktur" füllen, -1 = False ------------------------------------------------------
   PokeL(*PointerEinst, 256)           ;Config = 256 (BE_CONFIG_LAME)   für aktuelle Version
   PokeL(*PointerEinst + 4, 1)         ;StructVersion = 1   für aktuelle Version
   PokeL(*PointerEinst + 8, 331)       ;StructSize = 331   diese "Struktur" ist 331 Bytes gross
   PokeL(*PointerEinst + 12, 44100)    ;SampleRate   in Hertz
   PokeL(*PointerEinst + 16, 0)        ;ReSampleRate   0 = Auto
   PokeL(*PointerEinst + 20, 1)        ;Mode   1 = BE_MP3_MODE_JSTEREO
   PokeL(*PointerEinst + 24, 128)      ;Bitrate
   PokeL(*PointerEinst + 28, 0)        ;MaxBitrate   nur für VBR, wird für CBR ignoriert
   PokeL(*PointerEinst + 32, 2)        ;Preset   High-Quality
   PokeL(*PointerEinst + 36, -1)       ;Copyright   kein
   PokeL(*PointerEinst + 40, -1)       ;CRC   nicht
   PokeL(*PointerEinst + 44, 0)        ;Original   ja
   PokeL(*PointerEinst + 48, -1)       ;Private   nein
   PokeL(*PointerEinst + 52, -1)       ;VbrMethod   keine
   PokeL(*PointerEinst + 56, -1)       ;WriteVBRHeader   nein
   PokeL(*PointerEinst + 60, -1)       ;Enable VBR  nein
   PokeL(*PointerEinst + 64, 0)        ;VBRQuality   Null wäre höchste Qualität
   PokeL(*PointerEinst + 68, 64000)    ;VbrAbr_bps   Muster ohne Wert, nur für VBR
   PokeL(*PointerEinst + 72, 0)        ;NoBitRes   Bit-Reservoir  nein
   PokeL(*PointerEinst + 76, $fd02)    ;Quality   2   High-Byte = NOT Low-Byte
;---------------------------------------------------------------------------------------------

  If CallFunction(DLL_ID, "beInitStream", *PointerEinst, @Samples, @BufferSize, @StreamHandle) = 0
     *BufferMP3 = AllocateMemory((FilelaengeWav / 2) / ((BufferSize / Samples) - 1)) 
     If *BufferMP3 = 0
       MessageRequester("Fehler!", "Die Wave-Datei kann nicht in einem Rutsch verarbeitet werden!")
      End
     EndIf    
 
   Else 
     MessageRequester("Fehler!", "Irgendwas ist faul!") 
      End
  EndIf       

CallFunction(DLL_ID, "beEncodeChunk", StreamHandle, FilelaengeWav / 2, *BufferWav, *BufferMP3, @OutputBytes)

OutputBytesGes = OutputBytes
        
CallFunction(DLL_ID, "beDeinitStream", StreamHandle, *BufferMP3, @OutputBytes)

OutputBytesGes + OutputBytes
        
CallFunction(DLL_ID, "beCloseStream", StreamHandle)

WriteData(1, *BufferMP3, OutputBytesGes)

CloseFile(1)
CloseFile(0)
CloseLibrary(DLL_ID)

EndTime = ElapsedMilliseconds() - StartTime

Version$ = Version$ + #CRLF$ + "Benötigte Zeit : " + Str(EndTime / 1000) + " s"

     MessageRequester("Einige Angaben :", Version$)

End
Gruss
Helle

Verfasst: 01.12.2007 01:44
von R4z0r1989
*ausgrab*

aber ich glaub einen fehler gefunden zu haben in der zeile:

Code: Alles auswählen

PokeL(*PointerEinst + 12, 44100)    ;SampleRate   in Hertz 
wenn ich das in 22050 umänder bekomm ich einen IMA!

Woran liegt das?

noch ne frage!

Verfasst: 01.12.2007 22:27
von R4z0r1989
gibet irgendeine hilfedatei für die lame_enc.dll?
wär wichtig für mich!