Hallo zusammen!
Was ich gerne könnte, ganz einfach: « Gladys, spiel das Album von Daft Punk im Wohnzimmer ab », oder in einer Szene, « Um 7 Uhr meine Morgen-Playlist in der Küche abspielen ». Und das sollte funktionieren, egal ob die Musikquelle (mein Navidrome, Spotify, Plex, ein Webradio…) oder die Lautsprecher (Sonos, Verstärker, Chromecast…) ist.
Heute gibt es zwar alle Bausteine, aber sie kommunizieren nicht miteinander. Deshalb dieser Vorschlag, den ich vorläufig Gladys Music nenne. @pierre-gilles, ich würde gerne deine Meinung hören, bevor ich weitergehe.
Stand der Dinge
- Bei den Lautsprechern gibt es schon viel: Sonos, AirPlay und Google Cast im Kern, und externe Integrationen für DLNA, Denon-/Marantz-Verstärker, MusicCast, LinkPlay (WiiM…), Lyrion (Squeezebox), Echo, VLC…
- Bei der Musik genauso: Subsonic/Navidrome, Spotify, Plex, Jellyfin, DLNA-Server, Webradios…
- Aber dazwischen ist nichts. Die Musikfunktionen des Kerns können abspielen, pausieren, weiter, Lautstärke und « eine Benachrichtigung abspielen », aber nicht « spiel das ab ». Und Gladys’ KI hat kein Werkzeug für Musik: Sie schaltet das Licht ein, aber sie kann kein Album abspielen.
Das Ergebnis ist, dass jede Integration in ihrem eigenen Winkel bastelt. Die DLNA-Integration kann beispielsweise ein Album auf einem Server suchen und auf einem Verstärker abspielen, aber nur zwischen DLNA-Geräten und nur aus einer Szene heraus. Das Thema ist nicht neu: Es gab bereits « Musikdienstverwaltung » im Jahr 2022.
Der Vorschlag: drei Bausteine im Kern
1. Musikquellen. Eine Integration (im Kern oder extern) kann sich als « Quelle » deklarieren: Man gibt ihr einen Text und einen Typ (Titel, Album, Künstler, Playlist, Radio), sie gibt Ergebnisse mit ihren Covern und der Möglichkeit, sie abzuspielen, meist eine Stream-Adresse. Subsonic, Plex, Jellyfin, DLNA-Server oder eine Webradio-Integration passen natürlich hierher.
2. Player, die « das abspielen » können. Eine neue Musikfunktion, zum Beispiel play_media, neben play_notification, die bereits eine Adresse abspielen kann. Der Kern stellt die Verbindung her:
- im Allgemeinen liefert die Quelle eine Stream-Adresse, und jeder Player, der eine Adresse abspielen kann, spielt sie ab (DLNA, Sonos, AirPlay, Cast…);
- wenn eine Quelle nur bei sich selbst abspielt (Spotify auf ihren Spotify-Connect-Geräten), schlägt der Kern nur die kompatiblen Player vor.
3. Eine einzige Art, es zu nutzen, überall:
- ein Musikwerkzeug für die KI: « spiel was, wo » (mit einer Standardquelle), plus Pause/Weiter/Lautstärke. Das macht die Sprachsteuerung natürlich, vom Mikrofon des Telefons in der App aus;
- eine Szenenaktion « Musik abspielen » mit einer Suche, gültig für alle Quellen und alle Lautsprecher;
- ein « Musik »-Widget: eine Suche, eine Lautsprecherauswahl, und los geht’s.
Für externe Integrationen würde eine zusätzliche Deklaration im Manifest und im SDK ausreichen (« ich bin eine Quelle », « dieser Player kann eine Adresse abspielen »). Kein zusätzlicher Server muss installiert werden, im Gegensatz zu Music Assistant bei Home Assistant: Es würde mit dem funktionieren, was die Leute bereits haben.
Was ich beitragen kann
Wenn dir die Idee gefällt, kann ich:
- die Spezifikation schreiben, nach dem Vorbild von
docs/specs/external-integrations; - den SDK-Teil für externe Integrationen machen;
- die ersten Quellen und die ersten Player auf meiner Seite anschließen (Subsonic, DLNA, eine Webradio-Integration…) zur Validierung;
- und einen PR für den Kern vorschlagen, wenn du lieber möchtest, dass ich mich darum kümmere, anstatt dass du es selbst machst.
Meine Fragen
- Kommt der Kern dir als der richtige Ort vor, oder siehst du das anders?
- Lieber eine neue Funktion
play_media, oderplay_notificationerweitern, die bereits eine Adresse abspielen kann? - Bei der KI: Ein dediziertes Musikwerkzeug neben denen, die bereits die Geräte steuern, ist in Ordnung?
- Der Name « Gladys Music » spricht dich an, oder du hast eine bessere Idee?
Und für die anderen: Entspricht das euren Anwendungsfällen? Was würde euch fehlen?