Deep Happy

Funciones

Todo lo que hace Deep Happy hoy, contado por completo — no lo más destacado, la lista entera. Cada elemento de abajo dice qué hace, dónde lo encuentras, y qué hace por defecto. Todo lo que hay aquí es cierto de la app tal como está hecha; nada en esta página es un plan para más adelante.

Qué es

Deep Happy es un reproductor nativo para la barra de menús de macOS, hecho para radio por internet, escrito en Swift 6 con SwiftUI y AppKit, y que requiere macOS 26 o posterior. No tiene dependencias de terceros, ni cuenta, ni nada en que iniciar sesión.

Es un reproductor, no la app de una emisora: lo apuntas a un stream, o buscas uno en un directorio, y lo reproduce. Su razón de ser es la parte que la mayoría de los reproductores de radio por internet hace mal — seguir reproduciendo durante las interrupciones normales del día de un portátil — y su segundo truco es que el Mac que reproduce se puede controlar desde otro Mac.

La versión corta de todo esto está en el resumen de Deep Happy; las preguntas que la gente hace de verdad están en la página de preguntas frecuentes.

Reproducción que resiste el sueño, una VPN y un socket atascado

Los reproductores de radio por internet fallan en situaciones normales — una VPN que se reconecta, la tapa de un portátil que se cierra, un socket que se atasca sin avisar — y el fallo habitual no es un mensaje de error, sino una app que dice Playing sin que suene nada. Deep Happy existe para hacer invisibles esas situaciones: pulsas Play una vez y sigue reproduciendo, o te dice la verdad sobre qué falla.

Dos reglas hacen casi todo el trabajo. Que cambie la ruta de red nunca es, por sí solo, motivo para tirar abajo un stream que todavía produce sonido — lo que decide es si sigue llegando audio, no lo que anunció el sistema. Y cuando un stream de verdad ha fallado, la recuperación siempre significa construir una conexión nueva: nunca se le da un empujón, se reanuda ni se busca dentro de algo atascado con la esperanza de que vuelva.

Puede que oigas un corte breve mientras eso ocurre. Deep Happy no es una reproducción sin cortes, y no dice serlo. Lo que promete es que nunca deberías quedarte mirando una etiqueta Playing sin que salga sonido.

Parar y volver a arrancar también es rápido. Durante unos quince segundos después de pulsar Stop, la app conserva el stream que estaba reproduciendo, así que Play lo retoma al instante en vez de arrancar en frío — en la práctica, al momento. Si lo dejas parado más tiempo, Play se conecta de nuevo, tardando lo que tarda cualquier arranque en frío.

El panel de la barra de menús y la línea de estado de conexión

Haz clic en el icono de la barra de menús para abrir el reproductor. Muestra la emisora que estás escuchando, la pista que suena, un botón Play/Stop, y una línea de estado bajo el título que dice qué está pasando de verdad — reproduciendo, conectando, esperando a que vuelva la red, reconectando, o sin poder llegar al stream. Nunca tienes que adivinar si está funcionando.

Hasta que un stream envía un título de pista, la línea de título muestra en su lugar el propio nombre de la emisora.

Añadir y gestionar tus propias emisoras de radio

El nombre de la emisora está arriba del reproductor como una ficha rellena con un chevron. Haz clic en ella y el reproductor pasa a ser la lista de emisoras; el chevron arriba a la izquierda de la lista devuelve el reproductor.

Cada fila es el nombre de una emisora con, debajo, lo que la app ha medido realmente sobre ese stream — algo como HLS · 25 s de colchón, o Sin ventana en vivo · sin colchón para un stream al que no puede mantenerle un búfer. Una emisora que nunca has reproducido no muestra ninguna línea, porque todavía no se sabe nada de ella. Una marca de verificación señala la emisora que estás escuchando; haz clic en otra fila para cambiar, y el reproductor vuelve con el nuevo nombre en la ficha. Cambiar siempre conecta de nuevo, así que oyes los segundos habituales de conexión en vez de la emisora equivocada.

