ubuntuusers.de

Bash-Tuner - Webradio hören über die Shell

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

KarstenW.

Avatar von KarstenW.

Anmeldungsdatum:
27. Juni 2011

Beiträge: 208

Habe gerade aus Langeweile mal ein kleines Script unter Ubuntu 10.04 geschrieben, vielleicht mag es mal jemand testen und ein kleines Feedback abgeben. Da ich gerne Radio beim arbeiten höre, ungerne zig Webseiten anklicke und den Flashplayer im Browser eh nicht mag kam mir die Idee. Funktioniert prima und läuft im Hintergrund.

Info zum Script:

Mit diesem Shellscript empfangen Sie Radiostreams aus dem Internet. Durch Eingabe einer angezeigten Sendernummer wählt man den gewünschten Sender an. Das Script kann beliebig erweitert werden und an die Wünsche des Nutzers angepasst werden.

Voraussetzung ist der mplayer.

Das Script wird einfach in einen gewünschten Ordner entpackt und mit einem Doppelklick auf die Datei bash-tuner.sh “Ausführen im Terminal” gestartet. Sollte das Script nicht starten bzw. sich eine Textdatei öffnen muss es ausführbar gemacht werden.

Mehr Infos auf meiner Webseite: http://www.bitdome.de/

bash-tuner.sh.tar.gz (815 Bytes)
Download bash-tuner.sh.tar.gz

tahr09

Anmeldungsdatum:
5. Januar 2011

Beiträge: 946

Hey,

etwas ähnliches habe ich vor kurzen auch gebastelt.

Die Idee ist echt gut ☺

Eleganter fände ich es noch, wenn die Senderauswahl grafisch erfolgt.

Ich würde das so machen:

1
2
3
4
5
#! /bin/bash


#Senderwahl grafisch erfragen
sender=$(zenity  --list --width=600 --height=400 --text "Wähle einen Sender:" --column " " 'Radio Vorarlberg' 'Antenne Vorarlberg - HD ' 'ANTENNE VORARLBERG - Partymix ' 'ANTENNE VORARLBERG - Die 80er' 'ANTENNE VORARLBERG - Schlagerkult' 'ANTENNE VORARLBERG - Lounge' 'ANTENNE VORARLBERG - Classic Rock' 'ANTENNE VORARLBERG - Hit' 'ANTENNE VORARLBERG - Lovesongs' 'ANTENNE VORARLBERG - Die 90er' 'ANTENNE VORARLBERG - Die 70er' --separator=":" --title="Senderwahl" );

Jetzt ist die Auswahl des Users in der Variable $sender gespeichert.

Diese kannst du dann auswerten:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#Wenn der User 'Radio Voralberg' wählt, dann starte mplayer mit Stream
if [ $sender = 'Radio Voralberg' ]
then
 mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1568257
 exit 1


#Wenn der User 'Antenne Vorarlberg - HD ' wählt, dann starte mplayer mit Stream
elif [ "$sender" = 'Antenne Vorarlberg - HD ' ]
then
 mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=2301871
 exit 1

..
..
..
..

# If-Schleife beenden
fi

# Script beenden
exit 1

So irgendwie.. Weißt du wie ich meine?

Nur die Abfrage findet dann also grafisch statt.

Wenn du allerdings auf sowas verzichten möchtest, dann vergiss alles ganz schnell wieder 👍

Soweit zu meinen Ideen zur Verbesserung.

PS: Vergesse nicht den exit Befehl am Ende eines Scriptes.

Anbei ein Screenshot der Ausgabe meiner Abfrage.

lg

Bilder

KarstenW.

(Themenstarter)
Avatar von KarstenW.

Anmeldungsdatum:
27. Juni 2011

Beiträge: 208

Hey,

danke für das Feedback. Die Idee mit Zenity ist gut und das werde ich auch bestimmt umsetzen um das ganze ein bisschen grafischer zu gestalten. Mit dem mplayer lassen sich viele Ideen richtig gut realisieren. Ähnliches wie mit dem Radio habe ich schon mit Vodcasts (mp4) von Podcast.de umgesetzt. Im lokalen Netzwerk nutze ich ein ähnliches Script zum streamen von Musik und Videos. Momentan bastel ich noch daran einen Stream auf die Platte zu speichern, auch das macht der mplayer hervorragend.

Was mir noch fehlt ist eine Möglichkeit Youtube Videos mit dem mplayer abzuspielen.

