Echtzeit mp3 Aufnahmen

ArticleCategory: [Artikel Kategorie]

Applications

AuthorImage:[Bild des Autors]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in nl Philip de Groot

nl to en Philip de Groot

en to de Katja Socher

AboutTheAuthor:[Über den Autor]

Bald bekommt er seinen Doktor von der Universität Nijmegen in Chemometrie. Er arbeitet gern mit Linux und schreibt regelmäßig seine Erfahrungen auf.

Abstract:[Zusammenfassung]

Dieser Artikel zeigt, wie man Musik mit Linux aufnehmen kann. Im Gegensatz zum LinuxFocustip in der Januar 2001 Ausgabe wird nicht das 'teure' WAV-Format benutzt. Stattdessen wird direkt im dünneren mp3-Format aufgenommen. 24 Stunden Aufnahmen in CD-Qualität werden Realität, wenn dieses Format benutzt wird.

ArticleIllustration:[Titelbild des Artikels]

[Illustration]

ArticleBody:[Der eigentliche Artikel]

Einführung

Normalerweise ist es unmöglich, wave-sound direkt in Echtzeit in mp3-sound umzuwandeln. Die Prozedur, der man folgen sollte, ist:
  • Nimm zuerst eine wave-Datei mit einem Aufnahmeprogramm auf.
  • Benutze einen mp3-encoder (z.B. 'Lame'), um die wave-Datei in eine mp3-Datei umzuwandeln.

Eine wave-Datei schnell aufzunehmen, verbraucht eine ganze Menge Plattenplatz (100MB für 10 Minutens Stereomusik in CD-Qualität). Dies beschränkt die Speicherkapazität für Musik, die in diesem Format aufgenommen wurde. Ein mp3-encoder ist in der Lage, eine wave-Datei von 100 MB auf 10 MB in der Standard mp3-Qualität (128 kbps, Stereo) umzuwandeln. Diese Eigenschaft ermöglicht das digitale Aufnehmen von Musik für 24 Stunden ohne Unterbrechung! 24 Stunden sind 60*24 = 1440 Minuten, die nur 1,4 GB (1440 MB) Festplattenplatz brauchen!!! Ich habe dieses Feature benutzt, um die 80er Top 300 aufzunehmen, übertragen von Loostad radio (einige englische Seiten sind ebenfalls verfügbar). Die Aufnahme wurde nur einmal unterbrochen, das mp3-Aufnahmeprogramm hält automatisch nach 24 Stunden an und dies war nicht dokumentiert..., die Aufnahme war sehr gut! Ich werde dir zeigen, was für Software ich benutzt habe und alternative Wege erklären, wie man Echtzeit mp3-Aufnahmen machen kann. Ich habe die benutzte Software für diesen Artikel auch auf einer Seite verfügbar gemacht (Links sind weiter unten im Artikel).

Die Prozedur

Unten werden zwei Methoden, für Echtzeit mp3-Aufnahmen in Stereo- und CD-Qualität diskutiert:

'Mpegrec' macht dasselbe wie 'sox | lame', aber verschiedene Einstellungen sind schon definiert. Der Benutzer braucht sonst nichts weiter. Installiere einfach 'Lame'! Ich rate dir, 'mpegrec' zu benutzen. Behalte jedoch im Gedächtnis, daß dieses Programm nach 24 Stunden aufhört!!! Darüberhinaus führt ein ärgerlicher casting-Fehler zu fehlerhaften Aufnahmezeiten: die Aufnahmezeit, die vom Benutzer angegeben wird, wird nicht korrekt benutzt. In den meisten Fällen ist sie viel kürzer!

Wie man mpegrec benutzt