Cada fila lleva sus propios botones de lápiz y papelera, así que Rename y Remove nunca son algo que tengas que ir a buscar. Rename abre los mismos dos campos que Add, ya rellenos con el nombre actual; cambiarlo no interrumpe la reproducción. Eliminar necesita dos clics: el primero arma el botón — se rellena de color sólido y pasa al color de acento — y el segundo elimina la emisora de verdad. Elegir otra fila, abrir un formulario, o salir de la página lo desarma de nuevo, así que un botón armado nunca se queda ahí sin que lo veas. El botón Remove de la última emisora que queda está atenuado y no hace nada, porque el reproductor siempre tiene que tener una que reproducir; eliminar la emisora que estás escuchando te cambia a la primera de la lista. Haz clic derecho en una fila para las mismas dos acciones en un menú, si lo prefieres así.

Debajo de las emisoras está Add station…, que abre dos campos en el sitio: un nombre a tu elección y la dirección del stream, que tiene que ser una URL http:// o https:// completa. Si la dirección no es una que la app pueda usar, lo dice bajo los campos y conserva lo que escribiste. La lista se guarda por máquina, como las demás preferencias.

Encontrar una emisora en un directorio abierto

Debajo de Add station… está Find a station…, para cuando aún no tienes la dirección de un stream. Abre una página con un campo de búsqueda: escribe el nombre de una emisora o un género y pulsa Return, o haz clic en Search. Deep Happy consulta un directorio abierto de emisoras y lista lo que encuentra — cada fila muestra un nombre recortado sobre una línea de lo que realmente se sabe de ese stream, como MP3 · 128 kbps · DE. Haz clic en una fila, o en su +, para añadir esa emisora a tu lista; vuelves a la lista de emisoras con ella ya puesta.

Escribir una dirección a mano sigue funcionando exactamente igual que antes. El directorio es una segunda vía de entrada, para cuando conoces un nombre o un género en vez de una URL — no un sustituto de la primera.

Una limitación honesta: una emisora encontrada así suele ser de un tipo del que la app todavía no lee un título de pista en vivo, así que su línea de título sigue mostrando el propio nombre de la emisora y los botones de búsqueda quedan atenuados para ella — igual que cualquier emisora antes de su primera reproducción.

Reproducir desde el arranque, y el calentamiento silencioso

Deep Happy empieza a reproducir en cuanto arranca; no tienes que hacer clic en Play solo para tener sonido. Desactiva Play on launch en Settings si prefieres que espere a que lo hagas tú.

Con esa opción desactivada, la tecla física de reproducir puede abrir Apple Music en vez de Deep Happy hasta que hayas pulsado Play una vez en ese arranque — macOS dirige la tecla a la app que hizo sonido más recientemente, y un Deep Happy que aún no ha reproducido no tiene ese título.

También con esa opción desactivada, la app deja el stream preparado en segundo plano mientras arranca, así que tu primer Play tarda medio segundo en vez de los nueve o así que necesita una conexión en frío. No lo ves pasar — el reproductor dice Stopped y muestra el nombre de la emisora, exactamente como haría de otro modo. Cuesta el mismo ancho de banda que reproducir, así que se mantiene durante dos minutos y luego se descarta: pulsa Play dentro de ese tiempo y es instantáneo; más tarde, la app se conecta de la forma normal.

El icono de Dock opcional y la ventana del reproductor

Deep Happy no tiene icono de Dock por defecto — el elemento de la barra de menús es toda la app. Activa Show Dock icon en Settings si prefieres tener una ventana: hacer clic en el icono entonces abre, o trae al frente, una ventana con exactamente el mismo reproductor. Volver a desactivarlo siempre es seguro, ya que el elemento de la barra de menús está ahí pase lo que pase.

La ventana es más ancha que el panel y está distribuida en paralelo: la carátula a la izquierda, a toda su fuerza y sin nada escrito encima, y el reproductor — emisora, pista, Play/Stop, botones de búsqueda, pistas recientes — en una columna a la derecha. La carátula solo es un cuadrado en el tamaño más pequeño de la ventana; agrándala y la carátula se ensancha en un recorte apaisado, llenando siempre el espacio que se le da. Es el mismo reproductor que el panel, así que los dos nunca pueden decir cosas distintas — la ventana simplemente tiene el espacio para mostrar bien la imagen. Se ajusta a lo que tiene que mostrar, así que un título de pista largo la hace más alta en vez de cortarse. Abre Settings desde el icono de engranaje del reproductor, o con el atajo habitual ⌘,.

Copiar el artista y el título

Haz clic en cualquier parte del bloque de artista y título, y ambos se copian como una sola cadena, Artista - Título — exactamente lo que envió el stream, lista para pegar en una búsqueda, un chat o una nota. El icono de copiar se convierte brevemente en una marca de verificación con Copied al lado, sin ocultar el artista ni el título. Si el stream no envía artista para una pista, simplemente no hay línea de artista, y el clic sigue copiando el título.

