Open Source im professionellen Einsatz
Linux-Magazin 01/2006
© photocase.com

© photocase.com

Musikdateien mit Tcl bearbeiten

Der gute Ton

Ob gesungen, geklimpert oder geblasen: Musikdateien gehören zum Inventar vieler Computer. Als Universalwerkzeug für Aufgaben rund um den guten Ton bewährt sich Tcl. Dank der Erweiterung Snack beherrscht es Sound in vielen Formaten, es spielt, bearbeitet und analysiert ihn.

574

Musikdateien füllen bei vielen privaten PCs einen großen Teil der Festplatte. Dort lagern die Schätze von CDs, Internetradios und Podcasts. Um die Datenflut zu verwalten oder zu bearbeiten, fehlt manchmal das richtige Werkzeug. Wer mit eigenen Skripten nachhelfen will, findet in der Tcl-Erweiterung Snack [1] tatkräftige Hilfe.

Praktisches Nebenprodukt

Das Abspielen von Musik war gar nicht das Ziel von Snack-Entwickler Karen Sjölander, als er an der Stockholmer TU die Erweiterung programmierte. Am Institut für Sprachforschung fehlte ein einfach zu nutzendes Werkzeug, um menschliche Sprache zu untersuchen. Aus einem Bausatz für die Aufgaben in diesem Forschungsfeld ist ein umfangreiches Paket entstanden, das viele Probleme der Tonbearbeitung löst. Angefangen beim einfachen Abspielen vieler Audioformate bis hin zum Aufnehmen, Mischen, Filtern und Analysieren sind viele komplexe Funktionen enthalten.

Die Snack-Erweiterung gehört bei vielen Linux-Distributionen und bei der Tcl-Distribution von Active State [2] zum Lieferumfang. In diesem Fall genügt folgende Zeile im Skript, um die Erweiterung einzubinden:

package require snack


Wer Snack nicht in seiner Distribution findet, kompiliert die Erweiterung aus den Quellen oder verwendet die kompilierte Version von der Snack-Homepage. Bei ihr genügt es, das Archiv auszupacken und den Suchpfad von Tcl anzupassen. Liegt das Snack-Verzeichnis beispielsweise unter »~cz/lib/«, sind im Skript folgende Zeile notwendig:

lappend auto_path /home/cz/lib/snack2.2
package require snack


Sobald Snack geladen ist, stehen einige zusätzlichen Kommandos im Namespace »snack« zur Verfügung.

Der wichtigste Snack-Befehl ist »snack::sound« zum Laden und Abspielen von Musik. Ein einfaches Beispiel gibt Listing 1. Der größte Teil des Skripts dient dazu, das File mit einem Dateidialog auszuwählen, erst der Aufruf in Zeile 27 erzeugt mit »snack::sound ton« ein Tonobjekt mit Namen »ton«. Snack lehnt sich an die Programmierweise von Tk an. In bester Tk-Tradition verbindet Zeile 30 das Tonobjekt per »configure«-Methode mit einer Datei.

Klangvoll

Es gibt mehrere Wege, auf denen Snack zu seinen Tondaten kommt. Das Beispiel in Listing 1 verwendet die Option »-file Datei«; damit liest Snack die Daten erst während des Abspielens von der Festplatte. Für kleinere Files holt »-load« zunächst die ganze Datei in den Hauptspeicher, bevor es mit dem Spielen beginnt. Die Klangdateien dürfen in beiden Fällen in den üblichen Formaten wie WAV, MP3 oder Ogg Vorbis vorliegen, Snack erkennt sie automatisch.

Listing 1: Musikdateien
abspielen

01 #!/usr/bin/tclsh
02 # Wenn notwendig, Suchpfad erweitern
03 lappend auto_path /home/cz/Projekte/Linux-Magazin/XXVIII/snack2.2
04 
05 # Tk- und Snack-Erweiterung anfordern
06 package require Tk
07 package require snack
08 
09 # Hauptfenster verbergen
10 wm withdraw .
11 
12 # Datei wählen
13 set datei ""
14 while {[string length $datei] == 0} {
15   set datei [tk_getOpenFile -title "Musikdatei auswählen" 
16       -filetypes {{MP3 .mp3} {WAV .wav} {"OGG Vorbis" .ogg} {Alles *}}]
17   if {![file exists $datei]} {
18     set antwort [tk_messageBox -icon error 
19         -message "Datei »$file« existiert nicht, abbrechen?" 
20         -title "Fehler" -type okcancel]
21     if {[string match "cancel" $antwort]} {exit}
22     set datei ""
23   }
24 }
25 
26 # Tonobjekt erzeugen
27 snack::sound ton
28 
29 # Tonobjekt mit Datei verbinden
30 ton configure -file $datei
31 
32 # Tonobjekt abspielen und das Skript anschießend beenden
33 ton play -blocking false -command "exit"
34 
35 # Auf Wunsch vorher stoppen
36 tk_messageBox -icon question -message "Anhalten?" -type ok
37 ton stop
38 exit

Neben dem Laden versteht das Tonobjekt die Kommandos »play«, »pause« und »stop« zum Starten, Anhalten und Beenden der Wiedergabe. Bei Play entscheidet die Option »-blocking«, ob das Kommando bis zum Ende der Klangausgabe blockiert oder sofort zurückkehrt und Snack die Datei im Hintergrund abspielt.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Stern-Gucker

    Starkits verpacken ganze Tcl-Anwendungen inklusive aller benötigten Dateien in einem plattform- unabhängigen File. Das Ausliefern und Installieren (neudeutsch Deployment) reduziert sich so auf einfaches Kopieren. Aber auch Entwickler profitieren von der Sternenreise.

  • Spielkind

    Das schnelle Entwickeln von GUI-Anwendungen ist eine der Stärken von Tcl/Tk. Ein einfaches Spiel zeigt verschiedene Aspekte des Canvas-Widgets, von Animation über Bilder bis Zahlendarstellung.

  • Soziale Ader

    Dynamische Communities im Web lösen statische Seiten mehr und mehr ab. Die Teilnehmer nutzen Homepages nur noch als Anlaufstelle und tauschen Informationen mit Hilfe spezialisierter Software aus - bei Last.fm zum Beispiel über den eigenen Musikgeschmack.

  • Projekteküche

    Der Linux-Fan geht mit Gramps unter die Familienforscher. Das Genealogie-Programm hilft dabei, gesammelte Daten über die Ahnen auszuwerten. Dank Puppet automatisiert der Admin regelmäßig wiederkehrende Aufgaben. Zur Stärkung gibt's Spinatpastete.

  • Projekte

    Matrex revolutioniert die Zusammenarbeit von Datenbanken und Tabellenkalkulationen, Font Manager kümmert sich um Schriftarten, und Window Switch schickt wie von Zauberhand Programmfenster und ganze Desktops durchs Netz. Zu essen gibt's japanische Reisplätzchen.

comments powered by Disqus

Ausgabe 07/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.