Das Benutzen von 'mpegrec' ist einfach. Tippe in einem xterm 'mpegrec -b 128 -o ./test.mp3' und das war's auch schon!
Erklärung der verschiedenen Optionen:
-b Benutzt 128 kbps als die mp3 Bitrate. Der Standardwert in 'mpegrec' ist 192, was ein seltsamer (und viel zu hoher) Wert ist. Fast alle mp3-Dateien haben eine konstante Bitrate von 128 kbps.
-o Name der Ausgabedatei. In diesem Beispiel: ./test.mp3. Wenn keine Ausgabedatei definiert ist, wird alles zum Standardoutput ('stdout') geschickt. Normalerweise ist das der xterm, in dem das Programm ausgeführt wurde. Der gesamte mp3-Code wird auf deinen Bildschirm geplottet, statt in einer Datei gespeichert zu werden...

Achtung:
Paß bitte auf, daß deine Mixereinstellungen richtig eingestellt sind. Wenn nicht, wird nichts aufgenommen! Die richtige Aufnahmequelle muß ausgewählt sein und die entsprechenden Lautstärkeregler sollten auf ihren höchsten Einstellungen stehen.

Wie man 'sox | lame' benutzt

Tippe den folgenden Befehl in einen xterm:
sox -t ossdsp -w -s -r 44100 -c 2 /dev/dsp -t raw - | lame -x -m s - ./test.mp3
Erklärung der gelieferten Optionen:
sox Das Aufnahmeprogramm: Sound wird aufgenommen durch Benutzen von 'line-in' der Soundkarte.
-t ossdsp Die Soundeingabe stammt ursprünglich von den OSS Soundtreibern. Diese Treiber sind im Linuxkernel enthalten, wenn der Standardsoundsupport enthalten ist.
-w Der Samplebittyp ist ein 16 bit langes Wort (wenn du das nicht verstehst, mach dir nichts daraus, es ist nicht wichtig).
-s Die 'sample data' ist 'signed linear' (wenn du das nicht verstehst, mach dir nichts daraus, es ist nicht wichtig).
-r 44100 Die Samplingfrequenz ist 44100 Hz (CD-Qualität).
-c 2 Aufnahme von 2 Kanälen (stereo).
/dev/dsp Dies ist das sound-sampling device: das Linux-device, das die Aufnahmedaten liefert. Auf alle devices, ports, Platten, usw. wird über das '/dev'-Verzeichnis zugegriffen. Auf den wave-stream wird unter Linux über '/dev/dsp' zugegriffen. Es ist eine Tatsache, daß es sogar möglich ist, deine Sounddatei durch Benutzen des folgenden Befehls zu erhalten: 'cat /dev/dsp >test.wav' (arbeitet nur, wenn die Mixereinstellungen richtig sind!!!).
-t raw Die Ausgabe sind 'rohe' Daten (unverändert, direkt von der Soundkarte).
- Benutzt die Standardausgabe, symbolisiert durch '-'
lame Das Enkodierprogramm: der aufgenommene Sound wird zu 'lame' gepiped (weitergeleitet) für die mp3 Umwandlung.
-x 'Force byte-swapping of input'. Ich kenne die genaue Funktion dieser Option nicht, aber ohne sie läuft die Prozedur einfach nicht (bevor ich es herausfand!).
-m s Enkodiert eine mp3-Datei als Stereo. Der Standard, 'lame' enkodiert es als 'joint-stereo': nur die UNTERSCHIEDE zwischen beiden Soundkanälen werden enkodiert. Als Ergebnis erhält man eine höhere Kompression, aber die mp3-Qualität ist schlechter.
- Die Eingabe ist 'stdin'. Dies ist für das laufende Beispiel korrekt.
./test.mp3 Der Name der endgültigen mp3-Datei.

Der Mixer

Eine korrekte Mixereinstellung ist sehr wixhtig. Der Mixer entscheidet über die Aufnahmequelle. Der Standard, der KDE-Mixer ist wie folgt eingestellt:
Die Standard KDE Mixereinstellungen
Abb. 1: Die Standard KDE Mixereinstellungen.

