Serie: Musik-Streamer - Raspotify

  Ralf Hersel   Lesezeit: 9 Minuten  🗪 7 Kommentare

Die Anwendung für den Raspberry Pi erlaubt das direkte Streamen von Spotify-Inhalten an Ausgabegeräte. Die Fernsteuerung erfolgt über die Spotify-Clients.

serie: musik-streamer - raspotify

Da ich beim Testen von Mopidy keinen Erfolg hatte, war ich bei Raspotify skeptisch, ob sich die schlechten Erfahrungen wiederholen würden. Im Rahmen der Serie über Musikstreaming-Dienste habe ich bisher über viele Aspekte dieser Thematik geschrieben. Ziel dieses Artikels ist es, die Musik von Spotify auf einem Raspberry Pi 4 zu empfangen, um sie per USB-Kabel direkt an die DACs meiner Endstufen weiterleiten zu können. Die Fernsteuerung erfolgt dabei über die Spotify-App auf irgendeinem Gerät.

Installation

Raspotify ist ein systemd-Daemon, der die Bibliothek librespot von Paul Lietar verwendet, um mit der offiziellen Spotify-API zu interagieren. Bei der Installation sollte man sich an die Anleitung des Projekts halten. Angeblich gibt es ein paar Anleitungen im Internet, die nicht auf dem letzten Stand der Dinge sind. Raspotify bietet einen Basic-Setup-Guide, an den ich mich gehalten habe.

Die Installation erfolgt mit diesem Befehl im Terminal eures Raspis:

sudo apt-get -y install curl && curl -sL https://dtcooper.github.io/raspotify/install.sh | sh

Als Alternative schlägt die Anleitung vor, die angebotenen deb-Pakete zu verwenden, die dann auf die übliche Weise installiert werden: sudo apt install Paketname. Ich habe den ersten Weg gewählt.

Konfiguration

So ganz ohne Einstellungen läuft Raspotify nicht, weil es zumindest wissen muss, an welches Gerät der Musik-Stream gesendet werden soll. Um die verfügbaren Geräte zu ermitteln und deren Fähigkeiten zu kennen, müssen die infrage kommenden Geräte eingeschaltet sein, weil sie ansonsten nicht gesehen werden. Dazu führt man diesen Befehl aus:

librespot -d ?

Daraufhin erhält man ein langes Listing aller verfügbaren Output-Geräte, welches in meinem Fall so aussah (es ist nur ein Auszug):

 Device:

        hw:CARD=Audio,DEV=0

    Description:

        nubert xCore USB Audio, USB Audio
        Direct hardware device without any conversions

    Supported Format & Sample Rate Combinations:

        Format: S16   Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
        Format: S32   Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz

    --------------------------------------------------------------------

    Device:

        plughw:CARD=Audio,DEV=0

    Description:

        nubert xCore USB Audio, USB Audio
        Hardware device with all software conversions

    Supported Format & Sample Rate Combinations:

        Format: S16   Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
        Format: S24   Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
        Format: S24_3 Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
        Format: S32   Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
        Format: F32   Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz
        Format: F64   Sample Rate(s): 44.1kHz, 48kHz, 88.2kHz, 96kHz

In diesem Auszug seht ihr zwei Varianten für dasselbe Gerät (Nubert nuPro XS-6000 RC Aktivlautsprecher). Den Device-Namen benötigt ihr zwingend für die Konfiguration von Raspotify. Welcher der Richtige ist, lässt sich nur durch Ausprobieren feststellen. Das kann eine zeitraubende Angelegenheit sein, werden doch noch viel mehr Devices gelistet, als ich hier zeige. Ich habe mich für das Device: hw:CARD=Audio,DEV=0 (Direct hardware device without any conversions) entschieden.

Wie ihr seht, zeigen die Geräte alle dieselben Formate und Sample Rate Kombinationen an. Was die Unterschiede zwischen S16, S24, S32, F32, F64 sind, habe ich bisher nicht herausgefunden. Es irritiert, dass sich die angezeigt Sample Rates nicht unterscheiden. Ich habe die Standardeinstellungen beibehalten, werde jedoch damit noch einmal herumspielen.

Der Device-Name ist für die Konfiguration zwingend erforderlich. Wenn daran nichts ändert, werdet ihr höchstwahrscheinlich nichts hören. Alle Einstellungen befinden sich in der Datei /etc/raspotify/conf, die ihr mit Root-Rechten im Editor eurer Wahl (Micro rulez) öffnen könnt. Dort tragt ihr notwendig das Device ein. Bei mir sieht das so aus (das ist ein Auszug von wenigen Zeilen; die Datei ist lang):

