Deep Happy

Funktionen

Alles, was Deep Happy heute kann, vollständig aufgeführt – nicht die Highlights, die komplette Liste. Jeder Punkt unten sagt, was er tut, wo du ihn findest, und was er standardmäßig tut. Jede Tatsache hier stimmt für die App, so wie sie gebaut ist; nichts auf dieser Seite ist ein Plan für später.

Was es ist

Deep Happy ist ein nativer macOS-Menüleisten-Player für Internetradio, geschrieben in Swift 6 mit SwiftUI und AppKit, und erfordert macOS 26 oder neuer. Es hat keine Abhängigkeiten von Drittanbietern, kein Konto und nichts zum Einloggen.

Es ist ein Player, keine App eines Senders: Du richtest es auf einen Stream, oder suchst einen im Verzeichnis, und es spielt ihn. Sein Daseinszweck ist der Teil, den die meisten Internetradio-Player falsch machen – am Spielen bleiben durch die gewöhnlichen Unterbrechungen eines Laptop-Alltags –, und sein zweiter Kunstgriff ist, dass sich der spielende Mac von einem anderen Mac aus steuern lässt.

Die Kurzfassung von alldem steht auf der Deep-Happy-Übersicht; die Fragen, die Leute tatsächlich stellen, stehen auf der FAQ-Seite.

Wiedergabe, die Ruhezustand, VPN und eine hängende Verbindung übersteht

Internetradio-Player scheitern in gewöhnlichen Situationen – einer VPN-Neuverbindung, einem zugeklappten Display, einer Verbindung, die hängen bleibt, ohne es zu melden – und der übliche Fehler ist keine Fehlermeldung, sondern eine App, die Playing anzeigt und dabei keinen Ton macht. Deep Happy soll genau diese Situationen unsichtbar machen: Du drückst einmal Play, und es spielt weiter – oder es sagt dir ehrlich, was nicht stimmt.

Zwei Regeln erledigen den größten Teil der Arbeit. Ein geänderter Netzwerkpfad ist für sich genommen nie ein Grund, einen Stream abzubrechen, der noch Ton liefert – entscheidend ist, ob noch Audio ankommt, nicht was das System gemeldet hat. Und ist ein Stream wirklich ausgefallen, heißt Wiederherstellung immer, eine neue Verbindung aufzubauen: Nichts Hängendes wird je angestupst, fortgesetzt oder gesucht in der Hoffnung, dass es zurückkommt.

Dabei kannst du kurz einen Aussetzer hören. Deep Happy ist nicht lückenlos und behauptet das auch nicht. Was es verspricht: Du sollst nie auf ein Playing-Label starren, ohne dass Ton herauskommt.

Auch Stoppen und Neustarten geht schnell. Für etwa fünfzehn Sekunden nach dem Drücken von Stop behält die App den Stream, den sie gerade gespielt hat, sodass Play direkt dort weitermacht statt kalt zu starten – in der Praxis sofort. Lässt du es länger gestoppt, verbindet sich Play neu und braucht so lange wie jeder kalte Start.

Das Menüleisten-Popup und die Verbindungs-Statuszeile

Klicke auf das Symbol in der Menüleiste, um den Player zu öffnen. Er zeigt den Sender, den du gerade hörst, den laufenden Titel, einen Play/Stop-Button und eine Statuszeile unter dem Titel, die sagt, was gerade wirklich passiert – spielt, verbindet sich, wartet auf die Rückkehr des Netzwerks, verbindet sich neu, oder Stream nicht erreichbar. Du musst nie raten, ob es funktioniert.

Solange ein Stream keinen Titel sendet, zeigt die Titelzeile stattdessen den Namen des Senders selbst.

Eigene Radiosender hinzufügen und verwalten

Der Name des Senders sitzt oben im Player als gefüllter Chip mit einem Chevron. Klicke darauf, und der Player wird zur Senderliste; der Chevron oben links in der Liste bringt den Player zurück.

