ALSA: Soundkarte default-Slot zuweisen

DeusoftheWired

Fleet Admiral
Registriert
Juni 2009
Beiträge
13.793
Hallihallo,

seit ein paar Tagen probiere ich mich daran, mir meinen Lunix-Arbeitsplatz (Kubuntu 12.04 x64) etwas komfortabler einzurichten. Dazu gehört, den Wechsel der Ausgabe der Soundkarte (Xonar DX) von hinten Line-Out (Stereoanlage) auf Frontpanel Line-Out (Kopfhörer) ohne den Umweg alsamixer und manuelles Unmuten/Muten des Frontpanels zu bewerkstelligen. Nach dem Entdecken von amixer und Lesen der Manpage habe ich ein minimales Skript zurechtgebastelt, das das ganze auch wunderschön erledigt:

Code:
#!/bin/bash
amixer -c 0 set 'Front Panel' toggle

Ein Klick auf die Skript-Verknüpfung auf dem Desktop wechselt problemlos zwischen Kopfhörern und Anlage. Doof ist nur, daß Phonos oder etwas anderes die Reihenfolge und damit Numerierung der Soundgeräte bei jedem Booten neu auswürfelt. Da ich im Skript aber mit -c 0 das Soundgerät Null auswähle, schlägt es natürlich fehl, wenn der Xonar beim Booten nicht die Nummer Null zugewiesen wurde. Auf die Idee, einfach einen Dreizeiler draus zu machen und alle Nummern durchzuprobieren, bin ich auch schon gekommen.

Code:
#!/bin/bash
amixer -c 0 set 'Front Panel' toggle
amixer -c 1 set 'Front Panel' toggle
amixer -c 2 set 'Front Panel' toggle

Das funktioniert, ist aber unsauber. Deshalb möchte ich der Xonar gern eine fixe Nummer zuweisen und sie zum Default-Gerät machen. Wie das funktioniert, ist prinzipiell hier beschrieben, nur komme ich damit nicht zurecht. :/

Hier mal die Ausgabe von cat /proc/asound/cards

Code:
 0 [DX             ]: AV200 - Xonar DX
                      Asus Virtuoso 100 at 0xd000, irq 16
 1 [Generic        ]: HDA-Intel - HD-Audio Generic
                      HD-Audio Generic at 0xf7e40000 irq 60
 2 [U0x46d0x821    ]: USB-Audio - USB Device 0x46d:0x821
                      USB Device 0x46d:0x821 at usb-0000:00:1d.0-1.1, high speed

und von lsmod | grep snd:

Code:
snd_hda_codec_hdmi     32474  1 
snd_hda_intel          33719  2 
snd_hda_codec         127706  2 snd_hda_codec_hdmi,snd_hda_intel
snd_usb_audio         122982  1 
snd_virtuoso           41045  1 
snd_oxygen_lib         41445  1 snd_virtuoso
snd_pcm                97275  5 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_usb_audio,snd_oxygen_lib
snd_hwdep              17764  2 snd_hda_codec,snd_usb_audio
snd_usbmidi_lib        29476  1 snd_usb_audio
snd_mpu401_uart        14169  1 snd_oxygen_lib
snd_seq_midi           13324  0 
snd_seq_midi_event     14899  1 snd_seq_midi
snd_seq                61929  2 snd_seq_midi,snd_seq_midi_event
snd_timer              29990  2 snd_pcm,snd_seq
snd_rawmidi            30748  3 snd_usbmidi_lib,snd_mpu401_uart,snd_seq_midi
snd_seq_device         14540  3 snd_seq_midi,snd_seq,snd_rawmidi
snd                    79041  22 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_usb_audio,snd_virtuoso,snd_oxygen_lib,snd_pcm,snd_hwdep,snd_usbmidi_lib,snd_mpu401_uart,snd_seq,snd_timer,snd_rawmidi,snd_seq_device
soundcore              15091  1 snd
snd_page_alloc         18529  2 snd_hda_intel,snd_pcm

Zur Erklärung: Im Rechner steckt auch eine HD6870 (daher das HDMI-Tongeraffel, nutze ich im Moment aber nicht) und per USB eine Logitech C910 Webcam, deren Mikro bestens seinen Dienst verrichtet.

Da die Xonar etwas mit dem Virtuoso zu tun hat, denke ich, daß ich snd_virtuoso in der /etc/modprobe.d/alsa-base.conf den Index 0 zuweisen muß. Was dort aber noch alles dazugehört, weiß ich leider nicht. Was genau muß ich nun in der .conf hinzufügen, um die Xonar zum default-Gerät zu machen?