Abbildung 1 zeigt, daß das Mikrofon die momentane Aufnahmequelle ist. Für unseren Zweck wird eine externe Quelle an den Computer angeschlossen, die den 'line-in' Konnector als Soundkarte benutzt. Die Aufnahmequelle sollte 'line-in' sein. Wenn der Mauszeiger auf dem line-in Kanal des KDE-Mixers positioniert wird, führt ein rechter Mausklick zu dem Menü, das in Abb. 2 gezeigt wird:

Auswählen der richtigen Aufnahmequelle
Abb. 2: Auswählen der richtigen Aufnahmequelle.

Natürlich wird 'RecSource' gewählt, um 'line-in' der Soundkarte als die Aufnahmequelle zu wählen. Benutz dieselbe Prozedur, um das Mikrofon als Aufnahmequelle abzustellen: du möchtest den zusätzlichen Lärm nicht haben!

Achtung:

Wenn 'line-in' nicht als Aufnahmequelle gewählt ist, erhält man keinen Sound von 'line-in' (sogar, wenn du selbst die Musik hören kannst)!!! Vergiß nicht, 'line-in' auf 'unmute' zu setzen. Abb. 2 zeigt dies richtig: du kannst 'line-in' auf mute setzen, deshalb ist es momentan 'unmuted'.

Der KDE-mixer ist richtig eingestellt
Abb. 3: Der KDE-mixer ist richtig eingestellt.

Vorsichtsmaßnahmen, um gute Aufnahmen zu erhalten

Es ist wahrscheinlich, daß du normalerweise in XWindows arbeitest und das 'mpegrec' in XWindows ausgeführt wird. Dies ist aus den folgenden zwei Gründen keine gute Idee:

Die Bemerkungen oben zeigen an, daß Aufnahmen am besten erhalten werden, wenn keine grafische Umgebung vorhanden ist. Das heißt, daß die Bash-shell benutzt werden sollte (eine textbasierte Shell). Diese Methode hat einige Konsequenzen:

Diese zwei Probleme können ganz leicht gelöst werden. Das erste Problem, Soundunterstützung, wird wie folgt gelöst:
'modprobe -k sb'

Dieser Befehl lädt das Modul 'sb', das meine Soundkarte installiert (eine SoundBlaster AWE 64). Wenn du nicht weißt, welches Modul installiert werden muß, siehe in deinen '/etc/conf.modules' (SuSE) oder '/etc/modules.conf' (abhängig von deiner Distribution) nach. Für mich ist der Soundkartenteil folgendermaßen:

alias char-major-14 sb
pre-install sb /sbin/modprobe "-k" "adlib_card"
pre-install sb /sbin/modprobe "-k" "awe_wave"
options sb io=0x220 irq=5 dma=1 dma16=5 # mpu_io=0x330
options adlib_card io=0x388 # FM synthesizer
post-install sb /usr/bin/sfxload "/win98/Program Files/Creative/ctsnd/sfbank/synthgs.sbk"
Deine Soundkarte ist immer in 'alias char-major-14' definiert (wenn die Standard OSS-Treiber benutzt werden, was normalerweise der Fall ist). Diese Zeile wird mit 'sb' abgeschlossen, damit ich weiß, daß der Befehl 'modprobe -k sb' die Soundkartendienste initialisiert.


Das zweite Problem ist das Auswählen von 'line-in' auf deiner Soundkarte mit einem textbasierten Mixerprogramm. Ich benutze das 'aumix' Programm. Wenn in der Bash der Befehl 'aumix' ausgeführt wird, startet der Mixer im interaktiven Mode. In diesem Mode können Einstellungen auf einen Blick überprüft und verändert werden, siehe Abb.4.

Der textorientierte Mixer 'aumix'
Abb. 4: Der textorientierte Mixer 'aumix'.