LIBRESPOT_DEVICE="hw:CARD=Audio,DEV=0"
LIBRESPOT_INITIAL_VOLUME="100"

Vergesst bitte nicht, die Zeilen einzukommentieren (# am Anfang entfernen). In der zweiten Zeile seht ihr die Lautstärke, welche standardmässig auf 50 steht. Warum? Ich habe sie auf 100 gestellt, wobei das dennoch nicht ausreicht. Dazu später mehr.

Dann speichert ihr die geänderte Konfiguration ab und startet den Raspotify-Service neu, damit die Änderungen wirksam werden:

sudo systemctl restart raspotify

Nun wartet ihr ein paar Sekunden, bis der Spotify-Client das mitbekommen hat. Dort wählt ihr rechts unten im Connect-Menü euer Gerät aus:

Voilà, Spotify spielt auf euren Lautsprechern, wenn ihr das richtige Device gefunden habt. Im Gegensatz zu meiner Mopidy-Erfahrung gab es auch keine Probleme beim Umschalten zwischen Raspotify und MPD (Music Player Daemon). Man sollte nur darauf achten, dass die eine Wiedergabe abgebrochen wird, bevor man die andere Wiedergabe einschaltet, weil ansonsten die Audio-Sink als belegt gemeldet wird.

Das mag in diesem Artikel komplizierter klingen, als es ist. Es sind nur drei Schritte:

  1. Raspotify installieren
  2. Audio-Device ermitteln und in die Konfiguration eintragen
  3. Den systemd-Service neu starten; fertig

Wie gut ist es?

Selbstverständlich habe ich wieder ein paar Dinge zu bemängeln. Die gehen jedoch nicht zulasten von Raspotify, sondern wurden von mir bisher nicht gründlich genug ausprobiert. Im Vergleich zur Lautstärke von einer MPD-Wiedergabe, ist Raspotify um 10 Dezibel leiser, obwohl ich die Default-Lautstärke in der Konfiguration auf 100 gesetzt habe. Auch an der Einstellung der Sample-Rate und den Formaten muss ich schrauben. Die Options-Seite des LibreSpot-Projekts enthält dazu nützliche Hinweise. Von Veränderungen an der Normalisierung und dem Resampling sollte man Abstand nehmen; das macht die Qualität schlimmer, als sie ohnehin schon ist. Wie von Spotify nicht anders zu erwarten war, ist die Tonqualität mässig. Das mag an den Standardeinstellungen liegen, die ich bisher nicht verändert habe: Bit-Rate = 160 kbps.

Fazit

Was Raspotify selbst angeht, bin ich voll des Lobes. Die Installationsanleitung ist vorbildlich; der Installationsprozess ist einfach und bei der Konfiguration muss nur ein Parameter (Device) angepasst werden. Dann läuft die Musik sozusagen 'out of the box'. Man kann an den vielen Einstellungen in der Config-Datei schrauben, um die Qualität zu verbessern.

Für alle, die Musik von einem kommerziellen Anbieter wie Spotify direkt auf die Lautsprecher streamen möchten, ist Raspotify der richtige Weg. Bei den anderen Musik-Anbietern habe ich bisher keine Möglichkeit gefunden, um ein Headless-Streaming auf Linux umzusetzen. Fein raus, sind die Besitzer:innen von Endgeräten, die Streaming-Funktionen eingebaut haben (Sonos und Co).

Nachtrag

Nun habe ich die Librespot-Parameter zu meiner Zufriedenheit angepasst. Sie sehen so aus:

# Bitrate (kbps) {96|160|320}. Defaults to 160.
LIBRESPOT_BITRATE="320"

# Output format {F64|F32|S32|S24|S24_3|S16}. Defaults to S16.
LIBRESPOT_FORMAT="S32"

# Sample Rate to Resample to {44.1kHz|48kHz|88.2kHz|96kHz}. Defaults to 44.1kHz meaning no resampling.
LIBRESPOT_SAMPLE_RATE="96kHz"

# Audio device to use, use `librespot --device ?` to list options. Defaults to the system's default.
LIBRESPOT_DEVICE="hw:CARD=Audio,DEV=0"

# Initial volume in % from 0 - 100.  Defaults to 50 For the alsa mixer: the current volume.
LIBRESPOT_INITIAL_VOLUME="100"

# Range of the volume control (dB) from 0.0 to 100.0. Default for softvol: 60.0.
LIBRESPOT_VOLUME_RANGE="100.0"

Die Bit-Rate von 320 ist das Höchste, was Spotify hergibt. Das Format habe ich auf S32 gestellt, weil es das Beste ich, was mein Device (Nubert) ohne Software-Konvertierung hergibt. So richtig verstanden habe ich diesen Parameter immer noch nicht. Librespot schreibt dazu:

Librespot outputs 16-bit by default, but can be configured to output 64-bit floating point (F64), 32-bit floating point (F32), 32-bit integer (S32), 24-bit PCM in a 32-bit word (S24) or 24-bit integer packed as three bytes (S24_3). Software volume control and normalisation is done before sample conversion, so that there is no loss of dynamic range.

Auch bei der Sample-Rate habe ich mit 96 kHz den höchsten Wert gewählt. Im Gegensatz zu meiner ersten Konfiguration, bei der die Musik etwas zu leise war, spielt sie jetzt in normaler Lautstärke (im Vergleich zu anderen Zuspielern, wie MPD). Verantwortlich dafür ist der Parameter VOLUME_RANGE.

Jetzt passt es für mich, mit dem direkten Streamen von Spotify über einen Raspi per USB an die Lautsprecher.

Quellen:

https://dtcooper.github.io/raspotify/

https://github.com/librespot-org/librespot

https://github.com/librespot-org/librespot/wiki/Options

Tags

Musik, Musik-Streamer, Spotify, Raspotify

Michael
Geschrieben von Michael am 20. März 2024 um 11:23

Moin,

ich persönlich setze für Musik/Audio auch Raspis ein, allerdings mit Ropieee als OS (ich habe auch Roon, LMS und Plex laufen): https://ropieee.org

Anders als der Name vermuten lässt sind neben Roon auch Spotify, Airplay, DLNA, HQPlayer, Squeezelite und Plexamp integriert und das Ganze lässt sich über eine Weboberfläche konfigurieren. Einmal eingerichtet läuft es einfach. Interessant wäre noch Google Cast, für das es jedoch überhaupt keine OpenSource-Lösung als Empfänger gibt.

Michael

Urs Pfister
Geschrieben von Urs Pfister am 20. März 2024 um 11:42

So sehr ich die Serie an sich interessant finde, so sehr würde ich doch anregen wollen, eine eigene Musik-Sammlung aufzubauen. Erstens sind ja all die hier vorgestellten Dienste recht bis brutal proprietär und zweitens habe ich die Erfahrung gemacht, dass es bisher auf jedem Device einfach war, OGG, WAV oder MP3 abzuspielen. So habe ich denn eine dreistellige Anzahl der CDs gerippt, bei den proprietären Diensten einen Freeaccount angelegt und ein paar Klassiker bei den "grossen" mit einem FreeAccount mitgeschnitten. Die Tochter hat viele Hörbücher dazu erfasst und damit lebt unsere Familie seit jeher ohne die Streamer. Ich habe dazu auf der Homepage meiner Firma auch einen Blog erstellt, falls sich jemand dafür interessiert: https://archivista.ch/cms/de/aktuell-blog/blogs-2020/streaming-und-audio - Dort findet sich auch ein Link zum dafür entwickelten Tool mp3tocd. Nicht perfekt, aber für uns reichte es allemal.

Unwissender
Geschrieben von Unwissender am 20. März 2024 um 18:08

Wenn ich eine mittlere dreistellige Zahl an CDs kaufe und rippe, kann ich dafür mehrere Jahrzehnte (!) Musik bei Spotify & Co streamen.

Urs Pfister
Geschrieben von Urs Pfister am 21. März 2024 um 01:22

Einfach mal so als Gedanke, ich habe bald 58 Jahre auf dem Buckel, die CDs stammen zum grössten Teil aus der Zeit, bevor es Streaming-Dienste überhaupt gab. CDs waren mal das Mass der Dinge. Aber Deine Überlegung geht nicht wirklich auf.

Ich habe über ca. 40 Jahre vielleicht pro Jahr 10 CDs erworben, im Schnitt wohl für ca. 12 sFr. War halt auch viel Klassik (Werke von Mozart etc) dabei, dann auch Multi-Editions mit mehreren CDs und auch gebrauchte Ware. 25 Franken oder so hab ich selten bezahlt. Dies ergibt 401012 = 4800.-- sFr.

Dafür gehören diese CDs dafür mir, und wie ich mich schon damals informierte, hat eine CD eine gute Lebensdauer über mehrere Jahrzehnte. Dass es später möglich wurde, sie zu rippen, dies konnte damals niemand ahnen.

Nun kann mann mit seinen CDs auch Privatkopien anlegen, erst auf Kasetten, später auf CDR, ich selber machte dies fast nie, folglich fielen hier auch keine nennenswerten Kosten an. 2006 steuerte meine heutige Frau eine kleinere Sammlung bei, vielleicht ca. 100 CDs, wir wären dann bei sFr. 6000.-- für 500 CDs. Dies ergibt bei ca. 12 Titeln pro CD immerhin 6000 Songs.

Das Rippen der CDs irgendwo um 2007/2008 mit ASunder war wenig zeitaufwendig, vielleicht zwei bis drei Minuten pro CD. Ich arbeitete dazu mit zwei Notebooks einen Tag und eine angebrochene Nacht. Draussen regnete es und ich fand es so cool, keine CDs mehr schleppen zu müssen, dass ich gleich alles in einem Rutsch machte, zugegeben, ich kam spät zu Bett.

Diese Musiksammlung nutz(t)en wir über ca. 10 Jahre auf dem Nokia N900 (bis ca. 2016), später auf dem MotoG5, aktuell auf unseren Fairphones, insgesamt sind wir mittlerweile ca. 18 Jahre digital unterwegs, über die gesamte Nutzungsdauer (ein guter Teil stammt aus der Zeit vor 2000) dürften es im Schnitt wohl ca. vier Jahrzehnte sein.

Nehmen wir als Vergleich z.B. Spotify. Als Familie kostete es uns aktuell 22.95 (war auch mal günstiger) pro Monat. Dies ergibt über 30 Jahre (22.951230) aktuell satte 8262 sFr. Das vierte Jahrzehnt lassen wir mal weg, irgendwann waren die Kinder ja noch nicht auf der Welt und irgendwann werden sie "ausfliegen".

Dafür darf ich dann (wie in dieser Serie beschrieben) einem Linux-Player nachrennen (bei jedem Upgrade kann es mal wieder nicht laufen), allfällig in einer App (läuft noch weniger unter Linux) die Musik zum DRM-Offline-Download beziehen. Ich denke, die meisten werden online unterwegs sein. Darüber freuen sich die Mobilfunkanbieter, weniger wohl jene, welche die Antenne um die Ecke haben (hab ich zum Glück nicht).

Ferner belastet das Streaming die Umwelt, deutlich stärker im übrigen als ich allgemein annehmen würde. Einfach mal nach 'cd vs streaming carbon costs' suchen. Sollte es uns nicht irgendwie zu denken geben, dass für das Streamen weit mehr Energie benötigt wird als früher der gesamte CD-Kreislauf (inkl. dem Vernichten der nicht verkauften Datenträger)?

Abgesehen davon geht es die Konzerne jetzt nicht wirklich was an, was ich wann und wie lange höre. Diese Profile werden durch die Streaming-Companys an Dritte verhökert, alles in allem bleibe ich Mietnomade und Werbefutter. Preissteigerungen muss ich mit der Faust im Sack hinnehmen und das Tracking werde ich bestenfalls dann los, wenn ich den Account zu Grabe trage.

Will ich das wirklich? Letztlich soll und muss das jede/r selber entscheiden. Es soll aber einfach niemand behaupten, die eigene Musiksammlung sei jetzt sooo viel teurer als die Streaming-Dienstleister, das Gegenteil ist der Fall.

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 21. März 2024 um 17:51

Danke Urs, für Deinen langen Kommentar und die Berechnungen. Man kann "das eine tun und das andere nicht lassen". Ich selbst habe auch eine grosse eigene Musiksammlung, höre viel Internetradio und lasse mich gerne von den Vorschlägen der Musikstreaming-Dienste inspirieren. Bei den Diensten bin ich mir noch nicht sicher, ob ich das überhaupt brauche. Ich habe diese Serie geschrieben, weil ich für die Community und für mich selbst Transparenz schaffen wollte.

garfield121
Geschrieben von garfield121 am 21. März 2024 um 14:11

Musikstreaming ist unschlagbar, wenn es darum geht, Neues zu entdecken. Bei Spotify bekommt man jede Woche eine Playlist mit 30 Songs, die sicherlich automatisch generiert wird auf der Basis des eigenen Musikgeschmacks, ganz nettes Feature!

Im Sommer gehe ich ganz gerne auf Open-Air Konzerte, da sind auch Bands dabei, die weitgehend unbekannt sind. Höre ich mir vorher an auf Spotify, meistens finde ich die auch (Trefferquote > 90%).

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 21. März 2024 um 17:41

Ich habe einen Nachtrag in den Artikel geschrieben. Darin beschreibe ich eine angepasste Konfiguration, die zu besseren Ergebnissen führt.