Ubuntu Docker Container auf Synology: USB-Soundkarte & ALSA

CitroenDsVier

Lt. Commander
Registriert
Dez. 2013
Beiträge
1.885
Hi zusammen,

ich würde gerne über meine NAS (Synology DS716+II, DSM 6.1) über Spotify Connect Musik streamen können. Der Grund, die NAS dafür zu verwenden, ist die aktuelle Position der NAS im Haus, und dass ich aktuell keinen Raspberry Pi habe, den ich dorthin entbehren könnte.
Grundsätzlich ist der Spotify-Teil relativ schnell umsetzbar, in einer Ubuntu-VM habe ich das Ganze schon zum Laufen bekommen. Das entsprechende Stück Software nennt sich "spotifyd" und ist für Linux erhältlich. Leider ist meine NAS nativ nicht in der Lage, VMs zu hosten, weshalb ich hierfür auf Docker ausweichen muss/möchte.

Dafür habe ich bereits ein entsprechendes Docker Image gefunden und für meine Ansprüche leicht verändert, der Spotify-Teil funktioniert auch (ich kann in Spotify auf meinem Rechner / Handy / ... den neuen Spotify Connect Server finden und Musik darauf abspielen).

Probleme habe ich aber im zweiten Teil des Vorhabens: Der Ton muss aus dem Docker Container über das Synology-Hostsystem in eine USB-Soundkarte kommen. Langfristig plane ich, eine günstige USB-Soundkarte dafür zu besorgen. Aktuell habe ich zwei USB-Soundkarten hier, die ich erst einmal für einen "proof of concept" verwenden möchte:
- Focusrite Scarlett 2i4 2nd Gen
- Plantronics Blackwire 325.1 USB-Headset

Beide Karten werden vom Hostsystem als USB-Geräte erkannt ("lsusb" listet sie auf).
Das Gastsystem (Docker Container) erkennt sie ebenfalls, aber nicht als Soundkarten (Details weiter unten). An dieser Stelle bin ich davon ausgegangen, dass das für spotifyd verwendete Base-Image eventuell zu minimalistisch ist und daher keine generischen Soundkarten-Treiber (?) dabei haben könnte, weshalb mein nächstes Ziel war, aus irgendeinem Docker-Container irgendeinen Ton auf irgendeiner der an der NAS angeschlossenen Soundkarten zu produzieren.


Dafür bin ich dann vorerst auf Ubuntu 20.04 gewechselt. Den Docker Container hierfür habe ich mit dem Befehl
Code:
docker run -t -i --device=/dev/bus/usb/003/003 ubuntu:20.04 bash
gestartet. Das Passthrough vom USB-Gerät scheint auch zu funktionieren, zumindest findet auch Ubuntu im Docker Container über "lsusb" die Soundkarte. Ein "aplay -l", um die ALSA-Soundkarten aufzulisten, liefert aber "no soundcards found...", und hier ist die Baustelle: Was muss ich tun, damit eine meiner beiden Soundkarten im Ubuntu-Docker-Image auch als Soundkarte erkannt wird und einen Ton produziert?

(Was mich aktuell noch etwas verwirrt, ist, dass auch ohne das "--device=..."-Argument anscheinend beide USB-devices an den Gast durchgereicht werden. Zumindest kann ich das Argument komplett weglassen und bekomme mittels "lsusb" trotzdem beide Geräte aufgelistet. Kann mir das Jmd erklären?)

MfG, V40
 
Update: Inzwischen habe ich es hinbekommen, dem Container einen Ton zu entlocken. Der Trick war, als "device"-Argument "/dev/snd" zu übergeben.

Der letzte Haken ist jetzt noch, spotifyd beizubringen, das richtige ALSA-device zu verwenden. Die Doku sagt hierzu nur
Code:
To get a list of valid devices, run `aplay -L`,
allerdings wird nicht gesagt, welcher Teil des Outputs dieses Befehls am Ende relevant ist. Mein Output sieht wie folgt aus:
Code:
root@abc:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: USB [Scarlett 2i4 USB], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: P3251 [Plantronics Blackwire 325.1], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

- Was ist hier das Alsa-device?
 
Puh, alsa ist ne Weile her, zuletzt alles mit Pulseaudio erledigt aber ich versuch es mal.
Linux ist case sensitive daher vermute ich einen Vertipper deinerseits. Was liefert denn die Ausgabe von aplay -L? Deine Ausgabe ist mit kleinem L.
Aber auch deine Ausgabe listet ja bereits beide o.g. USB-Sound"karten". Anschließend könntest du mit dem Befehl speaker-test probieren ob du Sound bekommst. Weitere Infos ab hier: https://wiki.ubuntuusers.de/ALSA/#Nomenklatur
 
  • Gefällt mir
Reaktionen: CitroenDsVier
aplay -L liefert:
Code:
default
    Default Audio Device
sysdefault
    Default Audio Device
null
    Discard all samples (playback) or generate zero samples (capture)
card0
default:CARD=USB
    Scarlett 2i4 USB, USB Audio
    Default Audio Device
sysdefault:CARD=USB
    Scarlett 2i4 USB, USB Audio
    Default Audio Device
front:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    Front speakers
surround21:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
dmix:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    Direct sample mixing device
dsnoop:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    Direct sample snooping device
hw:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    Direct hardware device without any conversions
plughw:CARD=USB,DEV=0
    Scarlett 2i4 USB, USB Audio
    Hardware device with all software conversions

und dann ungefähr die selbe Liste nochmal für die zweite Soundkarte. Ich möchte jetzt aber erst einmal das "Scarlett 2i4 USB" verwenden.

Mittels einfachem "aplay file.wav" konnte ich auch schon Ton abspielen, das hat problemlos funktioniert. Wenn ich dem Befehl mittels "-D default" das device "default" übergebe, meckert er auch nicht, sondern spielt problemlos auf dem Scarlett ab.
Übergebe ich spotifyd aber im config-file oder als command-line-Parameter das device "default", bekomme ich:
Code:
Using alsa volume controller.
Couldn't read volume from alsa device with name "default".

auch "hw:0,0", "surround21", "front" usw. habe ich schon ausgetestet. Dabei kommt dann zum Teil:
Code:
Using alsa volume controller.
ALSA lib control.c:1379:(snd_ctl_open_noupdate) Invalid CTL front
Couldn't read volume from alsa device with name "front".
Ergänzung ()

UPDATE: Es läuft!!!

Ich habe noch ein wenig mit den spotifyd-Parametern herumgespielt, folgender Befehl läuft für mich:
Code:
./spotifyd --no-daemon --config-path /usr/spotifyd/spotifyd.conf --device default --control default --volume-controller softvol

Vielen Dank für deine Hilfe @snaxilian ! :)
 
  • Gefällt mir
Reaktionen: snaxilian
Zurück
Oben