Du kannst die verschiedenen Aufnahmequellen mit den Pfeiltasten auswählen. Die '<' or '>' Tasten wählen die Lautstärke (links) oder die Balance (rechts). Die '+' und '-' Tasten erhöhen oder veringern die Lautstärke der momentan ausgewählten Quelle. 'm' mutes oder unmutes die momentane Quelle. Wenn die momentane Quelle als Aufnahmequelle ausgewählt ist, wird ein rotes 'R' auf der linken Seite dieser Lautstärkequelle angezeigt. Wenn die Quelle nur für die Wiedergabe benutzt werden kann, wird ein grünes 'P' angezeigt. Drücken von 's' speichert die aktuellen Einstellungen in '~/.aumixrc'. Diese Einstellungen werden sehr leicht beim nächsten Start mit dem Befehl: 'aumix -l' aktiviert.


Um die obige Prozedur zu automatisieren, habe ich ein kleines Skript geschrieben: './mrec test.mp3'. Dieses Skript enthält die folgenden Zeilen:

#!/bin/sh
if [ -z "$1" ]; then
	echo "Usage: mrec mp3-output-file"
	exit 0
fi
modprobe -k sb
aumix -l
mpegrec -b 128 -o "$1"

Sound wird initialisiert, 'line-in' ist als Aufnahmequelle selektiert und 'mpegrec' beginnt sofort mit der Aufnahme.

Installieren von mpegrec

Ich habe die 'mpegrec' Software, die in diesem Artikel benutzt wird, zum Herunterladen verfügbar gemacht. Weitere Informationen über 'mpegrec' kann man auf http://www.netwaysglobal.com/mpegrec/ finden. Nur die Quelldateien und die kompilierten win32 Versionen können hier gefunden werden. Eine Seite mit weiteren Informationen existiert nicht, aber einige weitere Informationen können hier erhalten werden.

Die 'lame'-Dateien und Installationstipps kann man hier finden.

Installation unter Linux

Installieren von lame

Die 'lame' Version, die in diesem Artikel benutzt wird, ist auch zum Herunterladen verfügbar. Die 'lame' Homepage findet sich unter http://www.mp3dev.org/mp3/.

Linuxinstallation

Installieren von sox

'Sox' ist ein Programm zum Aufnehmen, Umwandeln oder Editieren von Sound. Als ein Beispiel kann ein Echo zu der Sounddatei hinzugefügt werden. Lies die 'sox' man-pages ('man sox') für weitere Informationen. Umwandlungen, die 'sox' machen kann: Umwandeln einer wave-Datei in eine .au-Datei (das Standard SUN Audioformat) und umgekehrt. Die Möglichkeiten sind manchmal ganz praktisch. Die Version von 'sox', die für diesen Artikel benutzt wurde, kann >hier gefunden< werden und die Homepage ist auf http://home.sprynet.com/~cbagwell/sox.html.

Linuxinstallation

Andere Probleme

Ich fand zwei weitere Probleme:

Cron

Dies ist ein generelles SuSE Problem. Ein schwerer Prozess wird ausgeführt, um die man-pages upzudaten und die alten log-Dateien zu entfernen. Dieser Prozess ist sehr nützlich, benutzt aber zuviel Prozessorpower für die mp3-Aufnahmen. Ich änderte den Namen von 'cron' während der Aufnahmen, so daß es nicht gefunden und ausgeführt werden konnte. Nach dem Aufnehmen wird 'cron' wieder zurück umbenannt! Benutz den folgenden Befehl, um den Namen von 'cron' zu ändern:

mv /usr/sbin/cron /usr/sbin/cron.backup

Es ist wahrscheinlich, daß der Ort von 'cron' sich für andere Linuxdistributionen unterscheidet. Du kannst den Ort von 'cron' mit dem folgenden Befehl finden:

which cron

Bitte überprüfe, ob 'cron' für andere Aufgaben gebraucht wird. Auf einem Desktoplinuxrechner sollte dies kein Problem sein.

Soundtreiberproblem

Dieses Problem wurde durch Benutzen der alternativen Alsa Soundtreiber gelöst. Benutz die Alsa Dokumentation (nicht in den gepackten driver/utilities Dateien enthalten), um Anweisungen zu bekommen, wie man diese Treiber installiert. Es ist besser, diese Treiber nicht zu benutzen, bis echte Probleme auftreten.