Vinyl geos on Air

Problemstellung

Die alten Boxen waren langsam auf, der eigene Nachwuchs gab ihnen dann den Todesstoß, oder eher den Todes-Finger-Dipp. Der große Verstärker und das CD-Deck waren eh schon immer irgendwie fehlt am Platz. Einzig und alleine der Plattenspieler war noch schick, weil dieses Knistern der Platten einfach einen gewissen Flair haben (und auch das drehen nach drei bis fünf Songs 😉 ). Zudem hat man vielleicht auch die eine oder andere Platte, die bei den großen Streaming-Anbietern so nicht zu haben sind.

Bei uns kam dann die Lösung auch von meiner Frau: Hey, die Sonos-Boxen sehen doch nett aus, kann man überall platzieren, spielen auch gewisse Streaming-Dienste ab und die Boxen im schwedischen Möbelhaus sind preislich völlig in Ordnung (teils auch günstiger gebraucht zu haben). Ok, erstmal den Plattenspieler an die Seite gepackt, zu der Zeit hatte ich eh wenig Ruhe mal eine Platte aufzulegen. Und es gibt ja auch noch die tollen Lösungen von Sonos: Box hinstellen, Stecker rein, in der App auswählen und los geht’s. Vielleicht etwas naiv gedacht und nicht zu ende überlegt, denn die Kostet gerne um 200€+, oder ist in der gebrauchten Variante teilweise nicht mit der aktuellen Sonos-App kompatibel.

Problemlösung

Aber Lösung naht: Ich bin damals auf diesen Blog-Artikel gestoßen: Add Aux to Sonos. Das lässt sich auch noch immer nach der Anleitung zusammenstellen. Dennoch hier mal meine Erfahrungen und Beschreibung:

Grundlage ist die Hardware. In diesem Falle mindestens ein Raspberry Pi 2 (der aktuell auch schon echt schwer zu bekommen ist). Meine Versuche mit einem 1b waren leider alle etwas dürftig. Diverse Aussetzer, Übertragungen waren ruckelig, Qualitativ unschön, auch für nicht audiophile Menschen.
Dazu kommt eine USB-Soundkarte, bei mir eine Behringer U-PHONE UFO202, die mit um 25€ (Stand März 2023) recht erschwinglich ist. Mit dem eingebauten Phono-Vorverstärker erspart man sich das weitere adaptieren. Dazu noch eine Stromversorgung, MicroUSB-Kabel, Netzwerkkabel, eine MicroSD (8Gig reichen hier völlig aus) und schon ist die Einkaufsliste fertig.

Grundinstallation

Das Image ist mit dem Imager schnell installiert, hier lässt sich auch „SSH aktivieren“ gleich mit auswählen. Dann die Karte in den Pi, Kabel und Soundkarte dran, starten und per SSH einloggen (je nach System Putty oder direkt über die Konsole). Bei der Wahl des Systems verzichte ich gerne auf eines mit einer GUI, da sich eigentlich zu 99% auch alles über die Konsole abbilden lässt. Die GUI limitiert an der Stelle nur die saubere Übertragung, indem sie im Hintergrund auch die CPU beansprucht.

Der Pi startet, der Login ist geglückt? Gut, dann erstmal Updaten, Upgraden und neustarten:

sudo update && sudo upgrade -y && sudo reboot now

Soundkarte finden und testen

Das System ist auf dem neuesten Stand, also weiter an die Soundkarte. Die Aufgabe: Das richtige Device finden, eine Aufnahme machen und diese dann auch wieder abspielen. Der erste Befehl gibt alle Sound-Devices aus, der zweite Befehl nimmt dann (hier von Gerät 1,0) eine Audiospur auf und der dritte Befehl gibt sie dann wieder:

arecord -l
arecord -D plughw:1,0 -f cd temp.wav
aplay temp.wav

Darkice und Icecast2 installieren

Nun haben wir schon alle grundlegenden Voraussetzungen, fehlt nur noch die Software zum streamen.

# die entsprechenden Pakete zur Quellenliste hinzufügen
echo "deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi" | sudo tee --append /etc/apt/sources.list
# Source-Liste updaten und die entsprechenden Pakete installieren
sudo apt-get update && sudo apt-get install libmp3lame-dev -y && apt-get source darkice
# in den Ordner von Darkice wechseln
cd darkice-1.2/
# Config schreiben und die Installation anschieben
./configure  --prefix=/usr --sysconfdir=/usr/share/doc/darkice/examples --with-lame --with-lame-prefix=/usr/lib/arm-linux-gnueabihf --with-alsa --with-alsa-prefix=/usr/lib/arm-linux-gnueabihf
make && sudo make install && sudo apt install icecast2

