Sobre el proyecto
TastyTunes es una aplicación de escritorio que actúa como control remoto para los reproductores de red de Cambridge Audio basados en la plataforma StreamMagic. El README menciona como modelos compatibles el Evo 75/150, CXN100 y CXN (V2), MXN10, AXN10, EXN100, Edge NQ y 851N, con desarrollo y pruebas diarias realizadas en un Evo 150. La aplicación se ejecuta localmente, se comunica con el streamer a través de la red del usuario y no requiere cuenta ni servicio en la nube.
Se publican instaladores para macOS 11+ (universal, firmado y notarizado), Windows 10+ (un único instalador firmado que cubre x64 y arm64) y Linux (AppImage x64 o arm64, incluyendo Raspberry Pi OS de 64 bits). Al iniciarse, la aplicación descubre dispositivos StreamMagic en la red mediante SSDP, y se puede introducir una dirección IP manualmente si la detección no encuentra nada. Un modo demo ejecuta toda la aplicación contra un streamer virtual integrado y dos bibliotecas de muestra, sin necesidad de hardware.
La sección Now Playing presenta el arte del álbum en tamaño grande sobre un fondo difuminado, detalles de la pista, insignias de formato para códec, frecuencia de muestreo, profundidad de bits, lossless y MQA, y un indicador de calidad de señal cuyos estados difieren tanto en forma como en color. Se ofrece un modo de pantalla completa Display, un mini reproductor sin marco siempre visible y un panel opcional en la barra de menú o bandeja del sistema junto con la ventana principal.
La función de biblioteca agrupa cada servidor de medios UPnP local y el almacenamiento USB del streamer en vistas de Artistas, Álbumes y Pistas, respaldadas por un índice local reconstruible que admite la búsqueda mientras se escribe en todas las fuentes. El filtrado y la ordenación abarcan el género, la década, el formato, el rango dinámico y una distinción entre álbumes y recopilatorios. El manejo de álbumes mantiene a los invitados destacados en su lugar, agrupa los recopilatorios bajo Various Artists, muestra divisores de disco para sets de varios discos y colapsa las cajas de varios volúmenes detrás de un selector de volumen. El arte faltante puede completarse desde el Cover Art Archive.
Más allá de la reproducción de la biblioteca, existen favoritos, listas de reproducción almacenadas localmente basadas en la definición del contenido, una cola con selección múltiple y reordenación por arrastre, los 99 slots de presets del streamer (recuperables mediante teclas numéricas, cada uno capaz de mantener su propio volumen), un EQ de siete bandas con tilt y balance, cambio de fuente y navegación por el directorio de radio-browser.info con categorías de género y década. Las letras sincronizadas provienen de LRCLIB y se resaltan línea por línea; al hacer clic en una línea, se busca dicha posición. Las biografías de artistas y los datos de álbumes se extraen de MusicBrainz y Wikipedia, con enlaces de atribución.
El análisis de audio lee archivos de servidores de medios locales para dibujar una forma de onda en la barra de búsqueda y bajo el arte, y para calcular un valor de rango dinámico siguiendo el procedimiento TT-DR de la base de datos DR, que luego se convierte en una opción de filtro y ordenación en la Biblioteca. Un registro limitado de reproducciones recientes y un historial de escucha escrito como archivos JSON Lines anuales rastrean qué se reprodujo y durante cuánto tiempo; ambos se pueden borrar y desactivar. El scrobbling de ListenBrainz envía una escucha solo después del tiempo real reproducido y reintenta los envíos fallidos.
La automatización incluye temporizadores de apagado de 15 minutos a dos horas o al finalizar la pista, con desvanecimiento de volumen opcional, y horarios por día de la semana que pueden despertar el dispositivo con un preset y desvanecimiento de entrada o enviarlo al modo standby.
Un servidor MCP opcional, desactivado por defecto, expone las capacidades de la aplicación a agentes de IA locales como Claude Code o Claude Desktop, cubriendo reproducción y volumen, presets y fuentes, biblioteca y radio, favoritos, tono y EQ, temporizadores de apagado, el historial de escucha y el análisis de audio. Las herramientas de edición están separadas y desactivadas hasta que se activen, y los agentes heredan el límite de volumen de la interfaz, las salvaguardas de energía y los interruptores de conexión. El README también muestra un ejemplo de rest_command de Home Assistant que llama al endpoint de MCP sin integraciones adicionales.
El proyecto documenta exactamente qué tráfico de red sale de la máquina: no se envía nada para el control del streamer o la navegación de la biblioteca fuera de la red local, mientras que las letras, el contexto de artista y álbum, el arte de álbum faltante, la comprobación de actualizaciones y la búsqueda de radio son activables, y el scrobbling está desactivado hasta que se añade un token. No hay analíticas, telemetría ni sistema de cuentas, y cuenta con una consola de solicitudes y una consola de tráfico bruto del streamer integradas.
El stack es Electron con electron-vite, React 19, TypeScript, Tailwind CSS v4 y Zustand, con el proceso principal manejando la E/S del dispositivo a través de SSDP y el WebSocket SMOIP del streamer. El streamer se trata como la única fuente de verdad: se envían comandos, el estado se devuelve y la interfaz se renderiza nuevamente a partir de ese envío. El proyecto se publica bajo la Licencia Pública General GNU v3.0, con desarrollo en una rama develop y CI ejecutando comprobaciones de typecheck, ESLint y Prettier.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.