Zip-Player spielt Musik aus Zip-Archive:
Teil 1

von Daniel Meiß-Wilhelm (Leiche)

Eines Tages fragte ein User im deutschem Forum nach "Zip Player." Verwundert fragte ich ihm was "Zip Player" sein soll. Er teilte mir mit das es Musik abspielen kann aus *.zip Archiven die man bei http://www.jamendo.com/ herunter laden kann ohne zu entpacken und das Foobar diese abspielen kann.

Darauf hin durchsuchte ich unsere Repositories nach dieser Funktion, jedoch fand ich nichts vergleichbares. Die Idee das sowas ein Player kann, faszinierte mich und ich fing an zu überlegen, wie ich das realisieren könnte. Heraus kam "Zip-Player (ist nun auch in den Repositories von PCLinuxOS enthalten), ein Servicemenu (Rechtsklick Menü oder Kontextmenü) für KDE4 (auch für andere Desktop-Umgebungen geeignet, dank Zenity als Dateien Browser) das Musik aus *.zip Archiven abspielt.

pic

So was wird benötigt?

Das erste was benötigt wird ist ein Player, der Verzeichnisse öffnen kann und die darin liegende Dateien abspielen kann. Ich entschied mich für XMMS, da dieser mich in all den Jahren nicht enttäuscht hat. Doch kann er auch Musik aus Zip Archive abspielen? Hier wird ein Script benötigt und ich fing an ein einfaches Script zu schreiben. Um nun ein Script zu erstellen, starten wir Kwrite und schreiben:

#!/bin/bash
#

Die erste Zeile sagt aus um was für eine Datei es sich handelt (Bash Script) und veranlasst Kwrite die Syntax Hervorhebung zu aktivieren. Wir speichern es als 'zip_player.' Mit dem Sharp Zeichen "#" kann man Programme deaktivieren bzw. aktivieren und Kommentare anfügen, die vom eigentlichen Programm ignoriert werden. Nun schreiben wir den Befehl:

xmms $HOME/

Moment mal, wir müssen erst das Archive öffnen. Also benötigen wir unzip. Wenn wir eine Konsole öffnen und dieses unzip — help eingeben, werden wir diese Beschreibung erhalten:

pic

Was wir brauchen ist unzip <Archiv> -d <Ziel>.

Das fügen wir in unser Script hinzu:

unzip <Archiv> -d <Ziel> && xmms $HOME/<Ziel>

Wird das den schon funktionieren? Wohl eher nicht, denn

  • <Archiv> Quelle und Name des Archives muß hier stehen
  • <Ziel> wohin das Archiv entpackt werden soll.
  • und nicht zu vergessen, das Script muß ausführbar gemacht werden.

Aber wie machen wir unser Script ausführbar? Ein Rechtsklick auf das Script öffnet ein Kontextmenü. In diesem wählen wir 'Eigenschaften' und klicken auf 'Berechtigungen', setzen bei "Ausführbar" einen Haken. Wenn wir jetzt das Script starten durch klicken auf dieses, wird es im Hintergrund ausgeführt, jedoch mit einem Fehler beendet, das unzip kein Archiv zum entpacken hat.

Kdialog

Was ist Kdialog genau? Konsole öffnen und schreiben kdialog --help und erhalten diese Beschreibung (in Deutsch für mich). Diese Beschreibung sollte eigentlich für jede Sprache verfügbar sein.

pic

Mit Kdialog können wir eine einfache GUI Anwendung erstellen. Das erleichtert uns das öffnen eines Zip Archiv für unserem Player. Bisher sieht unser Script wie folgt aus:

#!/bin/bash
#
unzip <Archiv> -d <Ziel> && <1>xmms $HOME/<Ziel>

Nun fügen wir diesen Befehl Kdialog --title "zip-player" --getopenfilename "open…" ein.

Die beiden "kaufmännische" Und Zeichen weisen das nächste Programm darauf hin zu warten, bis das erste mit seinem Job fertig ist. Auch müssen wir Attribute setzen, um diese unzip übergeben zu können. Um es einfach zu halten setzen wir folgenden Befehl ein:

SAVE=$(kdialog  --title "zip-player" --getopenfilename "open…")

Wir brauchen also nichts weiter eingeben um unzip das Archiv öffnen zu lassen außer $SAVE:

#!/bin/bash
#
SAVE=$(kdialog --title "zip-player" --getopenfilename "open…"
unzip $SAVE -d <Ziel> && xmms $HOME/<Ziel>

Wir müssen jetzt noch festlegen, wohin das Archiv entpackt werden soll:

#!/bin/bash
#
SAVE=$(kdialog --title "zip-player" --getopenfilename "open…"
unzip $SAVE -d $HOME/<Ordner> && xmms $HOME/<Ordner>

Wieso nicht einfacher in das Homeverzeichnis entpacken? Wenn wir ein weiteres Archiv entpacken wollen, so sollten wir das alte entpackte Archiv löschen. Das löschen können wir mit dem Befehl rm -rf erledigen. Aber zuerst müssen wir ein Ordner mit mkdir erstellen.

Erstellen, löschen, sonst noch was?

Unsere Anwendung wird nicht arbeiten können ohne das wir ein Ordner erstellen. Das Script soll eigentlich nur das *.zip Archiv in unser erstellten Ordner entpacken und XMMS den Weg zu unser Ordner zeigen. Nach dem abspielen bzw. schliessen von XMMS den Ordner löschen und nur den Ordner löschen. Nicht mehr...

#!/bin/bash
#
mkdir $HOME/.zplayer
SAVE=$(kdialog --title "zip-player" --getopenfilename "open…"
unzip $SAVE -d $HOME/.zplayer && xmms $HOME/.zplayer && rm -fr $HOME/.zplayer  | exit
pic

Nun können wir unsere MP3s gespeichert in Zip Archive mit XMMS abspielen. Hinweis: Sollte der Zip-Player mal nicht starten, dann schreibe folgenden Befehl in die Konsole:

rm -fr $HOME/.zplayer

Später (nächsten Monat), widmen wir uns dem Zip-Player ServiceMenu für KDE 4. Um mehr über die Kommandozeile zu erfahren, sollten Sie Peter Kelly's Serie "Einführung: Schnittstelle Kommandzeile." lesen.