Jede Zeile ist der Name eines Senders, darunter, was die App tatsächlich über diesen Stream gemessen hat – etwa HLS · 25 s Puffer, oder Kein Live-Fenster · kein Puffer für einen Stream, in dem sie keinen Puffer halten kann. Ein Sender, den du nie gespielt hast, zeigt gar keine Zeile, weil noch nichts über ihn bekannt ist. Ein Häkchen markiert den Sender, den du gerade hörst; klicke eine andere Zeile an, um zu wechseln, und der Player kommt mit dem neuen Namen im Chip zurück. Ein Wechsel verbindet sich immer neu, du hörst also die üblichen paar Sekunden Verbindungsaufbau statt des falschen Senders.

Jede Zeile trägt ihre eigenen Stift- und Papierkorb-Buttons, sodass Rename und Remove nie etwas sind, das du suchen musst. Rename öffnet dieselben zwei Felder wie Add, ausgefüllt mit dem aktuellen Namen; eine Änderung unterbricht die Wiedergabe nicht. Entfernen braucht zwei Klicks: Der erste scharf schaltet den Button – er füllt sich vollständig und wird zur Akzentfarbe –, und erst der zweite entfernt den Sender wirklich. Eine andere Zeile auswählen, ein Formular öffnen oder die Seite verlassen entschärft ihn wieder, ein scharfer Button bleibt also nie außer Sicht. Der Remove-Button des letzten verbleibenden Senders ist blass und tut nichts, weil der Player immer einen zum Spielen haben muss; entfernst du den Sender, den du gerade hörst, wechselt er zum ersten in der Liste. Rechtsklick auf eine Zeile bietet dieselben zwei Aktionen in einem Menü, falls du das lieber nutzt.

Unter den Sendern steht Add station…, das an Ort und Stelle zwei Felder öffnet: einen Namen deiner Wahl und die Adresse des Streams, die eine vollständige http://- oder https://-URL sein muss. Kann die App mit der Adresse nichts anfangen, sagt sie das unter den Feldern und behält, was du eingegeben hast. Die Liste wird pro Rechner gespeichert, wie die anderen Einstellungen.

Einen Sender in einem offenen Verzeichnis finden

Unter Add station… steht Find a station…, für den Fall, dass du die Adresse eines Streams noch nicht hast. Es öffnet eine Seite mit einem Suchfeld: Gib den Namen eines Senders oder ein Genre ein und drücke Enter, oder klicke Search. Deep Happy fragt ein offenes Sender-Verzeichnis an und listet die Treffer – jede Zeile zeigt einen gekürzten Namen über einer Zeile mit dem, was tatsächlich über diesen Stream bekannt ist, etwa MP3 · 128 kbps · DE. Klicke auf eine Zeile oder ihr +, um diesen Sender deiner Liste hinzuzufügen; du landest zurück auf der Senderliste, wo er jetzt steht.

Eine Adresse von Hand einzugeben funktioniert weiterhin genauso wie zuvor. Das Verzeichnis ist ein zweiter Weg hinein, für den Fall, dass du einen Namen oder ein Genre kennst statt einer URL – kein Ersatz für den ersten.

Eine ehrliche Einschränkung: Ein so gefundener Sender ist meist von der Art, bei der die App noch keinen laufenden Titel liest, seine Titelzeile zeigt also weiterhin den Namen des Senders, und die Nachschlage-Buttons bleiben dafür blass – genau wie bei jedem Sender vor seinem ersten Abspielen.

Abspielen ab dem Start, und das stille Vorwärmen

Deep Happy fängt an zu spielen, sobald es startet; du musst nicht erst Play klicken, um Ton zu bekommen. Schalte Play on launch in Settings aus, wenn es lieber auf dich warten soll.

Ist es aus, öffnet die Wiedergabe-Taste der Tastatur womöglich Apple Music statt Deep Happy, bis du in diesem Start einmal Play gedrückt hast – macOS leitet die Taste an die App weiter, die zuletzt Ton gemacht hat, und ein Deep Happy, das noch nicht gespielt hat, hat diesen Anspruch nicht.

Auch dann macht die App den Stream im Hintergrund startklar, während sie hochfährt, sodass dein erstes Play etwa eine halbe Sekunde braucht statt der neun oder so, die eine kalte Verbindung braucht. Du siehst davon nichts – der Player zeigt Stopped und den Namen des Senders, genau wie sonst auch. Das kostet dieselbe Bandbreite wie Abspielen, deshalb wird es zwei Minuten gehalten und dann verworfen: Drückst du Play innerhalb dieser Zeit, geht es sofort, später verbindet sich die App auf dem normalen Weg.