Hier der Vollständigkeit halber noch der Inhalt der alsa-base.conf:

Code:
# autoloader aliases
install sound-slot-0 /sbin/modprobe snd-card-0
install sound-slot-1 /sbin/modprobe snd-card-1
install sound-slot-2 /sbin/modprobe snd-card-2
install sound-slot-3 /sbin/modprobe snd-card-3
install sound-slot-4 /sbin/modprobe snd-card-4
install sound-slot-5 /sbin/modprobe snd-card-5
install sound-slot-6 /sbin/modprobe snd-card-6
install sound-slot-7 /sbin/modprobe snd-card-7

# Cause optional modules to be loaded above generic modules
install snd /sbin/modprobe --ignore-install snd $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-ioctl32 ; /sbin/modprobe --quiet --use-blacklist snd-seq ; }
#
# Workaround at bug #499695 (reverted in Ubuntu see LP #319505)
install snd-pcm /sbin/modprobe --ignore-install snd-pcm $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-pcm-oss ; : ; }
install snd-mixer /sbin/modprobe --ignore-install snd-mixer $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-mixer-oss ; : ; }
install snd-seq /sbin/modprobe --ignore-install snd-seq $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; /sbin/modprobe --quiet --use-blacklist snd-seq-oss ; : ; }
#
install snd-rawmidi /sbin/modprobe --ignore-install snd-rawmidi $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; : ; }
# Cause optional modules to be loaded above sound card driver modules
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-emu10k1-synth ; }
install snd-via82xx /sbin/modprobe --ignore-install snd-via82xx $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq ; }

# Load saa7134-alsa instead of saa7134 (which gets dragged in by it anyway)
install saa7134 /sbin/modprobe --ignore-install saa7134 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist saa7134-alsa ; : ; }
# Prevent abnormal drivers from grabbing index 0
options bt87x index=-2
options cx88_alsa index=-2
options saa7134-alsa index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2
options snd-usb-audio index=-2
options snd-usb-caiaq index=-2
options snd-usb-ua101 index=-2
options snd-usb-us122l index=-2
options snd-usb-usx2y index=-2
# Ubuntu #62691, enable MPU for snd-cmipci
options snd-cmipci mpu_port=0x330 fm_port=0x388
# Keep snd-pcsp from being loaded as first soundcard
options snd-pcsp index=-2
# Keep snd-usb-audio from beeing loaded as first soundcard
options snd-usb-audio index=-2
 
Prinzipiell solltest du in der alsa-base.conf nur den Treiber (für die Xonar: virtuoso) auf index=0 setzen, damit sie primär ist. Alle Treiber, die du deaktivieren möchtest, setzt du auf index=-2, ansonsten nummerierst du die einfach regulär weiter hoch. Es ist außerdem noch eine Frage, was in der /etc/asound.conf für eine Soundkonfiguration (Ausgabegeräte und deren Konfiguration, Default Ausgabegerät) existiert.

Es gibt außerdem "Probleme", wenn mehr als ein Audiotreiber also z.B. Alsa und PulseAudio installiert ist, leider installiert sich PulseAudio häufig von "selbst".

Meine /etc/modprobe/alsa-base.conf sieht folgendermaßen aus:
Code:
options snd slots=snd_virtuoso
options snd_virtuoso index=0
options snd_hda_cdec_hdmi index=-2
options snd_hda_intel index=-2

Meine detaillierte /etc/asound.conf welche man auch einfacher definieren könnte:
Code:
pcm.dmixed {
	type asym
	playback.pcm {
		# See plugin:dmix at http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
		type dmix

		# Don't block other users
		# http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
		ipc_key_add_uid true

		ipc_key 5678293
		ipc_perm 0660
		ipc_gid audio

		slave {
			# 2 for stereo, 6 for surround51
			channels 2
			pcm {
				# mplayer chooses S32_LE, but others usually S16_LE
				format S32_LE

				# 44100 or 48000
				# 44100 for music, 48000 is compatible with most h/w
				#rate 44100
				rate 48000

				# http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
				# Maybe helps
				nonblock true

				type hw
				card D2X
				device 0
				subdevice 0
			}

			# mplayer2 chooses 1024
			# period_size 512 with buffer_size 16384 stops crackling in xmame
			# 320 breaks flash - https://bbs.archlinux.org/viewtopic.php?id=129458
			#period_size 512
			period_size 1024
			# 2730 is chosen by "speaker-test"
			#period_size 512
			#period_time 20000
			#periods 8

			# mplayer2 chooses 8192
			# 5460 (2730*2) is too small for mplayer2
			# If too large, use CONFIG_SND_HDA_PREALLOC_SIZE=2048
			buffer_size 8192
			#buffer_size 4096
			#buffer_time 682667  # 32768 samples at 48 kHz, in µs
		}

		bindings {
			0 0
			1 1
			2 2
			3 3
			4 4
			5 5
		}

        }

	capture.pcm "hw:D2X"
}
 