Vielleicht hat der ein oder andere noch eine Idee die man umsetzen kann. Denkbar wäre auch alles in einem Script zu verpacken um ein Multifunktionsprogramm daraus zu machen.

lg

berndd

Anmeldungsdatum:
24. März 2007

Beiträge: 944

Hallo,

habe das Skript auf Funktion überprüft- soweit ich sehe funktionieren alle Funktionen. Da ich solche Skripte am liebsten per Tastenkombination aufrufe, habe ich das Skript in einem Verzeichnis abgespeichert und unter System/Einstellungen/Tastenkombinationen eine neu Kombination angelegt. Damit sich beim Start per Kombination auch ein Terminal öffnet starte ich das Skript mit dem Befehl:

1
gnome-terminal -e /home/bernd/ubuntu/bash-tuner.sh

Finde das Skript auch in dieser Fassung für meine Ansprüche genügend - muss nur noch ein paar Sender hinzufügen.

Gruß Bernd

KarstenW.

(Themenstarter)
Avatar von KarstenW.

Anmeldungsdatum:
27. Juni 2011

Beiträge: 208

Hallo Bernd,

danke für das Feedback freut mich das Dir das Script gefällt.

lg

berndd

Anmeldungsdatum:
24. März 2007

Beiträge: 944

Hallo,

noch ein kleiner Nachtrag: Das Skript in meinem Homeverzeichnis auszuführen hat mit dem Aufruf über die Tastenkombination zu starten hat nicht geklappt. Nach drücken der q Taste ist die Konsole geschlossen worden. Habe das Skript unter /usr/local/bin abgespeichert. Jetzt funktioniert es.

Vielen Dank für das Skript.

Gruß

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17576

Wohnort: Berlin

Wenn Du hier ein wenig gelesen hättest, bevor Du schreibst, hättest Du merken können, dass Du ein Skript, das komprimiert 800 Bytes groß ist, einfach in einem Codeblock einfügst und fertig.

Im Netz ist jeder Klick ein Hemmnis, eine Schranke, eine Hürde. Ich muß, auch wenn ich nur mal einen Blick drauf werfen will, runterladen, entzippen, und dann in einen Editor laden, sehr viel Gelegenheit zu sagen: ach ne!

Und wenn ich dann was kritisiere weiß keiner, wovon ich spreche, oder muss es selbst runterladen, und wenn die Diskussion weitergeht, nochmal runterladen - oder es liegt irgendwo rum, und vermüllt das System.

Hier ist es:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/bash
# Bash-Tuner
# Ein Script von Karsten Weidenfeld (2011)
clear
echo  ====================================
echo    Antenne Vorarlberg @ Bash-Tuner @ 
echo      http"://www.Bitdome.de"        
echo  ====================================
echo
echo "      1. Radio Vorarlberg 
      2. Antenne Vorarlberg - HD 
      3. ANTENNE VORARLBERG - Partymix 
      4. ANTENNE VORARLBERG - Die 80er
      5. ANTENNE VORARLBERG - Schlagerkult 
      6. ANTENNE VORARLBERG - Lounge 
      7. ANTENNE VORARLBERG - Classic Rock
      8. ANTENNE VORARLBERG - Hit
      9. ANTENNE VORARLBERG - Lovesongs
      10.ANTENNE VORARLBERG - Die 90er
      11.ANTENNE VORARLBERG - Die 70er"
echo
echo "Playersteuerung: [9] Leiser [0] Lauter [Q) Sender beenden [url] Streamadresse abspielen"
echo
echo "Bitte geben Sie die Programmnummer ein
Programm beenden mit [x]:"

read sendernummer
case "$sendernummer" in
1)
clear
#1.Radio Vorarlberg
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1568257
;;
2)
clear
#2.Antenne Vorarlberg HD
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=2301871
;;
3)
clear
#3.ANTENNE VORARLBERG - Partymix
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1271847
;;
4)
clear
#4.ANTENNE VORARLBERG - Die 80er
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1280075
;;
5)
clear
#5.ANTENNE VORARLBERG - Schlagerkult
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1270547
;;
6)
clear
#6.ANTENNE VORARLBERG - Lounge
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1268946
;;
7)
clear
#7.ANTENNE VORARLBERG - Classic Rock
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=927112
;;
8)
clear
#8.ANTENNE VORARLBERG - Hit
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1275817
;;
9)
clear
#9.ANTENNE VORARLBERG - Lovesongs
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1268893
;;
10)
clear
#10.ANTENNE VORARLBERG - Die 90er
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1266169
;;
11)
clear
#11.ANTENNE VORARLBERG - Die 70er
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=2166816
;;
url)
echo "Bitte geben Sie die Streamadresse ein die abgespielt werden soll:"
read streamurl
clear
mplayer -playlist $streamurl
;;
x)
exit
;;
*)
bash bash-tuner.sh
;;
esac
bash bash-tuner.sh

