10.01.2022, 23:35
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2022, 12:39 von Slaughthammer.)
Moin,
ich habe dieses Wochenende den RaspberryPi in meiner mobilen Anlage mit einem neuen Betriebssystem versehen, und das wollte ich euch nicht vorenthalten. Da hat sich in den letzten Jahren doch einiges getan.
Verwendete Hardware: RaspberryPi 3B Rev1.2, Logilink UA0099 7.1 USB Sound Box
Verwendete Software: rAudio1, ein fork von runeaudio.
Das Image bringt von sich aus schon ziemlich vieles mit was ich mir vorher mühsam in ein Raspbian eingehackt habe: MPD, Bluetooth reciever, Webinterface, macht automatisch nen WLAN Accespoint auf, wenn kein bekanntes Netzwerk da ist... dazu noch viele Goodies, die ich bisher nicht hatte/brauchte wie: Spotify, Airplay, Snapcast, UPnP... Das einzige was eigentlich noch fehlt ist der DSP-Kram. Und damit man das Nachrüsten davon hier mal an einer Stelle immer wiederfindet dokumentiere ich das hier jetzt.
Also erstmal das Image flashen und die initiale config machen. Das ist erstaunlich komfortabel geworden, der macht einfach seinen AP auf, kurz mit dem Handy reinverbinden, Webinterface aufrufen und ins lokale WLAN einpflegen, alles so wie man es von gekauften Geräten auch gewöhnt ist. Aber keine Angst, die gefürchtete Konsole kommt jetzt als nächstes. Nicht vergessen das initiale Update im Webinterface unter Addons - Update zu machen!
Erstmal müssen wir die Audiosignale irgendwo abgreifen um die in die DSP-Sektion zu füttern. Zum Glück hat ALSA dafür gleich das richtige Werkzeug an Bord: Das Loopback Device. Um das zu spezifizieren brauchen wir zwei config files, die wir auf dem Pi erstellen müssen. Dazu also erstmal aus der eigenen Konsole (ich nutze Powershell) per ssh verbinden. Im Webinterface wird die dafür nötige Adresse freundlicherweise gleich angezeigt. Falls man einen halbwegs kompetentes WLAN hat sollte man sich mit "ssh raudio.local -l root" einloggen können. Das geforderte Passwort ist "ros". Das sollte man auch gleich ändern mit dem Befehl "passwd root". Dann mit dem Befehl
die Datei "alsa-aloop.conf" in dem angegebenen Verzeichnis erstellen und im Editor öffnen. Dort dann
eingeben und strg+x beenden, mit y bestätigen dass man die Änderung speichern will und mit Enter bestätigen dass man die gerade erstellte leere Datei überschreiben möchte. Jetzt ist definiert, wie das Loopback device ungefähr aussehen soll.
Dann müssen wir dem System nur noch sagen, dass das auch beim boot automatisch geladen werden soll. Dazu erstellen wir wieder eine Datei:
und schreiben hinein
wieder schließen und speichern. Beim nächsten Neustart ist das Loopback Device dann da.
Leider hat der Schöpfer dieser Software was gegen Loopbacks und die aus der Liste der wählbaren Outputs ausgefiltert! Das sind aber nur zwei Scripte die nicht kompiliert werden müssen und man einfach so ändern kann. In der Datei /srv/http/bash/player.sh steht in Zeile 170
Das ändern wir jetzt in
genauso ändern wir in /srv/http/bash/mpd-devices.sh in Zeile 16
in
Kann man in nano ("nano /srv/http/bash/player.sh") direkt in der Konsole machen. Zeile 170 suchen geht mit strg+/
Jetzt die Kiste einmal neustarten falls das nach dem erstellen des loopbacks nicht gemacht wurde. Dann kann man im Webinterface auf einmal auf das Loopback als Output auswählen. Diese Änderungen werden möglicherweise durch ein update von rAudio über das Webinterface wieder zurückgefahren, also am besten nicht mehr updaten.
Jetzt noch die DSP-Funktionalität installieren. Ich mache das nach Richard Taylor mit ecasound
Dazu also erstmal ecasound installieren, ist zum Glück im Repository.
und wieder die Nachfrage mit y bestätigen. Die praktischen Plugins, die der Taylor nutzt sind leider nicht so einfach verfügbar, die muss man sich aus den Scourcen selber bauen. Da runeaudio möglichst schlank gehalten wurde müssen wir dafür erst die nötige Infrastruktur installieren:
jeweils immer die Installation bestätigen.
Als nächstes brauchen wir die scourcen von den rt-plugins, also mit wget herunterladen und mit tar entpacken:
Den Rest kann man dann auch vom Entwickler selber abtippen:
Damit die Plugins dann von ecasound beim aufrufen auch gefunden werden, müssen wir dem System noch sagen wo es danach suchen soll:
Um ecasound nun zu starten müssen wir den recht länglichen Befehl, der gleichzeitig das komplette Setup definiert in die Konsole eingeben. Da man das nicht nach jeden neustrart machen möchte, habe ich mir das als Service automatisiert. Dazu erstellen wir die Datei:
und schreiben hinein:
Das was da hinter 'ExecStart=-/usr/bin' steht ist die komplette konfiguration von ecasound! (der darf keine Zeilenschaltungen enthalten, ich hab die hier nur eingefügt damit das Layout nicht kaputt geht) Nur die einzelnen Filter habe ich in externe Dateien ausgelagert damit der Befehl nicht noch länger wird. Den Anfang "ecasound -D -z:mixmode,sum -x -a:pre -i:alsahw,2,1,0" und das Ende "-f:16,6,44100 -o:alsa,surround51:ICUSBAUDIO7D -B:rtlowlatency -tl -r:SCHED_FIFO -b:768" sollte man hier einfach übernehmen, zumindest wenn man maximal 6 ausgangskanäle braucht. Ansonsten entsprechend anpassen. Die 6 in "-f:16,6,44100" steht für die Anzahl der Kanäle, und die 51 in "o:alsa,surround51:ICUSBAUDIO7D" steht dafür, dass ALSA die Soundkarte mit einem 5.1 mapping öffnet. Wenn man alle 8 Kanäle braucht also entsprechend auf "-f:16,8,44100" und "o:alsa,surround71:ICUSBAUDIO7D" ändern. "ICUSBAUDIO7D" ist der Name der Logilink 7.1 USB Sound Box in diesem System. Wer ne andere Soundkarte nutzt kann unter "aplay -l" nachgucken wie die heißt und das da entsprechend ändern. Wie man den Teil dazwischen ermittelt, da verweise ich einfach mal auf die schon genannte Anleitung von Richard Taylor. Er verlinkt da auch auf seine Plugins die wir vorhin schon gebaut und installiert haben. Im wesentlichen sind die sehr ähnlich wie die Filter in EqualizerAPO zu benutzen, die Syntax ist etwas anders, funktiionalität aber vergleichbar. Wenn ich Hoch/tiefpässe höherer Ordnung brauche gucke ich immer hier nach wie ich die kaskadieren muss (ein LR-Filter n-ter Ordnung sind auch nur zwei BW-Filter n/2-ter Ordnung hintereinander). Und LR4 Filter sind ja sogar inklusive.
Ich empfehele es sich diesen Befehl irgendwo handlich abzuspeichern und dann zuerst einfach so in der Konsole zu testen ob er wirklich das tut was er soll. Einen Testlauf bricht man strg+c wieder ab, der läuft sonst endlos weiter. Dann wenn alles läuft also diesen Befehl in besagte Datei "/etc/systemd/system/ecasound.service" eintragen. Jetzt müssen wir den Service nur noch aktivieren:
Um zu testen ob alles geklappt hat starte ich den Service dann manuell:
und gucke ob alles in Ordnung ist
Da sollte dann in grün was von active stehen. Wenn man jetzt noch was an der Datei ecasound.service verändern muss, hinterher mit einem kurzen "systemctl daemon-reload" diese änderungen auch übernehmen
Wenn das jetzt läuft sollte sich das ganze System sich bei jedem Start von alleine in diesen Zustand bringen, dass alles an Audiowiedergabe über das Loopback Device durch ecasound auf die spezifizierte Soundkarte geleitet wird.
Ich hoffe das hilft irgendjemandem mal. Im Zweifelsfall mir selbst, wenn ich das alles beim nächsten Bastelanfall wieder vergessen habe.
Gruß, Onno
ich habe dieses Wochenende den RaspberryPi in meiner mobilen Anlage mit einem neuen Betriebssystem versehen, und das wollte ich euch nicht vorenthalten. Da hat sich in den letzten Jahren doch einiges getan.
Verwendete Hardware: RaspberryPi 3B Rev1.2, Logilink UA0099 7.1 USB Sound Box
Verwendete Software: rAudio1, ein fork von runeaudio.
Das Image bringt von sich aus schon ziemlich vieles mit was ich mir vorher mühsam in ein Raspbian eingehackt habe: MPD, Bluetooth reciever, Webinterface, macht automatisch nen WLAN Accespoint auf, wenn kein bekanntes Netzwerk da ist... dazu noch viele Goodies, die ich bisher nicht hatte/brauchte wie: Spotify, Airplay, Snapcast, UPnP... Das einzige was eigentlich noch fehlt ist der DSP-Kram. Und damit man das Nachrüsten davon hier mal an einer Stelle immer wiederfindet dokumentiere ich das hier jetzt.
Also erstmal das Image flashen und die initiale config machen. Das ist erstaunlich komfortabel geworden, der macht einfach seinen AP auf, kurz mit dem Handy reinverbinden, Webinterface aufrufen und ins lokale WLAN einpflegen, alles so wie man es von gekauften Geräten auch gewöhnt ist. Aber keine Angst, die gefürchtete Konsole kommt jetzt als nächstes. Nicht vergessen das initiale Update im Webinterface unter Addons - Update zu machen!
Erstmal müssen wir die Audiosignale irgendwo abgreifen um die in die DSP-Sektion zu füttern. Zum Glück hat ALSA dafür gleich das richtige Werkzeug an Bord: Das Loopback Device. Um das zu spezifizieren brauchen wir zwei config files, die wir auf dem Pi erstellen müssen. Dazu also erstmal aus der eigenen Konsole (ich nutze Powershell) per ssh verbinden. Im Webinterface wird die dafür nötige Adresse freundlicherweise gleich angezeigt. Falls man einen halbwegs kompetentes WLAN hat sollte man sich mit "ssh raudio.local -l root" einloggen können. Das geforderte Passwort ist "ros". Das sollte man auch gleich ändern mit dem Befehl "passwd root". Dann mit dem Befehl
Code:
nano /etc/modprobe.d/alsa-aloop.confCode:
options snd-aloop enable=1 index=2 pcm_substreams=1 id=LoopbackDann müssen wir dem System nur noch sagen, dass das auch beim boot automatisch geladen werden soll. Dazu erstellen wir wieder eine Datei:
Code:
nano /etc/modules-load.d/snd_aloop.confCode:
snd_aloopLeider hat der Schöpfer dieser Software was gegen Loopbacks und die aus der Liste der wählbaren Outputs ausgefiltert! Das sind aber nur zwei Scripte die nicht kompiliert werden müssen und man einfach so ändern kann. In der Datei /srv/http/bash/player.sh steht in Zeile 170
Code:
devices+=$'\n\n<bll># aplay -l | grep ^card</bll>\n'$( aplay -l | grep ^card | grep -v Loopback )Code:
devices+=$'\n\n<bll># aplay -l | grep ^card</bll>\n'$( aplay -l | grep ^card )Code:
aplay=$( aplay -l 2> /dev/null | grep '^card' | grep -v Loopback )Code:
aplay=$( aplay -l 2> /dev/null | grep '^card' )Kann man in nano ("nano /srv/http/bash/player.sh") direkt in der Konsole machen. Zeile 170 suchen geht mit strg+/
Jetzt die Kiste einmal neustarten falls das nach dem erstellen des loopbacks nicht gemacht wurde. Dann kann man im Webinterface auf einmal auf das Loopback als Output auswählen. Diese Änderungen werden möglicherweise durch ein update von rAudio über das Webinterface wieder zurückgefahren, also am besten nicht mehr updaten.
Jetzt noch die DSP-Funktionalität installieren. Ich mache das nach Richard Taylor mit ecasound
Dazu also erstmal ecasound installieren, ist zum Glück im Repository.
Code:
pacman -S ecasoundCode:
pacman -S ladspa
pacman -S cmake
pacman -S make
pacman -S base-develAls nächstes brauchen wir die scourcen von den rt-plugins, also mit wget herunterladen und mit tar entpacken:
Code:
wget https://faculty.tru.ca/rtaylor/rt-plugins/rt-plugins-0.0.6.tar.gz
tar -xf rt-plugins-0.0.6.tar.gzDen Rest kann man dann auch vom Entwickler selber abtippen:
https://faculty.tru.ca/rtaylor/rt-plugins/index.html schrieb:Enter the build folder: cd rt-plugins-x.x.x/build/
Run cmake: cmake ..
Maybe edit the Makefile (you probably don't need to)
Compile the code: make
Install it: sudo make install
Damit die Plugins dann von ecasound beim aufrufen auch gefunden werden, müssen wir dem System noch sagen wo es danach suchen soll:
Code:
export LADSPA_PATH=/usr/local/lib/ladspa:/usr/lib/ladspaUm ecasound nun zu starten müssen wir den recht länglichen Befehl, der gleichzeitig das komplette Setup definiert in die Konsole eingeben. Da man das nicht nach jeden neustrart machen möchte, habe ich mir das als Service automatisiert. Dazu erstellen wir die Datei:
Code:
nano /etc/systemd/system/ecasound.serviceCode:
[Unit]
Description=ecasound
[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=ecasound # without any quote
Environment="LADSPA_PATH=/usr/local/lib/ladspa:/usr/lib/ladspa"
ExecStart=-/usr/bin/ecasound -D -z:mixmode,sum -x -a:pre -i:alsahw,2,1,0 -pf:home/pi/.config/ecasound/pre.ecp -o:loop,1 -a:subL,subR,mid,tweeter
-i:loop,1 -a:subL -pf:/home/pi/.config/ecasound/Sub.ecp -ea:50 -chorder:1,0,0,0,0,0 -a:subR -pf:/home/pi/.config/ecasound/Sub.ecp -ea:50
-chorder:2,0,0,0,0,0 -a:mid -pf:/home/pi/.config/ecasound/Mid.ecp -chorder:0,0,1,0,2,0 -a:tweeter -pf:/home/pi/.config/ecasound/Tweeter.ecp
-chorder:0,0,0,1,0,2 -a:subL,subR,mid,tweeter -f:16,6,44100 -o:alsa,surround51:ICUSBAUDIO7D -B:rtlowlatency -tl -r:SCHED_FIFO -b:768
[Install]
WantedBy=default.targetDas was da hinter 'ExecStart=-/usr/bin' steht ist die komplette konfiguration von ecasound! (der darf keine Zeilenschaltungen enthalten, ich hab die hier nur eingefügt damit das Layout nicht kaputt geht) Nur die einzelnen Filter habe ich in externe Dateien ausgelagert damit der Befehl nicht noch länger wird. Den Anfang "ecasound -D -z:mixmode,sum -x -a:pre -i:alsahw,2,1,0" und das Ende "-f:16,6,44100 -o:alsa,surround51:ICUSBAUDIO7D -B:rtlowlatency -tl -r:SCHED_FIFO -b:768" sollte man hier einfach übernehmen, zumindest wenn man maximal 6 ausgangskanäle braucht. Ansonsten entsprechend anpassen. Die 6 in "-f:16,6,44100" steht für die Anzahl der Kanäle, und die 51 in "o:alsa,surround51:ICUSBAUDIO7D" steht dafür, dass ALSA die Soundkarte mit einem 5.1 mapping öffnet. Wenn man alle 8 Kanäle braucht also entsprechend auf "-f:16,8,44100" und "o:alsa,surround71:ICUSBAUDIO7D" ändern. "ICUSBAUDIO7D" ist der Name der Logilink 7.1 USB Sound Box in diesem System. Wer ne andere Soundkarte nutzt kann unter "aplay -l" nachgucken wie die heißt und das da entsprechend ändern. Wie man den Teil dazwischen ermittelt, da verweise ich einfach mal auf die schon genannte Anleitung von Richard Taylor. Er verlinkt da auch auf seine Plugins die wir vorhin schon gebaut und installiert haben. Im wesentlichen sind die sehr ähnlich wie die Filter in EqualizerAPO zu benutzen, die Syntax ist etwas anders, funktiionalität aber vergleichbar. Wenn ich Hoch/tiefpässe höherer Ordnung brauche gucke ich immer hier nach wie ich die kaskadieren muss (ein LR-Filter n-ter Ordnung sind auch nur zwei BW-Filter n/2-ter Ordnung hintereinander). Und LR4 Filter sind ja sogar inklusive.
Ich empfehele es sich diesen Befehl irgendwo handlich abzuspeichern und dann zuerst einfach so in der Konsole zu testen ob er wirklich das tut was er soll. Einen Testlauf bricht man strg+c wieder ab, der läuft sonst endlos weiter. Dann wenn alles läuft also diesen Befehl in besagte Datei "/etc/systemd/system/ecasound.service" eintragen. Jetzt müssen wir den Service nur noch aktivieren:
Code:
systemctl enable ecasound.serviceCode:
systemctl start ecasoundCode:
systemctl status ecasoundWenn das jetzt läuft sollte sich das ganze System sich bei jedem Start von alleine in diesen Zustand bringen, dass alles an Audiowiedergabe über das Loopback Device durch ecasound auf die spezifizierte Soundkarte geleitet wird.
Ich hoffe das hilft irgendjemandem mal. Im Zweifelsfall mir selbst, wenn ich das alles beim nächsten Bastelanfall wieder vergessen habe.
Gruß, Onno
wissen ist macht. nicht wissen macht auch nichts.


. Ich selbst hab das nie mehr versucht..
Im zweifelsfall sind hier im Forum ein paar Spezis auf dem Gebiet. Ich selber merke mit jedem mal dass ich was dran mache dass es mir einfacher von der Hand geht. Ich erwische mich mittlerweile sogar schon manchmal dabei Sache in der Konsole zu machen, die ich auch übers GUI machen könnte, weils in der Konsole schneller geht! Und ich bin da auch immer noch alle halbe Jahr für ein, zwei Wochenenden mit befasst. Der Kram soll ja laufen und nicht laufend Arbeit machen.