Dann ist’s ja doch gar nicht so viel wie ich befürchtet habe. Den snd_hda_intel kann ich eigentlich auch deaktivieren, da hast du recht.

Besten Dank erst mal für den Tip! Wird nach Feierabend zu Hause sofort probiert; Ergebnis kommt dann per edit. :)

€dit: Sou, hier das Resultat. Funktioniert 1A! :D Die DX ist jetzt das default-Gerät, das Skript läuft. Habe in der /etc/modprobe.d/alsa-base.conf einfach nur dein vorgeschlagenes

Code:
options snd slots=snd_virtuoso
options snd_virtuoso index=0

ab Zeile 27 eingefügt. Den Rest habe ich erst mal in Ruhe gelassen … bin froh, daß die Aus- und Eingabe jetzt erst mal so funktioniert, wie sie es tun soll.

pulseaudio 1.1 ist (leider?) installiert. Möglich, daß es als Abhängigkeit kam, per Hand hab ich’s jedenfalls nicht hinzugefügt.
In /etc gibt es bei mir keine asound.conf :I Das ubuntuusers-Wiki meint, man bräuchte die nur, wenn etwas mit der Ein/Ausgabe nicht stimmt. Bin soweit erst mal zufrieden.

Das einzige, was mich noch stört, ist, daß die Lautstärkeregelung über das Symbol von Kmix in der Taskleiste auf 100 % steht, ich darüber aber die Lautstärke nicht über ein bestimmtes Niveau erhöhen kann. Dafür muß dann immer alsamixer herhalten, wo ich die Lautstärke von Master Vorne mit w erhöhe.

bildschirmfoto4kmluq.png


Sollte ich dort die Lautstärke auf dem Maximum lassen und zwischendurch Kmix benutzen?
 
Zuletzt bearbeitet:
Dein Lautstärkeproblem hat vermutlich zwei Gründe:
1. Du hast PulseAudio mit installiert, welcher eigene Lautstärkeregler hat
2. KMix regelt evtl. nur den PulseAudio Mixer

Ich verwende XFCE, bei dem Lautstärkeregler kann ich das Gerät definieren, welches geregelt werden soll. Es gibt aber ein Problem. Ich MUSS den PulseAudio Regler auf 50% setzen, da der Klang sonst stark übersteuert, mit dem Primärregler von Alsa kann ich regulär regeln. Ich würde also mal testen, wie es überhaupt noch gut klingt und dann entscheiden wie du das ganze regeln willst.

Hintergrund ist die gegenseitige Abhängigkeit der Regler, da beide den Klang erhöhen (d.h. Ursprungston vom Player -> PulseAudio -> Alsa). Für diesen Wirrwarr der Abhängigkeiten gibt es ein Schaubild (http://yokozar.org/blog/content/linuxaudio.png). PulseAudio wird leider von einigen Komponenten wie z.B. Gnome3 vorausgesetzt. Man kann damit leben, auch da man einiges konfigurieren kann, aber mehr als ein Soundtreiber führt unter Linux eben zu höheren Konfigurationsaufwand.

Die /etc/asound.conf musst du anlegen, wenn du sie benötigst. Sie gilt, glaube ich, nur für Alsa. Man kann für jeden Nutzer eine Datei im Homeverzeichnis anlegen, ich glaube das heißt dann irgendie .asoundrc oder so.
 
Hübsche Veranschaulichung mit dem Schema. :> So hab ich das auch immer empfunden. Und dabei ist die Graphik sogar schon 5 Jahre alt. Sound ist unter Lunix echt immer noch ein Abenteuer,
Damit ich von diesem Zeug erst mal verschont bleibe, lasse ich alles so, wie es jetzt ist, und hoffe, daß nichts kaputtgeht. :D Master Vorne bleibt auf 100 %, den Rest machen KMix und das Taskleistensymbol.

Besten Dank noch mal für deine Hilfe!
 
Zurück
Oben