¡Hola a todos!
Lo que me gustaría poder hacer, simplemente: « Gladys, pon el álbum de Daft Punk en el salón », o en una escena, « A las 7 h, reproduce mi lista de reproducción matutina en la cocina ». Y que funcione sin importar la fuente de la música (mi Navidrome, Spotify, Plex, una emisora de radio en línea…) y sin importar el altavoz (Sonos, amplificador, Chromecast…).
Hoy en día, todas las piezas existen, pero no se comunican entre sí. De ahí esta propuesta, que por ahora llamo Gladys Music. @pierre-gilles, me gustaría mucho tu opinión antes de seguir adelante.
¿En qué punto estamos?
- En cuanto a los altavoces, ya hay opciones: Sonos, AirPlay y Google Cast en el núcleo, e integraciones externas para DLNA, amplificadores Denon / Marantz, MusicCast, LinkPlay (WiiM…), Lyrion (Squeezebox), los Echo, VLC…
- En cuanto a la música, lo mismo: Subsonic / Navidrome, Spotify, Plex, Jellyfin, servidores DLNA, emisoras de radio en línea…
- Pero entre las dos, nada. Las funcionalidades de música del núcleo saben reproducir, pausar, siguiente, volumen y « reproducir una notificación », pero no « reproducir eso ». Y la IA de Gladys no tiene herramientas para la música: enciende la luz, pero no sabe reproducir un álbum.
Como resultado, cada integración hace lo suyo. Por ejemplo, la de DLNA sabe buscar un álbum en un servidor y reproducirlo en un amplificador, pero solo entre dispositivos DLNA y solo desde una escena. El tema no es nuevo: ya había « Gestión de servicio de música » en 2022.
La propuesta: tres piezas en el núcleo
1. Fuentes de música. Una integración (del núcleo o externa) puede declararse « fuente »: se le da un texto y un tipo (título, álbum, artista, lista de reproducción, radio), y devuelve resultados con su portada y cómo reproducirlos, generalmente una dirección de flujo. Subsonic, Plex, Jellyfin, servidores DLNA o una integración de emisoras de radio en línea encajan naturalmente aquí.
2. Reproductores que saben « reproducir eso ». Una nueva funcionalidad de música, por ejemplo play_media, junto a play_notification que ya sabe reproducir una dirección. El núcleo hace la conexión entre las dos:
- en el caso general, la fuente proporciona una dirección de flujo, y cualquier reproductor que sepa leer una dirección la reproduce (DLNA, Sonos, AirPlay, Cast…);
- cuando una fuente solo reproduce en su propio dispositivo (Spotify en sus dispositivos Spotify Connect), el núcleo solo ofrece los reproductores compatibles.
**3. Una sola forma de usarlo, en todas partes:
- una herramienta de música para la IA: « reproducir qué, dónde » (con una fuente preferida por defecto), más pausa / siguiente / volumen. Es lo que hace que el comando de voz sea natural, desde el micrófono del teléfono en la aplicación;
- una acción de escena « Reproducir música » con una búsqueda, válida para todas las fuentes y todos los altavoces;
- un widget « Música »: una búsqueda, una elección de altavoz, y listo.
Para las integraciones externas, bastaría con una declaración adicional en el manifiesto y el SDK (« soy una fuente », « este reproductor sabe reproducir una dirección »). No es necesario instalar un servidor más, a diferencia de Music Assistant en Home Assistant: funcionaría con lo que la gente ya tiene.
Lo que puedo aportar
Si la idea te gusta, puedo:
- escribir la especificación, siguiendo el modelo de
docs/specs/external-integrations; - hacer la parte del SDK para las integraciones externas;
- conectar las primeras fuentes y los primeros reproductores por mi parte (Subsonic, DLNA, una integración de emisoras de radio en línea…) para validar todo;
- y proponer una PR para el núcleo, si prefieres que me encargue yo en lugar de que lo hagas tú.
Mis preguntas
- ¿Te parece que el núcleo es el lugar adecuado, o lo ves de otra manera?
- ¿Más bien una nueva funcionalidad
play_media, o extenderplay_notificationque ya sabe reproducir una dirección? - En cuanto a la IA: ¿te parece bien una herramienta dedicada a la música, junto a las que ya controlan los dispositivos?
- ¿El nombre « Gladys Music » te dice algo, o tienes algo mejor?
Y para los demás: ¿esto se ajusta a sus usos? ¿Qué les faltaría?