SoX wird nicht umsonst das Schweizer Messer unter den Audio-Konvertern ("the swiss army knife of sound processing programs") genannt – das Tool unterstützt zahlreiche Audioformate und konvertiert zwischen diesen. Darüber hinaus kann die Sampling-Rate verändert werden, und es lassen sich Sound-Effekte hinzufügen. Mit im Paket ist soxmix, mit dem Sie Dateien mischen. Wir stellen einige Funktionen dieses Sound-Allround-Talents vor.
Alle gängigen Distributionen enthalten SoX – aktuell ist Version 12.17.4. Da einige Bugs der Vorgängerversion 12.17.3 (unter anderem in Debian "Woody"), z. B. in Zusammenhang mit dem Ogg-Vorbis-Format, gefixt wurden, empfiehlt sich ein Upgrade auf die aktuelle Release. Nähere Informationen, fertige RPM-Pakte und die Sourcen finden Sie auf der Homepage des Programms [1].
Kopflos?
Es gibt zwei Typen von Audioformaten, mit denen SoX umgehen kann: Sound-Dateien mit Header und solche ohne, so genannte "raw data" (rohe Daten). In einem Header finden sich Informationen wie z. B. die Sampling-Rate, Anzahl der Bits pro Sample-Wert (etwa 8 oder 16 Bit), Anzahl der Kanäle (z. B. Mono oder Stereo) und, wenn vorhanden, Angaben zum verwendeten Kompressionsverfahren. Dateien im "raw data"-Format besitzen diese Informationen nicht; sie enthalten lediglich die Sample-Werte, und beim Konvertieren muss man ein bisschen tricksen.
MP3- oder Ogg-Vorbis-Dateien haben einen solchen Header. Da die Dateien in einem Binärformat vorliegen, können Sie diesen aber nicht in einem Editor oder Pager (less oder more) auslesen. Tools wie mp3info und ogginfo können hingegen diese Informationen auswerten und anzeigen (Listing 1).
Listing 1
Header mit ogginfo anzeigen
huhn@asteroid:~$ ogginfo 10_hungry.ogg filename=10_hungry.ogg serial=1804289383 header_integrity=pass 10_hungry.wav vendor=Xiph.Org libVorbis I 20020717 version=0 channels=2 rate=44100 bitrate_upper=0 bitrate_nominal=112001 bitrate_lower=0 stream_integrity=pass bitrate_average=108598 length=326.333333 playtime=5:26 stream_truncated=false total_length=326.333333 total_playtime=5:26
Beim Konvertieren wird zunächst die Audiodatei eingelesen, und die enthaltenen Informationen werden für das Ausgabeformat umgewandelt. Qualitätsverluste, z. B. beim Ändern der Sampling-Rate von 16 zu 8 Bit, müssen dabei in Kauf genommen werden. SoX bietet für diesen Fall die Verwendung von Filtern an, die manchmal das Ergebnis verbessern können.
Verwandlungskünstler
Die Man-Page liefert eine Komplettübersicht aller unterstützten Sound-Formate. Darunter sind jede Menge bekannte Formate wie MP3, Ogg Vorbis oder Wav, aber auch "exotischere" Typen wie Amiga-8-Bit (8svx), die Ihnen normalerweise nicht auf Linux-Systemen begegnen. In manchen SoX-Versionen findet sich gar keine MP3-Unterstützung, was aber zu verschmerzen ist, da es jede Menge MP3-Encoder für Linux gibt. Welche Formate von Ihrer SoX-Installation unterstützt werden, verrät der Aufruf sox -h in der letzten Zeile ("Supported file formats").
Der allgemeine Aufruf zum Umwandeln in ein neues Format lautet
sox [Optionen ] Eingabedatei Ausgabedatei [Effekte ]
wobei die eingesetzten Parameter und Effekte optional sind. Sofern SoX die Dateiendung kennt, wandelt das Programm automatisch ins richtige Format um. Um eine Wav-Datei in ein Ogg-Vorbis-File zu kodieren, rufen Sie sox beispielsweise wie in Listing 2 gezeigt auf.
Listing 2
sox-Ausgabe
huhn@asteroid:~$ sox -V 10_hungry.wav 10_hungry.ogg
sox: Detected file format type: wav
sox: Chunk fmt
sox: Chunk data
sox: Reading Wave file: Microsoft PCM format, 2 channels, 44100 samp/sec
sox: 176400 byte/sec, 4 block align, 16 bits/samp, 57565200 data bytes
sox: Input file 10_hungry.wav: using sample rate 44100
size shorts, encoding signed (2's complement), 2 channels
sox: Input file 10_hungry.wav: comment "10_hungry.wav"
Channels: 2 Rate: 44100
sox: Output file 10_hungry.ogg: using sample rate 44100
size shorts, encoding signed (2's complement), 2 channels
sox: Output file: comment "10_hungry.wav"
Der Parameter -V sorgt für eine ausführliche Darstellung – hier sehen Sie, was hinter den Kulissen abläuft. SoX erkennt die Dateiformate an den Endungen und holt sich, wenn die Dateierweiterung fehlt, zusätzliche Informationen aus dem Datei-Header. Sollte es dennoch einmal haken und die Meldung "sox: Failed reading datei: Do not understand format type:" erscheinen, hilft die Option -t format.
Der Parameter -r verändert die Sampling-Rate. Diese ist für Dateien im .raw-Format beispielsweise standardmäßig auf 8000 Hz gesetzt. Um ein solches File in eine Wav-Datei zu wandeln, muss SoX die neue Rate (44100) und der Sample-Wert der Ausgangsdatei mitgeteilt werden:
sox -s -w -r 44100 -V datei.raw datei.wav
Die beiden zusätzlichen Optionen -s und -w definieren die Sample-Rate der Ausgangsdatei: Es ist ein Sample-Wert vom Typ "signed" und in "word-size" (2 Bytes). Alternativ können Sie diese beiden Optionen zusammenfassen und dem Parameter -t übergeben – der Aufruf lautet dann
sox -t sw -r 44100 -V datei.raw datei.wav
Soll statt Mono (ein Channel) eine Stereoaufnahme erzeugt werden, hilft -c 2 weiter.
Mit dem Parameter -v ändern Sie die Lautstärke der Datei. Geben Sie hinter der Option eine Zahl kleiner als 1.0 an, wird das Sample leiser, Werte größer als 1.0 drehen die Lautstärke hoch. (Das Dezimalkomma ist US-typisch als Dezimalpunkt zu schreiben.)



