Gib mir den Sound zurück.
Ich liebe gute
Musik, genau genommen Hard Rock und Heavy Metal! Was lag da also
näher, als bei der Arbeit am PC das Album der Wahl auf youtube zu
hören. Also den Browser geöffnet, youtube.de in die Adresszeile und
die Band gesucht, die mich bei meiner Arbeit begleitet. Dabei waren
und sind es nicht nur die Klassiker wie Iron Maiden, Judas Priest
oder ACDC, sondern gerne auch Newcomer der Metalszene. Jetzt war es
aber immer so, dass nach dem schließen des Browsers die
Newcomer-Alben verschwunden waren und mir die Namen der Bands später
nicht mehr in den Sinn kamen, denn Lesezeichen hatte ich nicht
angelegt. Ärgerlich! So überlegte ich mir, das Angenehme mit dem
Nützlichen zu verbinden indem ich ein kleines Tool schrieb, dass es
mir ermöglicht, die Alben – genau genommen die Stream-Adressen –
zu speichern und bei Bedarf abzuspielen. Es entstand die erste Version von BashJuke.
![]() |
BashJuke das "Hauptmenü" |
Was sollte BashJuke für mich tun?
Wie immer im Leben
basiert alles auf ein Geben und Nehmen, so wollte ich BashJuke eine
Streamadresse geben, die ich aus der youtube Adresszeile entnahm,
dafür sollte BashJuke mir wohlklingenden Metalsound um die Ohren
hauen. Diese Adresse sollte BashJuke in einer csv-Datei speichern und
ich wollte diese Adresse aus dieser Datei extrahieren und sie dem VLCMedia Player übergeben, der den gewünschten Stream wiederum
abspielt. So öffnete ich den VIM-Editor und schrieb mein Tool.
![]() | ||
Lemmys Streamadresse für BashJuke |
Wo sollen die Daten noch mal hin?
Zunächst muss BashJuke überprüfen ob die csv-Datei existiert, ich nannte sie soundlist.csv:
#!/bin/bash
clear
if [ -s soundlist.csv ] # soundlist.csv existiert und ist nicht leer
then
echo "Es stehen abrufbare Alben zur Verfügung. Have fun!"
else
touch soundlist.csv
fi
Ich will Dir den Sound geben, aber sag mir womit.
Als nächstes gilt es zu überprüfen, ob der VLC-Medienplayer installiert ist:
which vlc > /dev/null
if [ $? == 0 ]
then # ...wenn VLC installiert ist, Begrüßungsdialog
cat<<MENUE
bashJuke Version 0.0.2
Under GNU General Public License
Was möchten Sie tun?
1. Ein Album hinzufügen
2. Ein Album anhören
3. Soundliste bearbeiten
4. Beenden
MENUE
else
echo "Installieren Sie bitte den VLC Medien-Player"
fi
Was kann ich für Dich tun?
BashJuke bietet in dieser Version vier Optionen an, die ich ihm übergeben kann. Dazu benötigt er von mir Eingaben:
read -p "Geben Sie eine Option ein: " eingabe # Option 4 beendet bashJuke
if [ "$eingabe" == "4" ]
then
exit 0
fi
Erst prüfen, dann liefern!
Um das zu tun was ich mir von diesem Tool verspreche, ist die korrekte Eingabe das A und O. BashJuke überprüft sie:
if [ -z "$eingabe" -o -n "`echo \"$eingabe\" | tr -d '[1-4]'`" ]
then
echo "Geben Sie bitte eine Option von 1-4 an:"
exit 1
fi
clear
Ich hab da 'nen Stream den ich öfter mal hören will!
Um einen youtube-Stream in der Datei soundlist.csv zu speichern gab ich BashJuke folgenden Code mit auf den Weg:
if [ "$eingabe" == "1" ] # Album wird hinzugefügt...
then
nr=`awk -F";" 'NR {print $1}' soundlist.csv | wc -l`
((nr=$nr+1))
read -p "Geben Sie den Interpret ein: " interpret
clear
read -p "Geben Sie den Namen des Albums ein: " album
clear
read -p "Geben Sie das Jahr ein: " jahr
clear
read -p "Geben Sie die Quelle des Albums ein: " quelle
if [ "$quelle" == "" ] # Überprüft, ob Var $quelle leer ist
then
echo "Sie müssen mindestens die Quelle des Albums angeben!"
exit 1
fi
clear
datensatz=($nr\;$interpret\;$album\;$jahr\;$quelle) # Array erzeugt csv Datei
echo -e ${datensatz[@]}>>soundlist.csv # ...und der Datensatz an soundlist.csv
# angehängt
echo "Album hinzugefügt."
cp soundlist.csv soundlist.bak
fi
Hallo BashJuke, einmal Metal bitte!
Um in den Genuss des abgespeicherten Streams zu gelangen ist BashJuke so freundlich mir eine zwar etwas spartanische jedoch funktionierende Suchoption bereitzustellen:
# Album anhören
if [ "$eingabe" == "2" ]
then
clear
echo -e "Suchen Sie Ihr gewünschtes Album\n"
read -p "Geben Sie bitte den Suchbegriff ein: " such
clear
grep -i "$such" soundlist.csv | \
awk -F ";" 'BEGIN { print "\nNr Band Album Jahr"} \
# Gibt Muster auf stout aus
{ printf "%-10s %-15s %-25s %-25s\n", $1, $2, $3, $4 }'
# Filtert Adresse
grep -i "$such" soundlist.csv | awk -F";" '{ print $1, ";", $5 }'>/tmp/album
# Filtert Interpret
band=`grep -i "$such" soundlist.csv | awk -F ";" '{ print $2 }'`
echo "$band" >/tmp/band
artist=`uniq /tmp/band`
rm /tmp/band
grep -i "$such" soundlist.csv | awk -F";" '{ print $1, ";", $5 }'>/tmp/album
# Filtert Interpret
band=`grep -i "$such" soundlist.csv | awk -F ";" '{ print $2 }'`
echo "$band" >/tmp/band
artist=`uniq /tmp/band`
rm /tmp/band
echo -e "\nWelches Album von $artist möchten Sie sich anhören?\n"
read -p "Wählen Sie die Option des gewünschten Albums: " hear
# Bereitet Link auf
spiel=`grep -i "^$hear" /tmp/album | awk -F";" '{ print $2 }'`
rm /tmp/album
# Übergibt an vlc
nvlc $spiel
fi
Hey, die Streamadresse ist nicht mehr aktuell gib mir ne neue!
Da es häufiger einmal vorkommt, dass die Streamadressen auf youtube wechseln, ist BashJuke so freundlich mir eine Möglichkeit an die Hand zu geben, um die alte Adresse durch eine Aktuelle zu ersetzen. Der Einsatz von VIM ist hier gefragt:
# Überprüfen, ob vim installiert ist
which vim >/dev/null
if [ $? != 0 ]
then
echo "Installieren Sie bitte den vim-Editor"
elif [ "$eingabe" == "3" ]
then
vim soundlist.csv
fi
Na ja, elegant sieht anders aus!?
Zugegeben, diese Version ist alles andere als elegant und schöner Code ist etwas anderes. Das hier gezeigte Beispiel ist allerdings ein Beispiel dafür, was in der Shell in kurzer Zeit machbar ist um ein nützliches, dem Zweck angemessenes Tool zu schreiben. Es ist auf den speziellen Zweck zugeschnitten und tut, was es tun soll ;-)
Zu einem späteren Zeitpunkt werde ich hier die nach mehreren Versionssprüngen entwickelte aktuelle Version von BashJuke posten, die eine auf Zenity basierende grafische Benutzeroberfläche bereithält.
Ach ja, bevor ich es vergesse: Für den hier im Blog veröffentlichten Code übernehme ich weder irgendeine Haftung noch garantiere ich trotz Tests auf unterschiedlichen Systemen einen reibungslosen Ablauf der Programme.
Bis bald.
Keine Kommentare:
Kommentar veröffentlichen