Auf die schnelle sehe ich 3 Kritikpunkte:

  1. clear löscht den Bildschirm, und das macht man unter Unix nicht. Vielleicht steht da was, was der User noch braucht.

2. Durchgehende Großschreibung wie "ANTENNE VORARLBERG" gilt als Brüllen, und liest sich schlecht, weil es keine Variation in der Zeichengröße gibt.

3. Für die Sender gibt es ja ein Mapping Name=>id. Würde man die Senderliste in einer Datei im Userverzeichnis pflegen, dann könnten mehrere User das Programm mit unterschiedlichen Sendern pflegen. Man hätte Programm und Daten getrennt.

tahr09

Anmeldungsdatum:
5. Januar 2011

Beiträge: 946

clear löscht den Bildschirm, und das macht man unter Unix nicht. Vielleicht steht da was, was der User noch braucht.

Das hatte ich zu Beginn auch gedacht.

Allerdings ist das so nicht ganz richtig, zumindest in all meinen bisherigen Scripten.

Clear verschiebt im Bash-Script alles bisherige aus dem Blickfeld. Mit der Scrollbar kann man nach oben fahren und die vorherigen Ereignisse einsehen.

Es täuscht also im Prinzip nur ein frisches Fenster vor.

KarstenW.

(Themenstarter)
Avatar von KarstenW.

Anmeldungsdatum:
27. Juni 2011

Beiträge: 208

Hallo,

ich bedanke mich erstmal für euer Feedback. Sicher ich hätte das Script einfach in einen Codeblock einbauen können, sorry daran habe ich nicht gedacht. Die Sendernamen habe ich so aus dem Shoutcast.com Verzeichnis übernommen. Die Idee mit der Mapping ID finde ich gut, allerdings weiß ich nicht genau wie man das realisiert. Das ich clear eingesetzt habe hat genau den Grund den Julian92 genannt hat.

@Bernd - Danke für den Hinweis.

tahr09

Anmeldungsdatum:
5. Januar 2011

Beiträge: 946

allerdings weiß ich nicht genau wie man das realisiert.

Eventuell irgendwie so:

