PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfacher RapsberryPi Streamer mit DSP-Funktionalität



Slaughthammer
10.01.2022, 23:35
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 (https://github.com/rern/rAudio-1), 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


nano /etc/modprobe.d/alsa-aloop.conf
die Datei "alsa-aloop.conf" in dem angegebenen Verzeichnis erstellen und im Editor öffnen. Dort dann

options snd-aloop enable=1 index=2 pcm_substreams=1 id=Loopback
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:


nano /etc/modules-load.d/snd_aloop.conf

und schreiben hinein

snd_aloop
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


devices+=$'\n\n<bll># aplay -l | grep ^card</bll>\n'$( aplay -l | grep ^card | grep -v Loopback )
Das ändern wir jetzt in


devices+=$'\n\n<bll># aplay -l | grep ^card</bll>\n'$( aplay -l | grep ^card )

genauso ändern wir in /srv/http/bash/mpd-devices.sh in Zeile 16


aplay=$( aplay -l 2> /dev/null | grep '^card' | grep -v Loopback )
in

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 (https://rtaylor.sites.tru.ca/2013/06/25/digital-crossovereq-with-open-source-software-howto/)

Dazu also erstmal ecasound installieren, ist zum Glück im Repository.

pacman -S ecasound
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:


pacman -S ladspa
pacman -S cmake
pacman -S make
pacman -S base-devel
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:


wget https://faculty.tru.ca/rtaylor/rt-plugins/rt-plugins-0.0.6.tar.gz
tar -xf rt-plugins-0.0.6.tar.gz

Den Rest kann man dann auch vom Entwickler selber abtippen:


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:


export LADSPA_PATH=/usr/local/lib/ladspa:/usr/lib/ladspa

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:


nano /etc/systemd/system/ecasound.service
und schreiben hinein:


[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.target

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 (https://rtaylor.sites.tru.ca/2013/06/25/digital-crossovereq-with-open-source-software-howto/). 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 (https://www.earlevel.com/main/2016/09/29/cascading-filters/) 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:


systemctl enable ecasound.service
Um zu testen ob alles geklappt hat starte ich den Service dann manuell:


systemctl start ecasound
und gucke ob alles in Ordnung ist


systemctl status ecasound
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

Koaxfan
11.01.2022, 08:06
Sehr cool, vielen Dank! Ich habe mir sowas in abgespeckter Form und natürlich ohne DSP auf nem Orange Pi gebaut, mit dieser Anleitung gehe ich aber vielleicht doch mal an einer der vielen wartenden Raspis dran. Die Soundkarte ist die LogiLink, oder?

Slaughthammer
11.01.2022, 10:10
Ähh ja, genau. Logilink. Sollte aber grundsätzlich mit jeder Mehrkanal Soundkarte die Linux unterstützt funktionieren, da gibt es ein paar sehr ähnliche zu der Logilink, die intern vermutlich nahezu baugleich sind...

Gruß, Onno

The Alchemist
11.01.2022, 11:20
Super, dass das funktioniert.
Ich hab nochmal nachgeschaut, mein Hinweis, dass sich die Plugins auf auf dem Pi nicht kompilieren lassen, ist vom Sommer 2013 :D. Ich selbst hab das nie mehr versucht..
Gruß

capslock
11.01.2022, 11:39
Klingt ja sehr spannend. Gibt es irgendwo einen Schnelleinstieg für Raspi bzw. Linux-Noobs? Das ist es, was mich bislang immer davon abgeschreckt hat, das auszuprobieren, dass solche Anleitungen immer Vorkenntnisse voraussetzen.

Und was heißt der Satz? Das man ein automatisch hochpoppendes Update zumachen soll?

Nicht das initiale Update im Webinterface unter Addons - Update zu machen!

Slaughthammer
11.01.2022, 12:41
Und was heißt der Satz? Das man ein automatisch hochpoppendes Update zumachen soll?

Nicht das initiale Update im Webinterface unter Addons - Update zu machen!

Da sollte eigentlich stehen: Nicht vergessen das Update zu machen... Habe es oben korrigiert.

Slaughthammer
11.01.2022, 22:08
Super, dass das funktioniert.
Ich hab nochmal nachgeschaut, mein Hinweis, dass sich die Plugins auf auf dem Pi nicht kompilieren lassen, ist vom Sommer 2013 :D. Ich selbst hab das nie mehr versucht..
Gruß

Ich hab die rt-plugins bisher immer auf dem Pi gebaut, habe aber erst 2019 (ernsthaft) damit angefangen.



Gibt es irgendwo einen Schnelleinstieg für Raspi bzw. Linux-Noobs? Das ist es, was mich bislang immer davon abgeschreckt hat, das auszuprobieren, dass solche Anleitungen immer Vorkenntnisse voraussetzen.

Ja, das ist so eine Sache... Hat bei mir auch ewig gedauert bis ich damit einigermaßen warm geworden bin. Meine ersten Versuche (https://www.diy-hifi-forum.eu/forum/showthread.php?10313-Raspberry-Pi-2-M%F6glichkeiten)* sind auch im Sande verlaufen. Da war meine Motivation einfach nicht groß genug da am Ball zu bleiben. Wenn man da gar keine Erfahrung mit hat ist das am Anfang echt frustrierend. Man ist die ganze Zeit nur damit beschäftigt irgendwelche Befehle zu recherchieren und Fehlermeldungen in google kopieren. Richtig voran ging es eigentlich erst als ich ein konkretes Projekt hatte und einer der Informatiker im Freundeskreis sich mal über Chat und mal einen Samstag zusammen sitzen und das zusammen frickeln eingebracht hat.

Ansonsten einfach mal machen. Das finanzielle Risiko ist überschaubar. Ein Pi 3 wie ich ihn einsetze kosten um die 40€ (https://www.welectron.com/Raspberry-Pi-3-Modell-B-Made-in-UK_1?utm_campaign=gs), und wenn einem 6 analoge Ausgänge reichen, kann man auch nur 19€ in die Soundkarte investieren (https://www.amazon.de/Externe-Soundkarte-Anschluss-Adapter-Kan%C3%A4len/dp/B07B628J7V/ref=pd_lutyp_im_5/262-5249324-6533717?pd_rd_w=1Gjn3&pf_rd_p=fd4eb1ad-260e-48ff-9420-8973752baa2d&pf_rd_r=0JC1YGH22ZH19YEGA5MM&pd_rd_r=7e47455f-e2d4-4888-a861-d58d5bd41c74&pd_rd_wg=cr0R0&pd_rd_i=B07B628J7V&psc=1). Ach ja, einigermaßen gutes Englisch ist definitiv von Vorteil, wenn nicht notwendig. Wenn man jemanden hat der bei Problemen weiterhilft ist das auch kein großer Nachteil ;) 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.

Also mein Ansatz da rein zu kommen ist ein konkretes Problem zu haben das ich lösen will und dann einfach durchbeißen. Erstmal gucken welche Schritte dafür nötig sind: Als erstes immer SD-Karte flashen, dann eine Möglichkeit schaffen Zugriff auf den Pi zu haben, usw usw... Da muss man sich einfach jeden Schritt einzeln ergooglen. Das gute am RaspberryPi ist ja gerade, dass sich viele Leute mit wenig Ahnung damit befassen und dann die Foren damit füllen. Also sind die meisten Probleme die man hat schon irgendwo mal aufgetreten und hoffentlich gelöst worden.

Ach ja, an alle FIR-Festischisten: Man kann nach dem gleichen Schema da natürlich auch ein BruteFIR statt einem eccasound als DSP-Software eingliedern. Der Pi3 hat dafür auch etwas an Rechenleistung zur Verfügung, in meinem Setup ohne FIR ist die Prozessorlast meist unter 10%.

Gruß, Onno

*Da wurde auch schon die hier zitierte Anleitung von Richard Taylor verlinkt

capslock
11.01.2022, 23:03
Kann ecasound kein FIR? Habe mal kurz gegoogelt, scheint ja eigerlegende Wollmilchsau für Tonstudio zu sein, aber zu DSP-Funktionalität habe ich in dem Wust nichts gefunden.

Slaughthammer
12.01.2022, 00:01
in erster Linie ist ecasound eine Umgebung in der LADSPA Plugins laufen. Wie z.B. die erwähnten rt-plugins... soweit ich weiß hat noch keiner einen Convolver auf dieser Basis geschaffen... Es wurde bisher wenns daraum ging meist schnell auf BruteFIR verwiesen, in jüngerer Vergangenheit auch gerne auf camillaDASP (https://github.com/HEnquist/camilladsp/tree/develop)

Camilla könnte man hier auch an Stelle von ecasound nutzen, das sollte sich genau so zwischen Loopback und Merhkanalsoundkarte routen lassen. In die Konfiguration davon müsste man sich aber auch erstmal einarbeiten, das geht auch nur über ein config file... Naja, vielleicht mache ich das demnächst ja mal.

Slaughthammer
12.01.2022, 16:50
soweit ich weiß hat noch keiner einen Convolver auf dieser Basis geschaffen...

Ok, da war mein Wissen wohl nicht sonderlich vollständig:
http://audio.claub.net/LADSPA-plugins.html
Dokumentation: https://www.diyaudio.com/community/threads/fir-ladspa-a-ladspa-plugin-for-fir-filtering.351096/post-6134084

sion
16.01.2022, 10:46
Hallo Onno,

super Anleitung, die habe ich gleich mal abgespeichert. Auch wenn ich derzeit keinen Bedarf habe. Aber es frischt bei mir auch altes Wissen auf. Vielen Dank für Deine Bemühungen... Bei der Gelegenheit: MoodeAudio bringt CamillaDSP schon vorinstalliert mit. Getestet habe ich es nicht.

Liebe Grüße

Klaus

rkv
16.01.2022, 11:20
Hallo Onno,

Du empfiehlst ein UAC2-Audiointerface. Mal abgesehen, dass der Preis für jeden, der beruflich im Audio-Segment unterwegs ist, ein Alptraum ist, hast Du USB-Audio Class 2 schon mit RasPi ausprobiert und läuft das befriedigend? Mein letzter Stand war, dass der UAC2-Stack eine viel zu hohe Systemlast erzeugt. Deswegen habe ich die Entwicklung da nicht weiter verfolgt.

Raphael

Slaughthammer
16.01.2022, 12:27
Bei der Gelegenheit: MoodeAudio bringt CamillaDSP schon vorinstalliert mit. Getestet habe ich es nicht.



Wenn ich das richtig sehe basiert Moode auf dem RaspberryPi OS? Das fand ich immer ziemlich veraltet und bloated.. Werde es aber wohl mal testen.

Habe die Tage noch im ASR-Forum diesen Thread (https://www.audiosciencereview.com/forum/index.php?threads/rpi4-camilladsp-tutorial.29656/) gefunden... ich wusste vorher gar nicht dass es für camilladsp mittlerweile ein Webinterface mit GUI gibt. Das sollte sich eigentlich auch in rAudio integrieren lassen. Ich werde die Tage da nochmal experimentieren. Wenn man sich damit das lästige bauen der rt-plugins sparen könnte wäre das was, camilladsp wäre per WebGUI auch einfacher in der Konfiguration. Um das Loopbackdevice kommt man aber wohl nicht herum. Bei moode haben die camilla wohl per pipe integriert, das ist mir aber zu fummelig.

Gruß, Onno

Slaughthammer
16.01.2022, 12:33
Hallo Onno,

Du empfiehlst ein UAC2-Audiointerface. Mal abgesehen, dass der Preis für jeden, der beruflich im Audio-Segment unterwegs ist, ein Alptraum ist, hast Du USB-Audio Class 2 schon mit RasPi ausprobiert und läuft das befriedigend? Mein letzter Stand war, dass der UAC2-Stack eine viel zu hohe Systemlast erzeugt. Deswegen habe ich die Entwicklung da nicht weiter verfolgt.

Raphael

Ich hab die Soundkarte per USB angeschlossen und das funktioniert... sowohl unter Raspbian Buster als auch unter rAudio/Archarm. Auch alle 8 Kanäle. Ohne übermäßige Prozessorlast. Viel mehr kann ich dazu nicht sagen. Was da intern für Treiber arbeiten weiß ich nicht. Ich habe da nichts installiert/konfiguriert.

Gruß, Onno

rkv
16.01.2022, 14:50
Cool.
Die 19Eur treiben einem die Tränen in die Augen. Dafür kann man in Europa vermutlich noch nichtmal das Gehäuse kaufen.