# Alsa: Hotplug USB-Soundkarten

## DarkSpir

Hi alle zusammen,

kennt sich jemand mit den Möglichkeiten von asound.conf von Alsa aus? Ich habe in meinem Laptop mehrere Soundkarten: Onboard-Soundkarte, Webcam (nur Mikro), Logitech USB-Boxen (nur Wiedergabe), Plantronics USB-Headset (Mikro und Wiedergabe, dafür nur 16kHz und 16 Bit). Naja, okay, das Mikro der Webcam benutze ich nicht, insofern können wir das ignorieren.

Was ich gemacht habe: Ich habe drei asound.conf-Dateien erstellt, in einer ist die Intel-Onboard die Default-Karte, in einer ist der Logitech-Kram Default-Karte und in der Dritten das Plantronics-Headset. Mein /etc/asound.conf ist ein Symlink, dass generell erst mal auf die Intel-Datei zeigt.

Ich habe Udev-Regeln gemacht, die beim Einstecken eines der USB-Geräte den Symlink auf die passende asound.conf umbiegt. Beim Abziehen wird der Symlink wieder auf die Intel-Datei gesetzt. Das funktioniert ansich ganz gut (bei Interesse poste ich auch gerne die Konfig dazu), hat aber einen entscheidenden Nachteil: Wann immer ich was hotplugge, muss ich die betroffenen Programme neu starten. Wenn xine einen Film abspielt und ich der Meinung bin, auf den Logitechboxen klingt der besser als auf den Laptoplautsprechern, muss ich die Logitechboxen anstecken und dann xine neu starten, damit dieses mitbekommt, dass in /etc/asound.conf ein anderes default-Device konfiguriert ist.

Und jetzt kommen wir zur eigentlichen Frage: Kann ich in meiner asound.conf Geräte ansprechen, die (noch) nicht existieren? In der Modulkonfiguration von snd_usb_audio habe ich per vid/pid/index-Parameter dafür gesorgt, dass jede Karte immer dasselbe device bekommt. Wenn ich also pcm.logitech { type hw; card 3; } benutze, IST das auch immer das device von den USB-Boxen.

Mein Lösungsansatz war also: Ich mache ein pcm-Alias für alle Soundkarten. Jede Soundkarte bekommt ein softvol "MasterSwitch" mit der resolution 2. Dann mach ich ein pcm.!default, dass auf ein Plugin zeigt (müsst ich jetzt googeln, aber da gibts eins!), dass die Ausgabe auf alle vier "MasterSwitch"-Softvols kopiert, von dort aus geht es dann an die eigentliche Karte weiter. Sprich: Alle Soundkarten spielen gleichzeitig den Sound ab, der von den Programmen generiert wird. Nur: Alle Soundkarten sind mit dem jeweilgen MasterSwitch gemutet, bis auf die Intel. Wenn ich jetzt die Logitech-Boxen einstöpsel, startet Udev ein Script, dass die Intel mutet und die Logitech unmutet. Ohne ein Neustart der Applikation kommt dann also der Ton aus den USB-Boxen. Und so weiter.

Die Frage: Würde das funktionieren? Oder wenn ihr das anders macht: Was ist eure Lösung?

Ich muss nämlich ehrlich sagen, dass ich die Alsa-Doku ziemlich unverständlich finde und vieles nur durch Ausprobieren herausgefunden habe. Und das pure Rumprobieren bin ich grad ziemlich leid...

----------

## nightmarez

Hi,

ich habe am Desktop-PC eine interne Soundkarte und dazu noch ein USB-Headset, welches ja eine eigene Soundkarte darstellt. Bei mir läuft das ganze ohne Probleme mit Pulseaudio. Mit dem Programm pavucontrol kann ich bequem auswählen auf welchem Gerät der Sound ausgegeben werden soll, auch ohne Neustart der Applikation. Die Sache mit dem automatischen Mute ist dadurch allerdings nicht automatisch gelöst, aber da gibt es meines Wissens nach auch eine Alsa-Funktion für. An meinem Netbook musste ich das Model der Soundkarte in die asound.conf eintragen, danach hat er automatisch den internen Sound auf Stumm geschaltet, sobald ich einen Kopfhörer angeschlossen habe. Allgemein würde ich eher versuchen das ganze mit Pulseaudio zum laufen zu bekommen, als über udev-Regeln, aber da lass ich mich gerne belehren.

----------

## DarkSpir

Dass ein Klinken-Headset die Boxen interne Soundkarte auf stumm stellt, wenn ich das Headset in den Kopfhöreranschluss packe, funktioniert bei mir auch. Allerdings vermute ich, dass das vom Treibermodul selbst gemacht wird und nicht über Alsa, denn das ging bei mir dann erst als ich das Modul mit dem richtigen Chipsatz-Parameter geladen habe (snd_hda_intel).

Pulseaudio... hmm, damit hatte ich die Tage mal ein bisschen rumgefummelt, fand es jetzt aber nicht so berauschend, zumal mein selbst angelesenes Wissen über ALSA bei ich sag mal 0.4 liegt und das über Pulseaudio bei 0.0  :Smile: 

Wenn ich das Soundrouting mitten in der Wiedergabe umschalten kann (und Alsa das nicht beherrscht), wird der allerdings schon wieder interessanter. Was ist denn mit Sachen wie Jack? (Also ne Alsa-Only-Lösung ist mir natürlich am Liebsten, wer sich damit auskennt: Immer her mit Wissen!  :Smile: ).

----------

## disi

 *nightmarez wrote:*   

> Hi,
> 
> ich habe am Desktop-PC eine interne Soundkarte und dazu noch ein USB-Headset, welches ja eine eigene Soundkarte darstellt. Bei mir läuft das ganze ohne Probleme mit Pulseaudio. Mit dem Programm pavucontrol kann ich bequem auswählen auf welchem Gerät der Sound ausgegeben werden soll, auch ohne Neustart der Applikation. Die Sache mit dem automatischen Mute ist dadurch allerdings nicht automatisch gelöst, aber da gibt es meines Wissens nach auch eine Alsa-Funktion für. An meinem Netbook musste ich das Model der Soundkarte in die asound.conf eintragen, danach hat er automatisch den internen Sound auf Stumm geschaltet, sobald ich einen Kopfhörer angeschlossen habe. Allgemein würde ich eher versuchen das ganze mit Pulseaudio zum laufen zu bekommen, als über udev-Regeln, aber da lass ich mich gerne belehren.

 

Boa danke  :Smile: 

Ich habe seit ca. einem halben Jahr Logitech USB-Lautsprecher und mit pavucontrol funktionieren die auf Anhieb   :Shocked: 

----------

