suche wav to mp3 konvertierung

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
24dan
Beiträge: 17
Registriert: 28.09.2005 17:46

suche wav to mp3 konvertierung

Beitrag von 24dan »

Hallo ist es möglich in pure auch wav to mp3 konvertierung zu realisieren?
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
"Vielleicht ist diese Welt nicht die denkbar beste, aber sie ist die einzig mögliche."
(C. S. Lewis)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Mit der entsprechenden Lib, sowie notwendigen KnowHow kann man das machen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Jason
Beiträge: 123
Registriert: 06.01.2005 17:47

Re: suche wav to mp3 konvertierung

Beitrag 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
Der Rest ist Schweigen!
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Beitrag 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
Benutzeravatar
R4z0r1989
Beiträge: 521
Registriert: 12.06.2005 18:06
Kontaktdaten:

Beitrag 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?
Benutzeravatar
R4z0r1989
Beiträge: 521
Registriert: 12.06.2005 18:06
Kontaktdaten:

noch ne frage!

Beitrag von R4z0r1989 »

gibet irgendeine hilfedatei für die lame_enc.dll?
wär wichtig für mich!
Antworten