Main /

Die Ideale Jukebox

Die Ideale Jukebox

Die Ideale mp3 Jukebox

UPDATE: Der folgende Text stammt von 2007. Seitdem wurde er nicht mehr aktualisiert. Möglicherweise gibt es eine Jukebox die die meisten der Wunschanforderungen erfüllt.

Seit langem bin ich (elsni) auf der Suche nach einer Software fürs Wohnzimmer die die Musiksammlung adäquat verwaltet. Zur Zeit ist es ein aktueller Billig-PC mit Windows XP Media Center Edition. Das Funktioniert zwar, ist jedoch teilweise sehr umständlich zu bedienen und läuft nur lokal.

Deshalb bin ich auf der Suche nach einer mp3-Serversoftware die als Dienst oder Hintergrundprozes auf einem Windows- oder Linux Recher läuft und Musikfiles und Playlisten verwaltet. Sie muß einen eigenen Server implementieren, damit Playlisten und Musikausgabe von verschiedenen Clients beeinflußt werden können. Der Serverprozeß selbst soll dabei keine Web-Oberfläche den Clients zu verfügung stellen, da diese auch z.B. ein PDA sein können. Wäre doch cool wenn man mit dem PDA in der Wohnung herumwandern und sich über WLAN sich neue Stücke wünschen könnte die in die Playlist wandern...

Anforderungen

Funktionen Serverprozeß

  • nicht interaktiv, läuft komplett unbermerkt im hintergrund
  • Läuft (auch) unter Windows, Linux wäre von Vorteil. (managed code? Java oder c# (mono))
  • indiziert mp3, ogg, wma und flac in eigener Datenbank
  • Implementiert eigenes XML-basiertes Protokoll
  • Verwaltet Titel und Playlisten
  • Clients können Titel zur Playlist hinzufügen, wenn Playlist leer erfolgt Zufallswiedergabe
  • In der Zufallswiedergabe werden alle Titel in zufälliger Reihenfolge gespielt, bereits gespielte Titel sind davon ausgenommen und werden erst dann wieder gespielt wenn alle Titel durch sind oder der Server neu gestartet wurde.

Funktionen Clients

  • Clients stellen Titelliste dar, es ist möglich Titel auszuwählen, diese werden in die Playlist eingefügt
  • Playliste kann bearbeitet werden
  • Client spielt gestreamte Musik ab
  • User können Stücke auswählen, diese werden zur Playlist hinzugefügt.
  • Playlist wird abgearbeitet - wenn sie leer ist erfolgt Zufallswiedergabe
  • In der Zufallswiedergabe werden alle Titel in zufälliger Reihenfolge gespielt, bereits gespielte Titel sind davon ausgenommen und werden erst dann wieder gespielt wenn alle Titel durch sind oder die Jukebox neu gestartet wurde.
  • Titel können mit Tastendruck abgebrochen werden, der nächste Titel wird gespielt.
  • Inkrementelle suche, d.h. jemand tippt einfach "abba", dann wird die Songliste nach Stücken in deren Interpretennamen oder Titel abba vorkommt gefiltert - Es erscheint dann also z.B. nur Abba - Dancing Queen und Black Sabbath - Paranoid. Die Liste sieht dann so aus als gäbe es nur die beiden Stücke. Nach einer gewissen Zeit (~30 sek) nach dem letzten Tastendruck wird der Filter wieder entfernt und alle Titel angezeigt.

Verschiedene Client-Modi:

1. Server verwendet globale Playlist, Sound wird vom Server gespielt
Party-Szenario: In verschiedenen Räumen stehen Clients, mit denen sich die Partygäste etwas wünschen können. Sound wird aber nur im Wohnzimmer gespielt, dort ist der Server an die Anlage angeschlossen.

2. Server verwendet globale Playlist, Sound wird auf Client gestreamt
Party-Szenario: In verschiedenen Räumen stehen Clients, mit denen sich die Partygäste etwas wünschen können. Sound wird auf auch auf Client gestreamt, damit ist in allen Räumen mit streaming client die gleiche Musik zu hören.

3. Server verwendet Playlist für diesen einen Client, Sound wird auf Client gestreamt Erweitertes Party-Szenario: In verschiedenen Räumen stehen Clients, mit denen sich die Partygäste etwas wünschen können. Sound wird auf auch auf Client gestreamt, wobei der Client jedoch eine eigene Playlist hat und nur die Musik spielt, die sich an diesem Client gewünscht wurde. Sehr sinnvoll bei größeren Partys wo sich garantiert ein Grüppchen mit gänzlich anderem Musikgeschmack in der Küche niederläßt happy smiley

(unausgegorene) Ideen zu den Kommandos des Servers

XML-Format eines Kommandos (wird vom Client zum Server gesendet):

<command>
   <name>Kommandoname</name>
   <parameters>
      <parameter name="Parametername">Wert</parameter>
      ...
   </parameters>
</command>

XML-Format der Antwort des Servers:

<answer>
   <status>ok/warning/error</status>
   <message>hier steht ok oder evtl. Fehlermeldung</message>
   <output>
      was hier drinsteht ist vom kommando abhängig
   </output>
</answer>

mögliche Kommandos

  • connect_client(client-ip) - Verbindet einen Client, Rückgabe einer client ID
  • close_client(client-id) - Meldet einen Client ab
  • connect_streaming_client(client-id, streaming-ip) - Verbindet einen Client als Soundausgabe-Stream
  • close_streaming_client(client-id, streaming-ip) - Meldet einen Streaming-client ab
  • set_playlist(client-id, playlist=<global|local>) - Damit kann der Client auf globale oder lokale Playlist wechseln
  • play(client-id) - Startet Sound
  • stop(client-id) - Stoppt Sound
  • skip(client-id) - Bricht aktuellen Song ab und spielt nächsten
  • get_songlist(client-id, sort=<title|artist>) - Liefert Liste aller Songs
  • get_playlist(client-id, sort=<title|artist>) - Liefert Liste aller Songs in der Playlist
  • add_to_playlist(client-id, song-id) - Fügt Titel zur Playlist hinzu
  • remove_from_playlist(client-id, song-id) - Löscht Titel in der Playlist

Die Konfiguration des Servers (wo liegen Musikfiles etc.) erfolgt über eine config-Datei.

Implementierung

Würde man sich rein auf der Windows Plattform bewegen könnte man einen Dienst und einen Webservice zur Kommunikation mit dem Dienst entwickeln. Ok, das ginge auch unter Linux, ich weiß nur nicht ob mono soweit ist, daß man auch Webdienste realisieren kann. Java ist nicht so mein Ding.
Eine andere Möglichkeit wäre die Entwicklung eines einzigen Hintergrundprogrammes das auch den Server implementiert. Dieser wäre recht einfach und deshalb nicht so aufwändig. Den Ansatz würde ich verfolgen, erleichtet die Portabilität. Die Clients kann man dann in einer beliebigen Sprache schreiben, ob portabel oder nicht.

Das Streaming ist sicherlich eine schwierige Sache, aber man könnte auf bestehende Software (z.B. icecast) zurückgreifen.

Real exitierende Programme

Real existierende Programme, die einen ähnlichen Ansatz verfolgen:

  • Edna - linux recht einfaches Python script. Hat längst nicht alle angedachten funktionen
  • ...
Frische Änderungen | Menü editieren
zuletzt geändert am 07.06.2011 22:31 Uhr von Elsni
Edit Page | Page History