lame.exe

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Susan20
Beiträge: 54
Registriert: 28.02.2008 22:00

lame.exe

Beitrag von Susan20 »

Hi,
hab' mich nach einer langen Pause mal wieder mit PB beschäftigt und ein kleines Projekt zum Aufnehmen von Sound gestartet. Das klappt ja mit den alten mci-Befehlen ganz gut:

Code: Alles auswählen

;Aufnahme Start 
mciSendString_("open new type waveaudio alias recsound" ....
mciSendString_("set recsound time format ms" ....
mciSendString_("set recsound alignment "+Str(alignment)+" bitspersample " ...
mciSendString_("record recsound" ...            
Und wenn man die Aufnahme beendet, wird alles in eine wav-Datei gepackt:

Code: Alles auswählen

mciSendString_("save recsound " + "c:\test.wav" ...
mciSendString_("close recsound" ...
Jetzt habe ich noch den Tipp im Forum zu lame entdeckt. Mit dem Programm "lame.exe" kann ich dann, nachdem die wav-Datei erstellt wurde, eine mp3-Datei machen. Das ist natürlich etwas sperrig, erst Sound aufnehmen, dann als wav-Datei abspeichern und dann in MP3 umwandeln. Meine Frage: Geht das vielleicht mit lame.exe kontinuierlich, also ohne den Umweg über eine wav-Datei? Denn ein Beispiel, das mit lame mitgeliefert wird, ist:
# Streaming mono 22.05 kHz raw pcm, 24 kbps output:
cat inputfile | lame -r -m m -b 24 -s 22.05 -- > output

# Streaming mono 44.1 kHz raw pcm, with downsampling to 22.05 kHz:
cat inputfile | lame -r -m m -b 24 --resample 22.05 -- > output
Ich beziehe mich nur auf das Programm lame.exe. Denn das Arbeiten mit der lame_enc-Dll ist weit jenseits meiner Möglichkeiten. :cry:
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Re: lame.exe

Beitrag von real »

Hi,

ich weiß nicht, wie bei deinem mci die Wave-Datei erzeugt wird (weil ich noch nie mit mci gearbeitet habe), aber ich kann dir sagen, wie man Daten in den die lame.exe hineinbekommt: du öffnest die lame.exe mit den Parametern aus dem Beispiel und den Attributen #PB_Program_Open|#PB_Program_Write|#PB_Program_Hide (Letzteres natürlich nur, wenn du kein Konsolenfenster willst) und übergibst die Daten per WriteProgramData() an den geöffneten Prozess.

Gruß
René
Benutzeravatar
inc.
Beiträge: 348
Registriert: 27.10.2004 12:25

Re: lame.exe

Beitrag von inc. »

http://www.purebasic.fr/english/viewtop ... ght=ffmpeg

In diesem Fall mit ffmpeg, aber wenn LAME StdIn genauso wie ffmpeg unterstützt, muss man nur noch die Kommandozeile anpassen und fertig.
Hier gibts die OOP Option für PureBasic.
Susan20
Beiträge: 54
Registriert: 28.02.2008 22:00

Re: lame.exe

Beitrag von Susan20 »

Danke für die Hinweise. Ja, mit RunProgram() und den entsprechenden flags sowie unter Ausnutzung von stdin und stout von lame.exe ist es mir gelungen, die an der Soundkarte anfallenden Daten "kontinuierlich" ins mp3-Format zu encodieren.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: lame.exe

Beitrag von DarkSoul »

Ich fummel auch grad mit MCI rum. Wenn die Musik nicht wie aus der Toilette klingen soll:
mciSendString_("set recsound samplespersec 44100", 0, 0, 0) ;CD-Samplerate. Aufzeichnen darunter führt oft zu hässlichem Aliasing bei Billigsoundkarten
mciSendString_("set recsound bitspersample 16", 0, 0, 0) ;16 Bit rauschen weniger
mciSendString_("set recsound channels 2", 0, 0, 0) ;Mono ist auch von gestern


Zu Lame.
lame.exe liebt die standardausführung von 8000hz/8Bits afaik nicht so sehr. Die .dll-Version ist gequirlter Mist, da sie weniger kann und auch sonst gerne mal Müll erzeugt (weiß ich von Audacity, welches sie verwendet). Aber 24kbps sind bisschen optimistisch.

Ich würde für Mucke:

lame.exe -h -V 2 bla.wav bla.mp3

und für Sprachaufzeichnungen:

lame.exe -h -b 64 -m m --resample 22.05 --lowpass 6 --highpass 0.3 bla.wav bla.mp3 (Entspricht der Quali von Youtube @240p und das reicht hier dicke. Selbst Musik ist hier noch ganz annehmbar, wenn man die sprachbetonenden Pass-Parameter weglässt)

vorschlagen.

Wenn der User neben einigen optimierten Presets die Parameter selbst wählen kann, umso besser. Nur ab 96khz würde ich mit der Samplerate runter auf 22,05khz gehen. Ab 64kbps auf Stereo verzichten. Noch niedrigere Sampleraten bereiten öfters Probleme auf Standalone-Playern.

Das Zwischenparken von .wav-Dateien würde ich gar nicht so tragisch sehen. Das machen viele Programme. Zumal es immer mal sein kann, dass der MP3-Encoder nicht hinterherkommt oder sonstwas. Viele Programme wandeln erst am Ende der Aufzeichnung von Soundkartenkanälen. Auch Tonbearbeitungsprogramme, wie Audacity, arbeiten intern zunächst mit .wav. Festplattenspeicher hat doch nun wirklich jeder mehr als genug heutzutage. Nur würde ich die temp.wav auf jeden Fall nach Gebrauch löschen und nicht im Müll- ups!! Tempordner zurücklassen.

lg
Bild
Antworten