Buscar una pista, y la lista de recientes

Junto a la pista actual hay un pequeño botón de Spotify — el único servicio de búsqueda activado por defecto — y hacer clic en él abre una búsqueda en el navegador para esa pista. Activa Apple Music o Yandex Music en Settings, bajo Look up in, y sus botones se le unen; desactiva los tres y la fila desaparece. Los botones quedan atenuados mientras el reproductor muestra el nombre de la emisora en vez de una pista, ya que no hay nada que buscar.

Una lista Recent debajo guarda las últimas tres pistas; haz clic en una para copiarla, o clic derecho para las mismas opciones de búsqueda.

Teclas multimedia y Control Centre

Las teclas de reproducir/pausar y parar de tu teclado funcionan con Deep Happy igual que con cualquier otro reproductor, y Control Centre también muestra la pista actual — incluso durante una reconexión, así que las teclas siguen controlando Deep Happy en vez de pasarse a otra app.

El volumen y el silencio son del sistema, no de la app

El control deslizante de volumen es el volumen del sistema de la máquina que está sonando — esta, mientras escuchas en local; la que estás controlando, mientras no. Es el mismo dial que tus teclas de volumen, Control Centre y cualquier otra app de ese Mac, así que bajar la radio baja con ella todo lo demás, y un control a cero silencia toda la máquina. Es una consecuencia real, no un detalle: no hay un volumen de app separado tras el que esconderse.

Mueve el volumen con las teclas, la barra de menús u otra app, y el control lo sigue — en este Mac y en cualquier Mac que lo esté controlando. Deep Happy nunca restaura el volumen de una máquina por su cuenta; como lo dejes es como se queda.

El botón al final de la fila es el silencio de esa máquina, y es algo separado del control: silenciar deja el volumen donde estaba, así que quitar el silencio devuelve el sonido exactamente al nivel en que lo dejaste. Silencia la máquina de cualquier otra forma — la tecla de silencio, la barra de menús, otra app — y el botón se enciende y el control se atenúa, así que un panel que muestra un control al 13 % nunca te deja preguntándote por qué no hay sonido. Púlsalo, o pulsa m, para quitar el silencio. Esto importa sobre todo mientras controlas otro Mac, donde no puedes ver la superposición de volumen de esa máquina. Un dispositivo de salida sin control de silencio propio — algunos no lo tienen — simplemente nunca cambia el botón; la app lo registra una vez en su log y deja el dispositivo tranquilo.

Control remoto: controlar Deep Happy en otro Mac

Deep Happy en un Mac puede controlar Deep Happy en otro — reproducir, parar, y ver qué está sonando — así que la máquina con los altavoces no tiene por qué ser la que tienes delante.

Activarlo

Actívalo en Settings → Remote, bajo This Mac: el interruptor Allow remote control está desactivado por defecto, porque una app que escucha en la red sin que se lo pidas no es algo que este proyecto distribuya. Una vez activado, la sección de abajo muestra cómo se llama este Mac y si está escuchando. La primera vez que Deep Happy anuncia o descubre un servicio de control remoto, macOS pide permiso de Local Network — ese aviso es esperado, y sin él el control remoto no encuentra el otro Mac.

Emparejamiento

Pulsa Show pairing PIN en el Mac que tiene los altavoces: cuatro dígitos, una cuenta atrás de dos minutos, y tres intentos antes de que la ventana se cierre y haga falta un PIN nuevo. En el Mac desde el que quieres controlar, abre Settings → Remote → Control another MacPair a new Mac…, elige el primer Mac de la lista y escribe los dígitos. Entonces aparece en la lista con un botón Connect.

Un Mac que reproduce puede tener como máximo tres controladores emparejados a la vez; un cuarto intento se rechaza con el motivo, en vez de sustituir uno en silencio. Revoca un controlador desde la lista Paired remotes en el Mac que reproduce, lo que corta su conexión de inmediato. Cuando se rechaza un intento de emparejamiento, el mensaje dice qué Mac tuvo el problema, en vez de dar a entender que el otro envió algo malo.