Das optionale Dock-Symbol und das Player-Fenster

Deep Happy hat standardmäßig kein Dock-Symbol – das Menüleisten-Icon ist die ganze App. Schalte Show Dock icon in Settings ein, wenn du lieber ein Fenster hättest: Ein Klick auf das Symbol öffnet dann ein Fenster mit genau demselben Player oder holt es nach vorn. Es wieder auszuschalten ist immer gefahrlos, denn das Menüleisten-Icon ist so oder so da.

Das Fenster ist breiter als das Popup und nebeneinander angeordnet: das Cover links, in voller Stärke und ohne Schrift darüber, und der Player – Sender, Titel, Play/Stop, Nachschlage-Buttons, letzte Titel – in einer Spalte rechts. Das Cover ist nur bei der kleinsten Fenstergröße quadratisch; vergrößerst du das Fenster, wird das Cover zu einem breiteren Ausschnitt und füllt immer den Platz, den es bekommt. Es ist derselbe Player wie das Popup, die beiden können also nie etwas Unterschiedliches sagen – das Fenster hat einfach den Platz, um das Bild richtig zu zeigen. Es passt seine Größe dem an, was es zeigen muss, ein langer Titel macht es also höher, statt abgeschnitten zu werden. Öffne Settings über das Zahnrad-Symbol im Player, oder mit dem üblichen Tastenkürzel ⌘,.

Künstler und Titel kopieren

Klicke irgendwo auf den Künstler-und-Titel-Block, und beide werden als eine Zeichenkette kopiert, Künstler - Titel – genau das, was der Stream gesendet hat, bereit zum Einfügen in eine Suche, einen Chat oder eine Notiz. Das Kopieren-Symbol wird kurz zu einem Häkchen mit Copied daneben, ohne Künstler oder Titel zu verdecken. Sendet der Stream für einen Titel keinen Künstler, gibt es einfach keine Künstlerzeile, und der Klick kopiert trotzdem den Titel.

Einen Titel nachschlagen, und die Liste der letzten Titel

Neben dem aktuellen Titel steht ein kleiner Spotify-Button – der eine Nachschlagedienst, der standardmäßig an ist –, und ein Klick darauf öffnet eine Browsersuche für diesen Titel. Schalte Apple Music oder Yandex Music in Settings unter Look up in ein, und ihre Buttons kommen dazu; schaltest du alle drei aus, verschwindet die Zeile. Die Buttons sind blass, solange der Player den Namen des Senders statt eines Titels zeigt, weil es dann nichts zu suchen gibt.

Eine Recent-Liste darunter hält die letzten drei Titel fest; klicke einen an, um ihn zu kopieren, oder per Rechtsklick für dieselben Nachschlage-Optionen.

Medientasten und Control Centre

Die Wiedergabe-/Pause- und Stopp-Tasten deiner Tastatur funktionieren mit Deep Happy wie mit jedem anderen Player, und auch Control Centre zeigt den aktuellen Titel – auch über eine Neuverbindung hinweg, sodass die Tasten weiter Deep Happy steuern, statt zu einer anderen App zu wechseln.

Lautstärke und Stummschaltung gehören dem System, nicht der App

Der Lautstärkeregler ist die Systemlautstärke des Rechners, der gerade den Ton macht – dieser hier, solange du lokal hörst, oder der Rechner, den du steuerst, solange nicht. Es ist derselbe Regler wie deine Lautstärketasten, Control Centre und jede andere App auf diesem Mac, drehst du das Radio also leiser, wird alles andere gleich mit leiser, und ein Regler auf null schaltet den ganzen Rechner stumm. Das ist eine echte Konsequenz, kein Detail: Es gibt keine separate App-Lautstärke, hinter der man sich verstecken könnte.

Änderst du die Lautstärke stattdessen mit den Tasten, der Menüleiste oder einer anderen App, folgt der Regler – auf diesem Mac und auf jedem Mac, der ihn steuert. Deep Happy stellt die Lautstärke eines Rechners nie von sich aus wieder her; wie du sie verlässt, so bleibt sie.

Der Button am Ende der Zeile ist die Stummschaltung dieses Rechners, und das ist etwas anderes als der Regler: Stummschalten lässt die Lautstärke, wo sie war, sodass das Aufheben den Ton wieder genau auf dem Stand bringt, auf dem du ihn verlassen hast. Schaltest du den Rechner auf einem anderen Weg stumm – die Stummschalt-Taste, die Menüleiste, eine andere App –, leuchtet der Button auf und der Regler wird blass, sodass ein Panel mit einem Regler bei 13 % dich nie rätseln lässt, warum kein Ton kommt. Drücke ihn, oder m, um die Stummschaltung aufzuheben. Das zählt am meisten, während du einen anderen Mac steuerst, wo du dessen Lautstärke-Overlay nicht sehen kannst. Ein Ausgabegerät ohne eigene Stummschaltung – manche haben keine – lässt den Button einfach unverändert; die App notiert das einmal in ihrem Log und lässt das Gerät in Ruhe.

Fernsteuerung: Deep Happy auf einem anderen Mac steuern

Deep Happy auf einem Mac kann Deep Happy auf einem anderen steuern – abspielen, stoppen und sehen, was läuft –, sodass der Rechner mit den Lautsprechern nicht der sein muss, vor dem du sitzt.

Einschalten

Schalte es in Settings → Remote unter This Mac ein: Der Allow remote control-Schalter ist standardmäßig aus, weil dieses Projekt keine App ausliefert, die ungefragt im Netzwerk lauscht. Eingeschaltet zeigt der Abschnitt darunter, wie dieser Mac heißt und ob er lauscht. Wenn Deep Happy zum ersten Mal einen Fernsteuerungsdienst anbietet oder entdeckt, fragt macOS nach der Berechtigung für das lokale Netzwerk – diese Abfrage ist zu erwarten, und ohne sie findet die Fernsteuerung den anderen Mac nicht.

Kopplung

Drücke Show pairing PIN auf dem Mac mit den Lautsprechern: vier Ziffern, ein Countdown von zwei Minuten und drei Versuche, bevor sich das Fenster schließt und eine neue PIN nötig wird. Öffne auf dem Mac, von dem aus du steuern willst, Settings → Remote → Control another MacPair a new Mac…, wähle den ersten Mac aus der Liste und gib die Ziffern ein. Er erscheint dann mit einem Connect-Button in der Liste.

Ein spielender Mac kann höchstens drei Fernsteuerungen gleichzeitig gekoppelt haben; ein vierter Versuch wird mit Begründung abgelehnt, statt still eine andere auszutauschen. Widerrufe eine Fernsteuerung aus der Paired remotes-Liste auf dem spielenden Mac, was ihre Verbindung sofort trennt. Wird ein Kopplungsversuch abgelehnt, nennt die Meldung, welcher Mac das Problem hatte, statt anzudeuten, der andere hätte etwas Falsches geschickt.

Darunter ist Kopplung eine PIN-authentifizierte Schlüsseleinigung, nach der beide Macs einen langfristigen Schlüssel teilen; dieser Schlüssel liegt im Keychain, und jede Sitzung danach läuft über TLS, authentifiziert damit – die PIN wird also einmal eingetippt und reist danach nie wieder mit. Der Schutz der PIN selbst besteht genau aus ihrem Zwei-Minuten-Fenster und ihrem Budget von drei Versuchen – ein vierstelliger Code ist kein Passwort und wird auch nicht wie eines behandelt.

Steuern

Drücke Connect, und das Panel wechselt zur Wiedergabe dieses Mac: Sender, Titel, Bedienelemente, Lautstärke und die letzten Titel gehören alle dem Rechner, den du steuerst, mit einer Zeile oben, die ihn benennt und sagt, was die Sitzung gerade tut. Hier abspielen und einen anderen Mac steuern schließen sich gegenseitig aus – Connect stoppt, was hier lief, genauso als hättest du selbst Stop gedrückt. Drücke Disconnect, um die Kontrolle zurückzugeben; hier startet von sich aus nichts.

