suche wav to mp3 konvertierung
suche wav to mp3 konvertierung
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)
(W. Heisenberg)
"Vielleicht ist diese Welt nicht die denkbar beste, aber sie ist die einzig mögliche."
(C. S. Lewis)
- 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
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: suche wav to mp3 konvertierung
Wenn man LAME einbindet wird es sogar sehr gut.24dan hat geschrieben:Hallo ist es möglich in pure auch wav to mp3 konvertierung zu realisieren?
http://www.mpex.net/software/details/lamedll.html
http://de.wikipedia.org/wiki/LAME
Der Rest ist Schweigen!
Hier ein kleines Beispiel für die Nutzung der lame_enc.dll.
Gruss
Helle
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
Helle
*ausgrab*
aber ich glaub einen fehler gefunden zu haben in der zeile:
wenn ich das in 22050 umänder bekomm ich einen IMA!
Woran liegt das?
aber ich glaub einen fehler gefunden zu haben in der zeile:
Code: Alles auswählen
PokeL(*PointerEinst + 12, 44100) ;SampleRate in Hertz
Woran liegt das?
noch ne frage!
gibet irgendeine hilfedatei für die lame_enc.dll?
wär wichtig für mich!
wär wichtig für mich!