Den Streaming-Server richtig einstellen

Eine allerletzte Hürde ist nun noch zu nehmen: Die korrekte Einstellung für die eigene Umgebung. Im folgenden wird dazu die Konfiguration in eine Datei im Bereich des aktuellen Users geschrieben. Es ist natürlich auch möglich diese allgemeingültiger abzulegen. Die Platzierung an der Stelle hat aber den Vorteil, dass diese eben da am besten wieder gefunden werden. Daher wird mit

sudo nano ~/darkice.cfg

der Nano-Editor gestartet (mein Favorit) und folgendes eingetragen:

[general]
duration        = 0      # duration in s, 0 forever
bufferSecs      = 1      # buffer, in seconds
reconnect       = yes    # reconnect if disconnected

[input]
device          = plughw:<deine Soundkarte> # Soundcard device for the audio input
sampleRate      = 44100   # sample rate 11025, 22050 or 44100
bitsPerSample   = 16      # bits
channel         = 2       # 2 = stereo

[icecast2-0]
bitrateMode     = cbr       # constant bit rate ('cbr' constant, 'abr' average)
#quality         = 1.0       # 1.0 is best quality (use only with vbr)
format          = mp3       # format. Choose 'vorbis' for OGG Vorbis
bitrate         = 320       # bitrate
server          = <dieLokaleIP> # or IP
port            = 8000      # port for IceCast2 access
password        = <deinPasswd>    # source password for the IceCast2 server
mountPoint      = musikstream.mp3  # mount point on the IceCast2 server .mp3 or .ogg
name            = <deinTitel>
description     = <deineBeschreibung>
genre           = <deinGenre>

Nun muss noch der Server beim Start mit angestoßen werden und diese Konfiguration übergeben bekommen, dazu mit

sudo nano ~/darkice.sh

ein neues Shell-Script anlegen und folgendes eintragen:

#!/bin/bash
sudo /usr/bin/darkice -c /home/<yourUser>/darkice.cfg

Sollte die oben erstellte Konfig-Datei NICHT im Stammverzeichnis des Users liegen, muss der Pfad entsprechend angepasst werden, ebenso wie im folgenden Befehl:

# Script ausführbar machen
sudo chmod 755 ~/darkice.sh
# icecast as Service starten
sudo service icecast2 start
# Darkice starten
sudo sh ~/darkice.sh

Nun sollte der Server über http://<deine IP-Adresse>:8000 erreichbar sein und über den laufenden Stream informieren. Sofern nun eine Quelle angeschlossen ist und spielt, ist diese über http://<deine IP-Adresse>:8000/musikstream.mp3 zu hören. Zum ersten Testen eignet sich der vlc-Player ganz gut. Einfach STRG+N, Steam-Adresse angeben und los. Startet der Server nicht vollständig, kann das an Problemen in der Konfiguration von icecast2 liegen. Auch hier ist zB. die IP-Adresse hinterlegt.

Damit das aber auch beim nächsten Start noch schön funktioniert, muss noch ein CronTab angelegt werden. Dieser kann einfach auf den Start getriggert werden:

#Croneditor starten !!ohne SUDO!!:
crontab -e
# Eintragung
@reboot sleep 10 && sudo /home/<yourUer>/darkice.sh

Zeit zum aufräumen

Nun sollte alles soweit funktionieren. Es gibt aber noch so Kleinigkeiten zu bereinigen:

# Installation und Pakete aufräumen
sudo apt autoremove -y && sudo apt clean -y && sudo apt purge $(dpkg --get-selections | grep deinstall | cut -f1 | xargs)
# Soundeingang des Pis deaktivieren..

Nun endlich auf die Sonos Streamen

Wie bekommt man nun den Stream auf die Sonos? Zum Beispiel mittels Desktop App. Oder mit der TuneIN-App auf dem Handy, über eine nutzerdefinierte URL in der Bibliothek. Oder aber via Smarthome, welches auch Anweisungen an die Sonos schicken kann: playstream (StreamURL). Direkt in der Sonos-App ist diese Lösung leider nicht abspielbar, aber mit aktuell etwas um 70-100€, je nach EK-Preis des Pis, deutlich günstiger als eine neue Sonos-Connect, Sonos-Port(~400€) oder die Sonos-AMP.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert