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].
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.
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.)
Wenn die Sample-Rate runtergesetzt wird, kommt es zu Datenverlusten – die konvertierte Datei "rauscht". Für solche Fälle bringt SoX eine ganze Reihe Filter und Effekte mit. Testn Sie zum Beispiel den Effekt "low-pass filter": Dazu hängen Sie an einen zweiten SoX-Aufruf den Effekt an: Zuerst konvertieren Sie also beispielsweise mit
sox -r 8000 file.wav -r 22050 tmp.ogg
und anschließend mit
sox tmp.ogg file.ogg lowp 3400
Wer schon immer ein Musikstück oder einen gesprochenen Satz rückwärts hören wollte, kann den Effekt "reverse" einsetzen:
sox datei.wav datei2.wav reverse
Hängen Sie stattdessen vibro geschwindigkeit [tiefe] an den Aufruf an, wird eine Art Verzerrung, wie man sie von Gitarrenverstärkern (Fender Vibro-Champ) her kennt, erzeugt. Als Wert muss eine Geschwindigkeit (Wert zwischen 0 und 30) und optional die Tiefe (0 bis 1) angegeben werden.
Mit im Paket ist soxmix. Dieses Tool nimmt zwei Audiodateien und mischt sie zu einer zusammen. Beide müssen dazu im gleichen Format vorliegen, der Aufruf hat dann die Form
soxmix datei1.wav datei2.wav dateimix.wav
Auch wenn eine Abspielfunktion für die Samples fehlt und man diese über einen externen Player aufrufen muss, liegen die Vorteile des Tools klar auf der Hand: SoX ist für viele Plattformen erhältlich und unterstützt erstaunlich viele Formate und Effekte. Mit XSoX [3] gibt es auch ein grafisches Frontend, in dem sich Dateien mit wenigen Mausklicks umwandeln lassen – da dieses Programm allerdings seit 1996 offenbar nicht mehr verbessert wurde, fehlt die Unterstützung für einige wichtige Formate wie z. B. Ogg Vorbis. Ein weiteres SoX-GUI ist das Tcl/Tk-Programm Studio [4]. Dessen letzte Release (als Tar-Ball bei Sourceforge erhältlich) ist allerdings auch schon zwei Jahre alt.