Ich weiß nicht, ob es meinen Lesern genauso geht wie mir, aber wenn man mehrere USB-Audio-Interfaces und USB-Webcams hat dann kann es sein, dass die Erkennung nicht immer richtig läuft.
Ich verwende ein Focusrite Scarlett 2i2 und eine Scarlett 18i20. Also letzteres bekomme ich nicht so zum Laufen, dass alles gut geht. Besonders die Audio-Ausgabe des Firefox ist blöd und wenn man dann Online-Sessions mit Nextcloud Talk machen möchte und Audio geht nicht, dann ist das eben blöd.
Also arbeite ich im Moment hauptsächlich mit dem 2i2, aber ich möchte gerne auf das 18i20 gehen.
Gut, aber wo war ich… hmmmmmm … ach ja.
Je nach dem ob das 18i20 eingesteckt wird oder nicht, kann es passieren, dass die Erkennung falsch ist und dann das 2i2 nicht mehr der Device /dev/dsp4, sondern /dev/dsp5 ist. Die ersten 4 dsp’s sind von der Grafikkarte (Nvidia Quaddro P2200).
Jetzt hatte ich vor einiger Zeit einen Beitrag im Internet gefunden, der ein ähnliches Problem mit der Erkennung der Webcam und der passenden Reihenfolge hatten und das in der Datei /etc/rc.conf ganz gut gelöst hatte. Der Code in der Datei /etc/rc.conf ist eigentlich nur eine extra Zeile und die Anpassung der Flags
In der Zeile, die mit webcamd_DEV beginnt, wird über mehrere Pipes der USB-Name, den die Webcam hat, gefiltert und dann in den Flags dem Dienst zugewiesen. So kann man die Webcam anschließen, wo man will, diese wird immer zuverlässig gefunden.
Das sollte doch auch bei den USB-Audio-Interfaces gehen, halt nur mir angepassten Befehlen und geschickten Pipes.
Nachdem nun ab FreeBSD 14.2 die USB-Audio Interfaces mit Namen erkannt werden, geht das mit folgender Konfiguration in der /etc/rc.conf-Datei für jackd ganz gut. Voraussetzung ist, dass der jackd nicht über den DBUS, sondern als eigener Dienst in der rc.conf eingerichtet und gestartet wird. Wer mehr darüber erfahren möchte, der sollte ich diesen Beitrag ansehen. Der ist super, nur bekomme ich damit die Konfiguration mit Firefox und allen Programmen und das Umschalten, im Moment noch nicht hin.
Aber nun zurück zu der dynamischen Zuweisung des dsp-Devices zu jackd.
Es geht hier um die vorletzte Zeile. Wichtig ist, dass man den passenden Namen weiß. Dann kann man mit den ersten beiden Befehle schon einmal den pcm-Device finden, mit dem die Karte im System erkannt und eingerichtet ist.
# cat /dev/sndstat | grep "Scarlett 2i2"
pcm4: <Focusrite Scarlett 2i2 USB> on uaudio0 (1p:3v/1r:2v) default
Nun kann man den String mit über awk trennen. Das Trennungszeichen ist der Doppelpunkt und wir holen das letzte Zeichen als substring raus.
Das Endergebnis ist, wenn man den kompletten Befehlssatz ausführt:
# cat /dev/sndstat | grep "Scarlett 2i2" | awk -F ":" '{print substr($1,4,1) }'
4
Nun ja, das ist echt nicht spannend, oder? Aber wenn wird nun die letzte Zeile in der /etc/rc.conf ansehen, dann können wir dort die Nummer des dsp-Devices mit diesem Platzhalter ersetzen und beim nächsten Aufruf wird hier die richtige Nummer eingesetzt.
Also in meinen ersten Tests hat die ganz gut funktioniert und kann bei dem Einen oder Anderen auch so klappen.
Nachtrag:
Wie ich gerade durch meinen eigene Blog gegangen bin, habe ich diesen Beitrag von mir selbst gefunden: USB-Audio-Interface & Headset
Tja, da muss ich noch einmal ansehen und ausprobieren. 😉 😀