Schau ich mir die commit-Liste an meldet sich doch recht eindeutig das Gefühl, dass ein bisschen viel Arbeit in dieses völlig unwichtige Nebenprojekt geflossen ist. Schließlich soll er nur vom Pogo aus Musik per Browser streamen.
So sieht er jetzt aus:
Die erwähnenswerten Verbesserungen seit der ersten Vorstellung:
Design
Vorher war er fast komplett ungestylt, jetzt ist er dunkel und hat halbtransparente dunkle Buttons mit Hovereffekten. Ich bin mir zwar nicht sicher, ob dieser dunkle Hintergrund wirklich gut aussieht und zu einem Musikspieler passt, aber im Vergleich zu vorher ist es bestimmt ein Fortschritt.
Automatisches Umkodieren
Ich hatte bei einem ähnlichen Projekt mitbekommen, dass das automatische Umkodieren der Musikdateien auch auf schwacher Hardware funktionieren sollte. Stimmt auch tatsächlich und ist zumindest noch so lange praktisch, bis der Firefox .mp3s unterstützt.
Ich wollte vor allem sehen, wie so etwas funktioniert. Leider wurde das nicht ganz perfekt: Durch den falsche Content-Length-Header (die Dateigröße steht ja beim ersten Abruf noch gar nicht fest) wird manchmal das on-the-fly kodierte Lied nicht ganz abgespielt, und wegen der fehlenden Range-Request-Unterstützung kann nicht frei vorgespult werden.
Damit das erzeugte Lied ohne Ladezeit gestreamt werden kann, muss der Webserver das unterstützen - webrick fällt damit weg, aber sowohl thin als auch puma sind Alternativen. Puma kommt ohne EventMachine aus und wurde daher von mir als Standard gesetzt.
Prefetching
Gapless Playback habe ich nicht hinbekommen, beim Wechsel zwischen Audioelementen stocken die Browser immer ein bisschen. Aber um das so weit wie möglich zu reduzieren, wird beim Abspielen des einen Liedes das nächste schon in den Dom geladen und vorgepuffert.
Suche
Die Mediendatenbank ist etwas durchsuchbar:
Das ist simpel gehalten und durchsucht bisher nur die Künstlernamen, funktioniert dafür aber angenehm schnell.
Fazit
Sicher ist das Software geworden, die ich eine ganze Weile benutzen werde - ist ja auch komplett an meinen Musikhörstil angepasst (albenweise hören, Album für Album). Aber durch die aufgetretenen Bugs mit dem HTML5-Audio-Element ist mir nun klar geworden, warum professionelle Software wie Google Musik immer noch auf Flash setzt.
Außerdem war es wieder ein Experiment, wie die Javascriptebene am besten gehandhabt wird, auf Serverebene bin ich mit Ruby und Sinatra erstmal ziemlich zufrieden. Nicht objektorierentiertes und fast pures Javascript ist es diesmal, nur mit snack.js (eigentlich nur für schönere Ajax-Aufrufe und Eventbinder), von dem ich angesichts mir vorher unbekannten kritischen Bugs etwas weniger überzeugt bin als zuvor. Zusätzlich scheitert es am aktuellen Opera, es ist einfach zu wenig gepflegt.
Das nächste mal werde ich es vielleicht mit dem anderen Extrem versuchen, objektorientiertes Javascript und eventuell ein Framework wie AngularJS.
Der Code liegt auf Github.