Por debajo, el emparejamiento es un acuerdo de claves autenticado con PIN que deja a los dos Mac compartiendo una clave a largo plazo; esa clave se guarda en el Keychain, y cada sesión posterior corre sobre TLS autenticado con ella, así que el PIN se escribe una vez y nunca vuelve a viajar. La protección del PIN es exactamente su ventana de dos minutos y su presupuesto de tres intentos — un código de cuatro dígitos no es una contraseña, y no se trata como tal.

Controlar

Pulsa Connect y el panel cambia a la reproducción de ese Mac: la emisora, la pista, los controles, el volumen y la lista de recientes pertenecen todos a la máquina que estás controlando, con una fila arriba que la nombra y dice qué está haciendo la sesión. Reproducir aquí y controlar otro Mac son cosas mutuamente excluyentes — conectar detiene lo que estuviera sonando aquí, igual que pulsar Stop tú mismo. Pulsa Disconnect para devolver el control; nada empieza a reproducirse aquí por su cuenta.

Esa fila es también de donde vuelve una sesión: Driving un Mac con nombre mientras el enlace está activo, Reconnecting… mientras va recuperándose — y lo que hay debajo entonces no se presenta como actual — y not reachable, con un botón Connect, una vez que ha dejado de intentarlo. El camino de vuelta está delante de ti en vez de a dos ventanas de distancia, y Settings hace lo mismo.

Normalmente no lo necesitas. La app recuerda qué Mac estabas controlando y se reconecta por su cuenta al volver a abrirla, cuando este Mac despierta y cuando vuelve la red — buscando el otro Mac de nuevo cada vez, así que una dirección cambiada o una app reiniciada allí no es un obstáculo. Lo intenta durante un minuto más o menos y luego descansa, en vez de reintentar para siempre contra un Mac apagado; que este despierte, o que vuelva la red, lo pone en marcha otra vez. Si el otro Mac estaba reproduciendo cuando se cayó el enlace, la fila lo dice, pero reconectar nunca empieza la reproducción por sí solo. Salir le dice al otro Mac que se va, en vez de dejar que lo note.

Cuando no se encuentra el otro Mac

El campo Address del formulario de emparejamiento es para cuando el otro Mac no se puede descubrir en absoluto, que es lo que pasa bajo una VPN de túnel completo: saca del recorrido toda conexión de la red local, incluido el descubrimiento de servicio, así que el selector se queda vacío. Escribe en su lugar el nombre o la dirección del otro Mac; el emparejamiento y cada sesión posterior funcionan igual sobre ella.

Modo desarrollador

Settings tiene una tercera pestaña, Developer, con un solo interruptor. Actívalo y Deep Happy escribe en el log del sistema una traza paso a paso del emparejamiento y de la sesión remota. Está desactivado por defecto porque es muy hablador — una línea por fotograma en una sesión que dura horas.

Los fallos en la capa remota se registran esté activado o no el interruptor, así que activarlo solo vale la pena antes de reproducir algo a propósito. La pestaña también te da dos comandos de Terminal ya preparados, cada uno con su botón de copiar — uno sigue el log en vivo, otro lee la última media hora — y explica cómo acotar cualquiera de los dos a una mitad de la capa remota o a las líneas propias del reproductor.

La línea de versión

Una línea pequeña al pie del reproductor, y en Settings, nombra la build exacta que estás usando; haz clic en ella para copiar esa identidad, que es lo que hace reproducible un informe de fallo.

Lo que no hace

  • NOUna cuenta o un registro. Nada que registrar, nada en que iniciar sesión, ninguna clave de licencia que escribir.
  • NOAnalítica, telemetría, anuncios o SDK de terceros. No hay ninguna dependencia de terceros en la app.
  • NOUna emisora propia. Deep Happy no es la app de ninguna emisora ni está afiliada a ninguna. Reproduce el stream al que la apuntes.
  • NOUn listener en la red que no pediste. El control remoto está desactivado hasta que lo activas, y el emparejamiento necesita un PIN escrito por una persona.
  • NORecuperación sin cortes. Volver de un fallo significa una conexión nueva, y puede que oigas un corte breve mientras ocurre.

Lo que requiere

Requiere
macOS 26 o posterior
Emisoras
Cualquier stream HTTP o HTTPS
Remoto
Red local, hasta 3 controladores
Sandbox
El App Sandbox de Apple
Cuenta
Ninguna

Aún no está en la Mac App Store. Deep Happy compila y funciona hoy, antes de un primer envío a revisión. No hay enlace de descarga en este sitio, y cualquier cosa que en otro lugar afirme ser Deep Happy no es nuestra.