Mehrere Soundkarten verwalten

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche


Einführung

alsaconf ist seit alsa-utils 1.0.19 nicht mehr vorhanden. udev übernimmt die Initiierung beim Booten, aber die Reihenfolge des Aufrufs scheint zufällig zu erfolgen.

So kann es sein, dass die Webcam vor der internen Soundkarte aufgerufen wird, und man hört keinen Ton. Oder man möchte einer externen USB-Soundkarte Priorität geben.

Der Schlüssel ist eine angepasste Datei /etc/modprobe.d/sound.conf.
Dafür im Weiteren drei Beispiele:


1. Die externe Soundkarte als primäre

Eine externe USB-Soundkarte soll als erste aufgerufen werden, die interne Soundkarte ist eine hda-intel. Der Inhalt von /etc/modprobe.d/sound.conf sieht dann so aus:

alias sound-card0 snd-usb-audio
options snd-usb-audio index=0

alias sound-card1 snd-hda-intel
options snd-hda-intel index=1

index=0 bedeutet: das ist die erste Soundkarte ("default")

2. Die interne Soundkarte als primäre

Wenn man sicher gehen möchte, dass die interne Soundkarte (hier wieder hda-intel) als primäre aufgerufen wird und nicht eine USB-Soundkarte (z.B. von einer Webcam), dann schaut die Stanza in /etc/modprobe.d/sound.conf so aus:

alias sound-card0 snd-hda-intel
options snd-hda-intel index=0

alias sound-card1 snd-usb-audio
options snd-usb-audio index=1

3. Die interne Soundkarte als primäre und 2 USB-Soundkarten

Man hat eine interne Soundkarte (hda-intel) und zwei USB-Soundkarten. Man möchte die interne Soundkarte als erste aufgerufen haben, dann sieht /etc/modprobe.d/sound.conf so aus:

alias sound-card0 snd-hda-intel
options snd-hda-intel index=0

alias sound-card1 snd-usb-audio
options snd-usb-audio index=1,2


4. Zwei interne Chips verwenden den gleichen Treiber

Man hat das Problem das man den Sound über den optischen Ausgang oder die Klinkenausgänge haben möchte, aber der HDMI Ausgang als card0 und somit default gesetzt wird.

Zum Beispiel:

cat /proc/asound/cards
0 [Generic        ]: HDA-Intel - HD-Audio Generic
                     HD-Audio Generic at 0xfeb44000 irq 41
1 [SB             ]: HDA-Intel - HDA ATI SB
                     HDA ATI SB at 0xfeb40000 irq 16
cat /proc/asound/modules
 0 snd_hda_intel
 1 snd_hda_intel 

Hier ist die o.g. Methode der Änderung des Index natürlich zwecklos. Dafür bietet das Erstellen einer .asoundrc im Verzeichnis des Benutzers die Möglichkeit hier auch für und von jedem einzelnen Benutzer separat das bevorzugte Device einzustellen. Selbstverständlich kann dies auch systemweit über die in den obigen Abschnitten genannte Konfigurationsdatei geschehen. Dieses Script, minimalst abgeändert aus dieser Seite entnommen, kopieren wir in eine leere Textdatei im Verzeichnis /home/$USER, nennen diese "script" und machen sie anschließend ausführbar.

#!/bin/bash
# asoundrc v0.1.0 20090101 markc@renta.net GPLv3
# asoundrc v0.2.0 20090320 quatro_por_quatro@yahoo.es GPLv3
#
# A simple script to create a particular default audio device regardless
# of what cards are loaded or in what order. 
#
 if default_card="${1:-$(cat "$(for f in $(ls -1 /proc/asound/card[0-9]*/{midi,codec}* 2>/dev/null); do echo "${f%/*}"; done \
| sed -e '\|^[\[:blank:]\]$|d' -e 'q')/id" 2>/dev/null)}"; then
  echo "Using sound card: ${default_card}" >&2 
  cat /proc/asound/card[0-9]*/id | \
  gawk --assign default_card="${default_card}" \
'{print "pcm."$1" { type hw; card "$1"; }\nctl."$1" { type hw; card "$1"; }" }
END {print "pcm.!default pcm."default_card"\nctl.!default ctl."default_card}'
else
  echo "Warning: No sound cards found." >&2
fi

Jetzt geben wir in einer Konsole

./script

ein und erhalten, -bei o.g. Beispiel- folgende Ausgabe:

pcm.Generic { type hw; card Generic; }
ctl.Generic { type hw; card Generic; }
pcm.SB { type hw; card SB; }
ctl.SB { type hw; card SB; }
pcm.!default pcm.Generic
ctl.!default ctl.Generic

Wir kopieren diese Ausgabe in eine, von uns wieder mit einem Texteditor im /home/$USER erstellte, Datei ".asoundrc" und ändern das "Generic" in den letzten beiden Zeilen in die von uns gewünschte Karte, in diesem Fall "SB" um, so daß die beiden Zeilen dann so aussehen:

 pcm.!default pcm.SB
 ctl.!default ctl.SB

Ausloggen, wieder einloggen und der Sound sollte jetzt über die gewünschte Leitung zu haben sein.


Mehr Infos in /usr/share/doc/alsa-base/README.Debian.gz