Hallo Mädels und Jungs,
hier möchte ich nun mal mein kleines Projekt vorstellen und somit auch mal einen produktiven Beitrag leisten.
Das Projekt ist schon ziemlich weit fortgeschritten, dank der Antworten, die ich hier im Forum gefunden habe.
Aktuell fehlen nur noch Gehäuse, Lautsprecher, Verstärker und ein Drehencoder mit Taster (danke an [user]Neueinsteiger[/user], der in diesem Thread eine sehr gute Lösung für einen entprellten Drehencoder vorstellt).
Es funktioniert aber auch schon mit einfachen Tastern, die ich mir für Testzwecke mal in ein Gehäuse gebaut habe.
Liste der Bauteile (aktuell):
- Raspberry Pi 2 mit Raspian
- 1.8" TFT
- 4x Drucktaster (senden Tastatureingaben über ein Python-Skript)
- haufenweise Female-Jumper-Cable...
Geplant ist, den RPi eventuell sogar in ein vorhandenes Soundsystem [Anzeige] einzubauen.
Das ist der Code für die Oberfläche mit Python.Tkinter:
#!/usr/bin/python
from mplayer import Player, CmdPrefix
import Tkinter as TK
import tkFont, time
COLOR_BG = "#2ECCFA"
COLOR_TITLE = "#00FF80"
DEF_TITLE = "The Buster\'s\nRasPi Webradio"
STATION_LIST = [
["The Mix", "http://www.181.fm/winamp.pls?station=181-themix&file=181-themix.pls"],
["Kickin' Country", "http://www.181.fm/winamp.pls?station=181-kickincountry&file=181-kickincountry.pls"],
["Rock 181", "http://www.181.fm/winamp.pls?station=181-rock&file=181-rock.pls"],
["Power 181", "http://www.181.fm/winamp.pls?station=181-power&file=181-power.pls"],
["The Office", "http://www.181.fm/winamp.pls?station=181-office&file=181-office.pls"],
["The Vibe Of Vegas", "http://www.181.fm/winamp.pls?station=181-vibe&file=181-vibe.pls"],
]
def play_song(event):
Mplayer.stop()
global STATION_LIST
Index = Listbox.curselection()
print STATION_LIST[int(Index[0])][1]
Mplayer.loadlist(STATION_LIST[int(Index[0])][1])
def stop_song(event):
Mplayer.stop()
Window.itemconfig(TitleBox, text=DEF_TITLE)
def stdout_data(data):
if "ICY Info" in data:
print data
StreamTitle = data.split(";")[0].split("=")[1].lstrip("\'").rstrip("\'")
if StreamTitle == "":
Window.itemconfig(TitleBox, text=DEF_TITLE)
else:
if len(StreamTitle) >= 43:
StreamTitle = StreamTitle[:42]+".."
print len(StreamTitle)
print StreamTitle
Window.itemconfig(TitleBox, text=StreamTitle)
def parse_stdout():
Mplayer.stdout.connect(stdout_data)
def player_quit():
Mplayer.quit()
Master.destroy()
Master = TK.Tk()
Mplayer = Player()
LB_FONT = tkFont.Font(family='Helvetica',size=12)
TITLE_FONT = tkFont.Font(family='Helvetica',size=10)
Window = TK.Canvas(Master, width=160, height=128, bg=COLOR_BG)
Window.pack()
Frame_Listbox = TK.Frame(Window, bg="#00FF80", bd=0)
Window.create_rectangle(0,0,160,39, fill=COLOR_TITLE)
TitleBox = Window.create_text(80,18, justify=TK.CENTER, anchor="center", width=160, text=DEF_TITLE, font=TITLE_FONT)
Frame_Listbox.place(x=0, y=40)
Listbox = TK.Listbox(Frame_Listbox, width=20, height=4, bg=COLOR_BG, bd=0, selectmode='browse', font=LB_FONT)
for item in STATION_LIST:
Listbox.insert(TK.END, item[0])
Listbox.bind('<Return>', play_song)
Listbox.bind('<x>', stop_song)
Listbox.select_set(0)
Listbox.pack()
Listbox.focus()
Master.after(100, parse_stdout)
Master.protocol("WM_DELETE_WINDOW", player_quit)
Master.mainloop()
Alles anzeigen
Im weiteren Verlauf des Projektes, sollen folgende Features hinzugefügt werden:
- die STATION_LIST in eine XML-Datei auslagern und Übergeordnete Kategorien einfügen (Genres)
- Einstellungsmenü für z.B. WLAN, Farben, etc.
Ich freue mich über Anregungen und Ideen zu meinem Projekt.
Gruß
spacecab