Datei mit den Sendern: (Man nenne sie Sender, und lege sie in /$HOME ab

1. Radio Vorarlberg 
2. Antenne Vorarlberg - HD 
3. Antenne Vorarlberg - Partymix 
4. Antenne Vorarlberg - Die 80er
5. Antenne Vorarlberg - Schlagerkult 
6. Antenne Vorarlberg - Lounge 
7. Antenne Vorarlberg - Classic Rock
8. Antenne Vorarlberg - Hit
9. Antenne Vorarlberg - Lovesongs
10.Antenne Vorarlberg - Die 90er
11.Antenne Vorarlberg - Die 70er

Und im Script selbst, dann:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
# Bash-Tuner
# Ein Script von Karsten Weidenfeld (2011)
echo  ====================================
echo    Antenne Vorarlberg @ Bash-Tuner @ 
echo      http"://www.Bitdome.de"        
echo  ====================================

# Senderliste importieren und in Variable schreiben
senderliste=`cat $HOME/Sender`

# Senderliste anzeigen
echo "$senderliste"

echo "Playersteuerung: [9] Leiser [0] Lauter [Q) Sender beenden [url] Streamadresse abspielen"
echo
echo "Bitte geben Sie die Programmnummer ein
Programm beenden mit [x]:"

read sendernummer

..und 
..so
..weiter

Jetzt hast du ja bald genug Stoff für eine Version 2.

War jetzt nur auf die schnelle, und ohne groß darüber nachzudenken.

Müsste aber eigentlich so in der Art machbar sein.

Wenn du meine erste Idee mit Zenity realisieren willst, sieht die Geschichte aber etwas anders aus.

btw: Das Clear in Zeile 4 hat keinen Nutzen 😉

KarstenW.

(Themenstarter)
Avatar von KarstenW.

Anmeldungsdatum:
27. Juni 2011

Beiträge: 208

Mit Zenity tu ich mich ehrlich gesagt ein bisschen schwer und wenn ich mich an der grafischen Senderauswahl versuche bekomme ich immer den Fehler "Zu viele Argumente". Bisher habe ich den Fehler noch nicht verstanden.

Die Idee die Sender in einer eigenen Datei zu speichern ist gut. Allerdings erkenne ich noch nicht richtig wie das Script meine Eingabe auswertet und dann die entsprechende URL aus der Datei holen will um sie an den mplayer zu übergeben. Dafür müsste das Script entsprechend einer Eingabe die Sender URL aus Zeile ... der Datei Beispiel "Senderliste" holen. Wäre sicherlich interessant wenn man das realisieren könnte.

busfahrer

Avatar von busfahrer

Anmeldungsdatum:
9. April 2007

Beiträge: 3052

KarstenW. schrieb:

Mit Zenity tu ich mich ehrlich gesagt ein bisschen schwer

Das könnte mit Zenity vielleicht ungefähr so aussehen(in gekürzter Form)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# Bash-Tuner
# Ein Script von Karsten Weidenfeld (2011)
clear
echo  ====================================
echo    Antenne Vorarlberg @ Bash-Tuner @ 
echo      http"://www.Bitdome.de"        
echo  ====================================
echo
echo "Playersteuerung: [9] Leiser [0] Lauter [Q) Sender beenden [url] Streamadresse abspielen"
echo
sendernummer=$(zenity --list --radiolist --width=500 --height=500 --text "Senderauswahl"\
 --title "Senderliste" --column " " --column Sender-Nr. --column Sender " " 1 "Radio Vorarlberg"\
  " " 2 "Antenne Vorarlberg - HD" " " "x" "exit")
case "$sendernummer" in
1)
clear
#1.Radio Vorarlberg
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1568257
;;
2)
clear
#2.Antenne Vorarlberg HD
mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=2301871
;;
x)
exit
;;
*)
bash bash-tuner.sh
;;
esac
bash bash-tuner.sh

Das ist aber auf jeden Fall noch verbesserungswürdig, da das Beenden des Programms nicht ganz reibungslos funktioniert.

Gruß...busfahrer

€dit: Das Beenden funktioniert so auch problemlos, hatte eben wohl nur einen Furz quer sitzen ☺

KarstenW.

(Themenstarter)
Avatar von KarstenW.

Anmeldungsdatum:
27. Juni 2011

Beiträge: 208

Hallo Busfahrer,

ja so ähnlich habe ich das auch schon, der Fehler von Julian war die IF Anweisung die funktioniert nicht man muss das mit CASE lösen. Das ganze mit Zenity grafisch aufzuwerten ist ansich nicht schwer, allerdings versuche ich momentan die URL aus einer seperaten Datei zu holen und mit dem Script an mplayer zu übergeben.

Das nächste Problem ist, wenn ich das Script mit Zenity direkt ausführe, also ohne Terminal sieht das gut aus weil man das Terminalfenster nicht mehr sieht. Allerdings kann man dann den Stream nicht mehr beenden ☺ Zwar lässt der sich in einem neuen Terminalfenster per killall mplayer abwürgen, aber das ist nicht so die feine Art. Überlege gerade wie ich einen Button realisiere um das Radio zu stoppen und wieder in die Senderauswahl gelangen kann.

Gruß Karsten

KarstenW.

(Themenstarter)
Avatar von KarstenW.

Anmeldungsdatum:
27. Juni 2011

Beiträge: 208

Hallo,

Dank Julian92 konnte ich den Bash-Tuner durch Einsatz von Zenity nun etwas eleganter gestalten. Gemeinsam mit Julian92 arbeite ich derzeit an einem Projekt das wir nach Fertigstellung hier bei Ubuntuusers.de veröffentlichen.

An dieser Stelle möchte ich nun den Bash-Tuner in der Zenity Version vorstellen. Das Ausführen muss jetzt nicht mehr zwingend im Terminal erfolgen. Das Script einfach in eine Textdatei kopieren, unter gewünschten Namen .sh abspeichern und ausführbar machen. Mit einem Doppelklick und der Auswahl "ausführen" wird das Script gestartet. Sender doppelt anklicken oder mit Ok auswählen und das Radio öffnet sich im VLC Player.

