Unix- und Audio-Tutorial

Dieses Tutorial ist ein möglicher Einstieg in unix Audio- und System-Tools. Ich stelle Kommandolinien-Audio-Werkzeuge unter Unix bzw Linux vor. Kommandolinie, Commandline oder Prompt nennt das Arbeiten am Computer ohne grafische Benutzeroberfläche oder GUI. Statt der GUI ist ein Texteingabefenster zur Eingabe von Computerbefehlen geöffnet. Der Schreibort ist meist mit einem Dollarzeichen markiert. Am Fuss des Fensters ist der Eingabeort darüber sind die durchgespielten Befehle aufgelistet.

Last login: Tue Mar 1 16:07:16 on ttys003 ~ $

Die in diesem Tutorial vorgestellten Tools sind vollwertige Computerprogramme. Manche haben nur eine Aufgabe andere sind sehr umfangreich. Damit die Tools bei der Beschreibung sofort beim Namen erkennbar sind, stelle ich ein Dollarzeichen vor den Toolnamen. Der Wechsel von der GUI zur Commandline gelingt mit einem Terminalprogramm. Auf dem Mac heisst das Programm auch Terminal. Die in diesem Tutorial beschriebenen Computerbefehle können direkt im Terminalprogramm getestet werden.

Das Arbeiten am Prompt ist sehr Rationell. Wenige Porgrammworte bewirken Ausserordentliches. Jedes Prompt-Tool hat ein kryptisches Wortkürzel als Namen. Zum Beispiel $drutil das erste Beispiel dieses Tutorials. Ein auf $drutil zugeschnittenens Manual hilft bei der Erkundung der Einsatzmöglichkeiten dieses Tools. Mit dem Prompt-Tool $man rufe ich den Manualeintrag von $drutil auf

$ man drutil

Unter der Eingabe öffnet sich das drutil-Manual. Zuoberst steht geschrieben:

NAME drutil -- interact with CD/DVD burners

$drutil kommuniziert mit CD/DVD-Brennern, ich kann damit also CD's brennen. Ich schreibe

$ drutil burn -audio meine_files

$drutil wird die Files des aktuellen Ortes meiner Kommandolinie auflisten und nach einem CD-Rohling fragen. Ist alles in Ordnung schiebe ich eine CD in das Brennlaufwerk und das Brennen beginnt. Möglicherweise stimmt die Reihenfolge der Files nicht. $drutil sortiert ein- und mehrstellige Filenummern nicht wie gewohnt mit "1 2 3 4 5 6 7 8 9 10 11 12 13", das Ergebnis wird "1 10 11 12 13 2 3 4 5 6 7 8 9" sein. Ich ergänze dazu vor dem Brennen die einstelligen Zahlen mit vorangestellten Nullen "01 02 03 04 05 06 07 08 09". Eine Codezeile könnte diese Arbeit übernehmen:

$ for f in ?.* ; do mv "$f" "$(echo $f | sed 's/^/0/')"; done

In diesem Code stecken eingepackt in einem "for; do; done-loop" die Prompt-Tools $mv (umbenennen), $echo (wiederhole Text), $sed (stream editor). Ich versuche die Codezeile zu übersetzen. Die einstelligen Nummern mit Punkt mit Wildcards (?;*) in die Variable f umwandeln und an $mv übergeben. $echo und $sed ergänzt die fehlenden Nullen.

Bevor ich das Audio-Tool $sox vorstelle ein paar Worte zur Installation von nicht systemeigenen Eingabe-Tools. Das Installieren von diesen geht zum einen über den Sourcecode den man sich online beschaffen kann oder dem im Folgendene beschriebenen Tool $brew. Ersteres erfordert ein eigenes Tutorial, $brew dagegen installiert Prompt-Tools ohne viel Aufwand direkt von der Commandline. Mit dem folgende Einzeiler installiere ich zuerst $brew.

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Mit $brew installiere ich nun $sox.

$ brew install sox

Mehr infos zu $brew erhält man auf www.brew.sh oder wieder mit der Manual-Page von $brew.

Das sox-Manual öffnen mit

$ man sox

die Überschrift lautet:

NAME SoX-Sound eXchange, the Swiss Army knife of audio manipulation

$sox verarbeitet, spielt Soundfiles und nimmt auch solche auf. Das Manual umfasst 46 Seiten. Wer die man-Pages von sox separat öffnen, lesen und speichern möchte schreibt:

$ man -t sox | open -f -a preview

