SoX

Aus LinuxUser 01/2004

SoX

SoX around the clock

SoX steht für “sound exchange” und wandelt Audiodateien auf der Kommandozeile in andere Sound-Formate um. Auf Wunsch können dabei zusätzlich Effekte eingesetzt werden.

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.)

Effekthascherei?

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.

Mischpult

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.

Abbildung 1: Grafisch, aber weniger Funktionen – SoX-Frontend

Abbildung 1: Grafisch, aber weniger Funktionen – SoX-Frontend

LinuxUser 01/2004 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben