Alle Welt spricht MP3, wozu sich noch mit wav-Dateien beschäftigen? Letztlich steckt hinter jedem MP3 auch nur eine Art Wellenbeschreibung, und Wellen sind vielfältig einsetzbar. Was man mit wav-Dateien zusammen mit den WaveTools alles erleben kann, zeigt dieser Artikel.
Die WaveTools liegen zur Zeit in der Version 1.0 vor. Zu den Neuerungen gegenüber der Vorgängerversion (0.9) gehört unter anderem der Wegfall der DOS-Unterstützung, was mir die WaveTools direkt sympathisch gemacht hat. Die Installation aus den Sourcen ist sehr einfach. Zuerst richten Sie (alles als root selbstverständlich) ein neues Verzeichnis ein:
mkdir /usr/local/wavetools
Wechseln Sie in dieses Verzeichnis, mounten die Heft-CD und packen das Archiv dort aus:
tar xzf /cdrom/LinuxUser/wellen/wavetools-1.0-bin.tgz
Anschließend erzeugen Sie noch einige symbolische Links, damit die WaveTools-Programme in Ihrem Suchpfad liegen:
for i in wcat wcut wfct wflt winf wplot wview; do ln -s /usr/local/wavetools/wavetools-1.0-bin/$i /usr/local/bin/ ; done
Einen ersten Überblick, was die WaveTools alles können, zeigt die Auflistung in Tabelle 1.
Tabelle 1: Die WaveTools
winf |
Gibt Informationen über die wav-Datei aus. |
wcat |
Kann wav-Dateien aneinanderhängen und Sampling-Eigenschaften konvertieren. |
wcut |
Schneidet aus einer wav-Datei Bereiche aus. |
wflt |
Kann wav-Dateien filtern. |
wfct |
Erzeugt wav-Dateien. |
wmix |
Verknüpft wav-Dateien. |
wview |
Kann wav-Dateien interaktiv darstellen. |
wplot |
Erzeugt ein PostScrip-File des Zeit/Amplituden-Grafen. |
Am Anfang war die Welle
Bevor wir uns mit wav-Dateien beschäftigen, sollten wir zu Beginn welche erzeugen. Dazu rufen wir uns zuerst einmal ins Gedächtnis, wie eine wav-Datei theoretisch aufgebaut ist: Sie stellt die Werte der Luftdruckschwankungen, die unser Ohr als akustische Wahrnehmung treffen, in digitalisierter Form dar. Dabei werden die Werte erhöhten Drucks mit positiven Werten, die Werte verminderten Drucks mit negativen Werten dargestellt. Die Abtastrate verrät, wie oft pro Sekunde der Wert aufgetragen wird wird. Als Auflösung bezeichnet man in diesem Zusammenhang, mit welcher Genauigkeit der abgetastete Wert dargestellt wird (8 Bit, 16 Bit…).
Um wav-Dateien zu erzeugen, benutzt man wfct. Dieses Kommando kennt eine Reihe von Optionen, die beeinflussen, was für eine wav-Datei erzeugt wird. Das sind neben dem Parameter -o (der Name der Ausgabedatei wird ohne Leerzeichen angehängt, also -odatei.wav) die Schwingungsoptionen -r für Rechteckschwingung, -t für Dreieckschwingung, -w für Sägezahnschwingung, -n für Rauschen, -i für Rechteckimpulse und ohne Angabe von Optionen die Sinus-Schwingung. Eine Schwingung braucht natürlich noch die Angabe wie lang sie sein soll und welche Frequenz sie hat. Dies wird über Parameter mitgegeben, welche die Endungen Hz für Herz und s für Sekunden besitzen. Alle WaveTools-Programme sind darüberhinaus in der Lage, vor ihren Einheiten die Buchstaben m (für milli), c (für centi), d (für dezi), k (für kilo) und K (für den Faktor 1024) zu erkennen und entsprechend zu berücksichtigen. 10ms werden von den WaveTools also als 10 Millisekunden gelesen. Eine zwei Sekunden lange Sinus-Schwingung des Kammertons a kann demnach einfach durch
wfct -osinus.wav 440Hz 2s
erzeugt werden. Bei der Beeinflussung der Qualität, also der Abtastrate und der Auflösung, helfen weitere Optionen (siehe Tabelle 2).
Tabelle 2: <C>wfct<C>-Optionen
-srate |
Abtastrate (Standard 11025 Hz) |
-bquant |
Auflösung (Standard 8 Bit) |
-aampl |
Amplitude (Standard 1 = 100%) |
-pphase |
Phasenverschiebung (Standard 0 rad/deg/%) |
-r |
Rechteckschwingung |
-t |
Dreieckschwingung |
-w |
Sägezahnschwingung |
-n |
Rauschen |
-iweite |
Rechteckimpuls (Breite in s oder %) |
-odatei |
Ausgabedatei im wav-Format |
-h |
Hilfe |
-v |
Protokollierungen |
Zeig Dich!
Nach dem Anlegen einer eigenen wav-Datei können Sie diese mit jedem gängigen Abspielprogramm, z. B. play oder wavp auf der Kommandozeile, anhören. Dass es sich bei der erzeugten wav-Datei um eine Sinus-Schwingung handelt, können Sie auch sehen, wenn Sie sie sich diese mit dem WaveTools-Programm wplot ansehen. Da die Ausgabe von zwei Sekunden Sinus-Schwingung nicht mehr gut zu erkennen ist, wählen wir für die Ausgabe nur die ersten zehn Millisekunden. Dafür stellt wplot die Option -sstartzeit und -llaenge zur Verfügung. Mit
wplot -s0s -l10ms -osinus.ps sinus.wav
erzeugen Sie eine PostScript-Datei, die Sie sich am einfachsten mit display sinus.ps ansehen können. Durch den modularen Aufbau der WaveTools ist es möglich, die Programme auf der Kommandozeile miteinander zu kombinieren. Außerdem lassen sie sich leicht in Scripte einbauen. In dem Fall verzichtet man auf die die Option -o und lässt direkt auf die Standardausgabe schreiben und verknüpft mit einem |-Zeichen einen weiteren Aufruf (siehe Abbildung 1).
Das Programm wplot kennt noch einige weitere Parameter, die sich bis auf -t, welches einfach bei der Ausgabe die Verschiebung durch die Option -s mit in die Achsenbeschriftung einrechnet (vergleich Abbildung 1), selbst erklären (siehe auch Tabelle 3).
Tabelle 3: Die <C>wplot<C>-Optionen
-sstartzeit |
Start-Offset |
-eendzeit |
End-Offset |
-ldauer |
Dauer |
-t |
echte Zeitachse |
-wbreite |
Grafikbreite (Standard 10 cm) |
-fgroesse |
Schriftgröße (Standard 10 pt) |
-odatei |
Ausgabedatei |
-h |
Hilfe |
-v |
Protokollierungen |
Wellen: Berg und Tal
Mehrere Eingabedateien können miteinander abgemischt werden. Hier kommt das Programm wmix ins Spiel. Dabei bedeutet Abmischen das Addieren oder Multiplizieren der Amplitudenwerte (wobei Addieren der Standard ist, das Multiplizieren mit der Option -m definiert werden muss). Dafür sollte man wissen, dass die WaveTools die Amplitudenwerte im Bereich von [-1,1) darstellen. Wenn die addierten Werte von mehreren Eingabedateien diese Werte übersteigen (also übersteuern), so würden sie abgeschnitten, aber wmix ist so klug und normiert die Amplitudenwerte derart runter, dass die maximale Amplitude noch darstellbar ist.
Eine Möglichkeit das Übersteuern direkt zu verhindern, ist die Option -s, welche die Eingabe von n Eingabedateien vorher mit 1/n multipliziert. Dies ist für die Multiplikation natürlich nicht notwendig, da das Multiplizieren von Werten aus dem Bereich [-1,1) diesen nicht verlässt. Hier ist das Problem eher, dass die Multiplikation die Werte staucht und die Amplitude immer flacher wird. Auch hierfür gibt es einen rettenden Parameter. Mit -n wird die wav-Ausgabe wieder soweit normiert, dass alle Amplitudenwerte gleichwertig so angehoben werden, dass ihr maximaler Ausschlag 1 ist. Eine Übersicht der wmix-Optionen finden Sie in Tabelle 4.
Zeit für einen kleinen Testlauf: Wir nehmen drei Sinus-Wellen, eine hochfrequente von 1000 Hz, eine vom Kammerton (440 Hz) und eine niedrigfrequente von 200 Hz. Diese werden mit wmix addiert und via wplot und display direkt angezeigt (Abbildung 2):
(wfct 200Hz 10ms; wfct 440Hz 10ms; wfct 1000Hz 10ms) | wmix - - - | wplot | display
Tabelle 4: Die <C>wmix<C>-Optionen
-n |
normiert das Maximum auf 1 |
-s |
multipliziert jede Eingabe mit 1/n |
-m |
die Eingabe wird multipliziert statt addiert |
-odatei |
Ausgabedatei |
-h |
Hilfe |
-v |
Protokollierungen |
Hey DJ!
Der Profi unter den WaveTools ist das Filterprogramm wflt. Es kann die Eingabe mit einer ganzen Reihe verschiedener Möglichkeiten bearbeiten. So besteht die Möglichkeit der linearen Transformation aller Amplitudenwerte, also y := y×verstaerkung + bias. Dabei werden die Parameter über -gverstaerkung und -abias angegeben. Auch hier kann das Ergebnis mit der Option -n wieder normalisiert werden. Darüberhinaus stehen noch drei Filter der Akustik zur Verfügung. Es sind der Tief-, Hoch- und Bandpassfilter. Diese Filter heißen gerade deshalb so, weil sie die tiefen und hohen Frequenzen und der Bandpassfilter einen bestimmten (meist mittleren) Frequenzbereich aus der Eingabe herausfiltern (genauer ihre Amplitudenwerte ab- und anheben). Ihre Anwendung finden solche Filter im wirklich Leben, z. B. bei Mehrwegeboxen. Dort dienen sie als Frequenzweichen. Auf diese Weise gelingt es den kleinen Hochtönern von Boxen, hauptsächlich die hohen Frequenzen zu spielen, aber den Tieftönern oder den Bassreflexboxen im Wesentlichen die Frequenzen der Bässe dudeln zu lassen. Schon der Name Frequenzweiche lässt vermuten, dass es eine spezielle Frequenz gibt, die die Grenze der durchzulassenden Frequenzen angibt, welche die Grenze der durchzulassenden Frequenzen spezifiziert. Genau diese gibt man wflt als weitere Angabe für die Option des jeweiligen Filters mit (siehe Tabelle 5).
Tabelle 5: Die <C>wflt<C>-Optionen
-mweite |
Mittelwertfilter |
-lfrequenz |
Tiefpassfilter |
-ffrequenz |
Hochpassfilter |
-bfrequenz |
Bandpassfilter |
-wweite |
Breite des Bandpass’ |
-gverstaerkung |
Verstärkung |
-abias |
Offset zum Nullpunkt |
-c |
Zentrieren der Datei |
-n |
Normalisieren der Datei |
-r |
Datei rückwärts ausgeben |
-i |
Invertieren der Datei |
-odatei |
Ausgabedatei |
-h |
Hilfe |
-v |
Protokollierungen |
Soll also beispielsweise wflt den Frequenzgang unterhalb einer bestimmten Frequenz, z. B. 300 Hz, anheben und alle höheren Frequenzen absenken, so teilen wir wflt das über
wflt -l300Hz -odatei eingabe
mit. Genauso wird der Hochpassfilter über die Option -f und der Bandpassfilter über die Option -b eingesetzt. Beim Bandpassfilter, der nur den Frequenzgang im Bereich um die angegebene Frequenz hebt, steht zusätzlich noch die Möglichkeit zur Verfügung, die Breite mit Angabe der Option -w zu ändern. Probieren Sie doch einmal verschiedene Einstellungen aus. Im Prinzip lassen sich wav-Dateien auf diese Art so ändern, wie Sie es mit ihrem Equalizer an Ihrer HiFi-Anlage steuern.
Optische Analyse
Nachdem wir die verschiedenen Filter kennengelernt haben, erinnern wir uns an unsere ursprüngliche Arbeit mit wmix, bei der wir drei Sinus-Wellen unterschiedlicher Frequenz übereinandergelagert haben. Schaffen es die verschiedenen Filter, die ursprünglichen Schwingungen wieder herzustellen? Dafür habe ich ein kleines Script frequenzweiche.sh erstellt (auf der Heft-CD unter /LinuxUser/wellen zu finden), dem nur die Frequenzen (ohne Angabe von Hz) und die Dauer (ohne Angabe von ms) übergeben werden müssen. Optional dürfen Sie dem Script in einem fünften Parameter mit -t, -r oder -w eine andere Wellenform (vgl. wfct) mitgeben. Mit dem Aufruf
frequenzweiche.sh 200 440 1000 10
erzeugen Sie die wav– und ps-Datei für die Sinus-Schwingungen von 200 Hz, 440 Hz und 1000 Hz mit der Länge 10 Millisekunden. Anschließend addiert und normiert das Script diese Dateien, um die Summe über Hoch-, Tief- und Bandpassfilter wieder auseinanderzudividieren. Das Ergebnis liegt wiederum in wav– und ps-Dateien vor (alle Dateien haben den Namen welleXY.wav respektive welleXY.ps). Alle Wellen können anschließend (vergleich Abbildung 3) mit dem Script-Aufruf disp_freq.sh betrachtet werden. Bei Ihren Versuchen mit frequenzweiche.sh können Sie mit verschiedenen Frequenzen herumspielen, oder verändern Sie die Bandbreite im Script (große Werte machen das Ergebnis z. B. “breiig”).
Wenn Sie sich die Wellen mit disp_freq.sh genauer ansehen wollen, verwenden Sie besser kleine Werte für eine Dauer von 10. Wollen Sie sich die wav-Dateien lieber anhören, so können Sie natürlich größere Werte für die Dauer, z. B. 3000 für 3 Sekunden, angeben. Kleiner Tipp: Wenn Sie sich außerdem den Frequenzgang beim Abspielen ansehen wollen, verwenden Sie ein Programm wie XMMS. Abbildung 4 zeigt deutlich, wie sich beim Abspielen der Datei wellemix.wav die drei Spitzen für die niedrigen, mittlere und hohe Frequenz der ursprünglichen Eingaben, die in dieser wav-Datei übereinandergelegt wurden, hervorheben.

Abbildung 4: wellemix.wav mit XMMS abspielen
In einer der folgenden Ausgaben beschäftigen wir uns mit Cosinus-Wellen, mit weiteren WaveTools-Programmen und zeigen einige interessante Anwendungen, bei denen diese zum Einsatz kommen.
Glossar
-
Abtastrate
-
wird auch Abtastfrequenz und im musikalischen Bereich Sampling-Frequenz oder Sampling-Rate genannt. Eine Musik-CD läuft z. B. mit einer Abtastrate von 44,1 Hz.
-
Auflösung
-
Auch Quantisierung genannt. Eine Musik-CD hat eine Auflösung von 16 Bit und somit 65536 verschiedene Amplitudenwerte zur Verfügung. Eine nur mit 8 Bit quantisierte Aufnahme hat nur 256 verschiedene Amplitudenwerte.