Der senkrechte Strich, der schon im "for loop" oben vorkam, verbindet zwei Befehle mit einer "Pipe". Mit einer Pipe kann man mehrere Commandline-Tools zu einer Reihe verbinden. Das sox-Manual wird sich darauf statt am Prompt in Preview öffnen, dem Programm Vorschau. Die Optionen -t, -f, -a ergänzen die Eingabe-Tools optional. Erste Optionen werde ich im Folgenden erklären.

Zur Vertiefung wiederhole ich die bisher verwendeten Begriffe.

Das Tutorial zeigt Anwendungen für die Kommandozeile. Anwendungen sind eigentliche Computerprogramme mit mehr oder weniger sinnigen Namen. Als Beispiel nehme ich die Anwendung $echo.

$ echo hallo welt

wiederholt ganz einfach das Dazugeschriebene. Als Antwort erhalte ich unter der Eingabezeile:

$ hallo welt

Die Kommandozeile ist der Ort wo ich das Kommando einschreibe, meist markiert mit einem $-Zeichen. Das Kommando umfasst den Namen der Anwendung und eine Ergänzung. Welche Ergänzung erlaubt oder möglich sind erklärt die Manualseite des betreffenden Tools. Hier der Anfang der man-Page von $echo.

$ man echo

NAME echo -- write arguments to the standard output

SYNOPSIS echo [-n] [string ...]

DESCRIPTION The echo utility writes any specified operands, separated by single blank (') characters and followed by a newline (\n') character, to the standard output.

The following option is available:

-n Do not print the trailing newline character.

Die erlaubten Ergänzungen zählt die SYNOPSIS auf, "echo [-n] [string ...]". Übersetzt heissen sie, $echo darf gefolgt werden von -n und text (string). Was die option -n bedeutet ist unter DESCRITPTION erklärt. Es heisst da übersetzt: "Mit der Option -n nach $echo wird der standardmässig gesetzte Zeilenwechsel am eingeschriebenen Text nicht gesetzt."

$ echo -n hallo welt hallo welt$

Die nächste Eingabezeile erscheint statt auf der nachfolgende auf der gleichen Zeile. Dies erkennt man am Dollarzeichen hinter welt. Das Dollarzeichen markiert ja den Ort wo die Eingabe zum nächsten Kommando erfolgt.

Dies war die kleine Wiederholung mit einer ersten Optionsbeschreibung. Ich komme nun zurück zum nächsten AudioTool, $sox.

Nachdem $sox mit $brew installiert ist, kann ich mit dem Befehl $sox Audiofiles bearbeiten. Eine Kurzübersicht zu den möglichen Befehlsergänzen gibt die Helpübersicht mit der Befehlsoption -h zum Anwendungsnamen.

$ sox -h

Die Help als kurzform des Manuals ist bei vielen Toos abrufbar. Bei $sox finde ich unter anderem die AUDIO FILE FROMATS die $sox verarbeitet. Oft muss ich ein Audioformat in ein Anderes umwandeln, zum Beispiel aiff in mp3. Der Befehl dazu wäre:

$ sox file.aiff file.mp3

Für eine Serienumwandlung schreibe ich wieder einen einzeiligen for-loop.

$ for f in *.aiff; do sox "$f" "${f%.aiff}.mp3"; done

Übersetzt: "for nennt alle aiff-Files f und verwandelt diese mit $sox zu mp3-Files". Die "" bewirken die Annahme von Filenamen zu Lehrzeichen. Lehrzeichen in Filenamen ergeben sonst eine Fehlermeldung.

Mit $sox erhalte ich zudem die Audio-Tools $play und $rec mitinstalliert.

Ich kann Audio-Files vom Prompt spielen mit dem Befehl

$ play myfile.mp3

und ich kann Musik direkt von der Kommandozeile aufnehmen.

$ rec mysession.wav

Ich schreibe $rec und einen Aufnahme-Session-Namen, hier mysession.wav. Mit dem Start der Aufnahme wird eine Information eingeblendet.

Input File : 'default' (coreaudio) Channels : 2 Sample Rate : 44100 Precision : 32-bit Sample Encoding: 32-bit Signed Integer PCM

In:0.00% 00:00:03.78 [00:00:00.00] Out:166k [ | ] Clip:0 Vor dem Aufnehmen in den Systemeinstellungemn unter Ton die Eingabe auf internes Mikrofon stellen. ich stoppe die Aufnahme mit ctr-c. ctr-c ist bei Unix die gebräuchliche Tastenkombination zum Unterbruch eines eines laufenden Programms.

Dies war eine kleine Einführung in ein paar Audio- und Prompt-Tools:

mac: drutil, man, brew, echo, sox, play und rec

linux: man, echo, sox, play und rec