In derselben Zeile kommt eine Sitzung auch wieder zurück: Driving mit dem Namen des Mac, solange die Verbindung steht, Reconnecting…, während sie sich wieder hochkämpft – und was darunter steht, gilt dann nicht mehr als aktuell –, und not reachable mit einem Connect-Button, sobald sie es aufgegeben hat. Der Weg zurück liegt vor dir, nicht zwei Fenster entfernt, und Settings macht dasselbe.

Normalerweise brauchst du das nicht. Die App merkt sich, welchen Mac du gesteuert hast, und verbindet sich von selbst neu, wenn du sie wieder öffnest, wenn dieser Mac aufwacht und wenn das Netzwerk zurückkommt – sie sucht den anderen Mac dabei neu, eine geänderte Adresse oder eine neu gestartete App dort sind also kein Hindernis. Sie versucht es etwa eine Minute lang und ruht sich dann aus, statt endlos gegen einen ausgeschalteten Mac anzurennen; wacht dieser Mac auf, oder kommt das Netzwerk zurück, fängt sie wieder an. Spielte der andere Mac, als die Verbindung abriss, sagt die Zeile das, aber eine Neuverbindung startet nie von sich aus die Wiedergabe. Beim Beenden sagt die App dem anderen Mac Bescheid, statt es ihn merken zu lassen.

Wenn der andere Mac nicht gefunden werden kann

Das Address-Feld im Kopplungsformular ist für den Fall, dass der andere Mac gar nicht entdeckt werden kann – was unter einem Full-Tunnel-VPN passiert: Es leitet jede Verbindung aus dem lokalen Netzwerk hinaus, Service Discovery eingeschlossen, sodass die Auswahl leer bleibt. Gib stattdessen den Namen oder die Adresse des anderen Mac ein – Kopplung und jede Sitzung danach funktionieren darüber genauso.

Developer-Modus

Settings hat einen dritten Tab, Developer, mit einem einzigen Schalter. Schaltest du ihn ein, schreibt Deep Happy eine Schritt-für-Schritt-Aufzeichnung von Kopplung und Fernsteuerungssitzung ins System-Log. Standardmäßig ist er aus, weil er geschwätzig ist – eine Zeile pro Frame bei einer Sitzung, die Stunden läuft.

Fehler in der Fernsteuerungsschicht werden protokolliert, egal ob der Schalter an oder aus ist, ihn einzuschalten lohnt sich also nur, bevor du absichtlich etwas reproduzierst. Der Tab gibt dir außerdem zwei fertige Terminal-Befehle mit je einem Kopieren-Button – einer verfolgt das Log live, einer liest die letzte halbe Stunde – und erklärt, wie man beide auf eine Hälfte der Fernsteuerungsschicht oder auf die Zeilen des Players selbst eingrenzt.

Die Versionszeile

Eine kleine Zeile unten im Player, und in Settings, nennt den genauen Build, den du gerade ausführst; klicke sie an, um diese Kennung zu kopieren – das macht einen Bugreport reproduzierbar.

Was es nicht tut

  • NOKonto oder Registrierung. Nichts zum Registrieren, nichts zum Einloggen, kein Lizenzschlüssel zum Eintippen.
  • NOAnalytics, Telemetrie, Werbung oder SDKs von Drittanbietern. Es gibt überhaupt keine Abhängigkeiten von Drittanbietern in der App.
  • NOEinen eigenen Sender. Deep Happy ist die App keines Senders und mit keinem verbunden. Es spielt den Stream, auf den du es richtest.
  • NOEinen Netzwerk-Listener, um den du nicht gebeten hast. Fernsteuerung ist aus, bis du sie einschaltest, und Kopplung braucht eine PIN, die ein Mensch eintippt.
  • NOLückenlose Wiederherstellung. Die Rückkehr aus einem Fehler heißt eine neue Verbindung, und dabei kannst du kurz einen Aussetzer hören.

Was es voraussetzt

Voraussetzung
macOS 26 oder neuer
Sender
Jeder HTTP- oder HTTPS-Stream
Fernsteuerung
Lokales Netzwerk, bis zu 3 Fernsteuerungen
Sandbox
Apples App Sandbox
Konto
Keins

Noch nicht im Mac App Store. Deep Happy baut und läuft schon heute, vor einer ersten Einreichung. Es gibt auf dieser Seite keinen Download-Link, und alles anderswo, das behauptet, Deep Happy zu sein, ist nicht von uns.