Tipp: In dieser Version schließt sich das Script nachdem der VLC Player startet, allerdings kann man das ändern in dem man "& exec /[Pfad]/[Scriptname].sh hinter jedem Aufruf des VLC Players an das Ende der Stream URL setzt. Danach würde das Auswahlmenü nach Senderstart immer wieder neu starten bis man es mit abbrechen beendet.

Die Senderliste kann kinderleicht beliebig erweitert werden. Oben in der Zeile wo die zenity Liste erstellt wird 'Sendername'hinzufügen und dann am Ende des Scripts die Schleife erweitern. Am Ende muss natürlich immer fi stehen um die Schleife zu beenden. Wie das gemacht werden muss sollte beim ansehen des Scriptes klar sein.

Jetzt zum Script:

Voraussetzung ist zenity und der VLC Player, beides ist in den offiziellen Quellen vorhanden. Zur Installation dieser Programme erfährt man im Wiki mehr.

Hier nun das Script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash
#Bash-Tuner (Zenity)
#Autor: Karsten Weidenfeld
#www.Bitdome.de

auswahl=$(zenity  --list --width=280 --height=230 --text "Sender auswählen:" --column " " 'Hellweg Radio' 'Radio FFH' 'Radio FFH Top40' 'Radio FFH Die 80er' 'Radio FFH Rock' 'Radio FFH Beats' 'Radio FFH Eurodance' 'Radio FFH Deutsch Pur' 'Radio FFH Soundtrack' 'Radio FFH Hits für Kids' 'Radio FFH Schlagerkult'  --title="Bash-Tuner (Zenity)" );


if [ "$auswahl" = 'Hellweg Radio' ]
then
#Hellweg 
killall vlc
vlc http://yp.shoutcast.com/sbin/tunein-station.pls?id=465578 
exit 1

elif [ "$auswahl" = 'Radio FFH' ]
then
#Radio FFH
killall vlc
vlc http://streams.ffh.de/radioffh/mp3/hqlivestream.m3u 
exit 1

elif [ "$auswahl" = 'Radio FFH Top40' ]
then
#Radio FFH Top40
killall vlc
vlc http://streams.ffh.de/ffhchannels/mp3/hqtop40.m3u
exit 1

elif [ "$auswahl" = 'Radio FFH Die 80er' ]
then
#Radio FFH Die 80er
killall vlc
vlc http://streams.ffh.de/ffhchannels/mp3/hq80er.m3u
exit 1

elif [ "$auswahl" = 'Radio FFH Rock' ]
then
#Radio FFH Rock
killall vlc
vlc http://streams.ffh.de/ffhchannels/mp3/hqrock.m3u
exit 1

elif [ "$auswahl" = 'Radio FFH Beats' ]
then
#Radio FFH Beats
killall vlc
vlc http://streams.ffh.de/ffhchannels/mp3/hqelectrobeatz.m3u
exit 1

elif [ "$auswahl" = 'Radio FFH Eurodance' ]
then
#Radio FFH Eurodance
killall vlc
vlc http://streams.ffh.de/ffhchannels/mp3/hqeurodance.m3u 
exit 1

elif [ "$auswahl" = 'Radio FFH Deutsch Pur' ]
then
#Radio FFH Deutsch Pur
killall vlc
vlc http://streams.ffh.de/ffhchannels/mp3/hqdeutsch.m3u
exit 1

elif [ "$auswahl" = 'Radio FFH Soundtrack' ]
then
#Radio FFH Soundtrack
killall vlc
vlc http://streams.ffh.de/ffhchannels/mp3/hqsoundtrack.m3u
exit 1

elif [ "$auswahl" = 'Radio FFH Hits für Kids' ]
then
#Radio FFH Hits für Kids
killall vlc
vlc http://streams.ffh.de/ffhchannels/mp3/hqhits4kids.m3u 
exit 1

elif [ "$auswahl" = 'Radio FFH Schlagerkult' ]
then
#Radio FFH Schlagerkult
killall vlc
vlc http://streams.ffh.de/ffhchannels/mp3/hqschlager.m3u
exit 1

fi

Natürlich freue ich mich über jegliches Feedback.

Gruß Karsten

dAnjou

Avatar von dAnjou

Anmeldungsdatum:
8. Oktober 2007

Beiträge: 872

Wohnort: Berlin

Auweia! Niemals killall in einem Skript verwenden! Was, wenn der Nutzer andere Instanzen von VLC offen hat und diese auch weiterhin offen haben will? Es gibt Möglichkeiten, sich die Prozess-ID eines gestarteten Programms zu holen und dann gezielt zu killen.

Antworten |