Dźwięk nie działa, gdy zarówno karta dźwiękowa, jak i HDMI korzystają ze sterownika Intel HDA. Jak wymienić kolejność ładowania urządzeń?

10

Mam netbooka Acer Aspire One 522 z kartą dźwiękową Intel HDA opartą na chipsecie Conexant CX20584. Chociaż KDE generuje dźwięk podczas uruchamiania, flash i prawdopodobnie wiele innych aplikacji, które szukają /dev/dspurządzenia, po prostu nie mogą odtwarzać dźwięku przez to, co czyni całkiem bezużyteczne wrażenia multimedialne.

Kiedy sprawdziłem moje urządzenia odtwarzające ALSA za pomocą aplay -l, mogłem zobaczyć, że główne urządzenie audio zostało rozpoznane jako karta 1 zamiast 0, która zamiast tego była podłączana do HDMI:

**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

W ten sposób otrzymuję /dev/dsp1, ale wydaje się, że większość aplikacji jest po prostu zakodowana w użyciu /dev/dsp, więc szukałem sposobu wymiany indeksów kart. Po kilku badaniach dokumentacji ALSA, próbowałem przypisać indeksy do modułów sterowników używanych przez HDMI i Intel HDA za pomocą tego /etc/modprobe.d/asound.confpliku:

options snd cards_limit=2
options snd-hda-codec-conexant index=0
options snd-hda-codec-hdmi index=1
options snd slots=snd-hda-codec-conexant,snd-hda-codec-hdmi

To jednak nie zadziałało, a na podstawie jakiegoś zapomnianego linku w mojej niekończącej się próbie odpowiedzi wydaje się, że te indexdyrektywy mają koordynować ładowanie modułów, ale zarówno te kodeki Conexant, jak i HDMI używają tego samego Intel HDA moduł sterownika, więc wydaje się, że nie ma zastosowania w tym przypadku.

To powiedziawszy, czy jest jakiś sposób na zdefiniowanie poprawnych indeksów kart, gdy urządzenia używają tego samego modułu sterownika ALSA (w tym przypadku Intel HDA)?

Claudio
źródło

Odpowiedzi:

10

W końcu znalazłem odpowiedź na ten problem na podstawie tego postu z innego forum (patrz „Próba 1b” w celach informacyjnych). Zgodnie z nim można określić identyfikator modułu, nawet jeśli używany sterownik jest taki sam:

alias char-major-116 snd
alias snd-card-0 snd-hda-intel
alias snd-card-1 snd-hda-intel

options snd cards_limit=2

options snd-hda-intel id=SB index=0
options snd-hda-intel id=HDMI index=1

w ten sposób zestawiasz prawidłowe karty i porządkujesz dźwięk zgodnie z oczekiwaniami:

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: SB [HDA ATI SB], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Aby zastosować w innych podobnych przypadkach, możesz sprawdzić, /proc/asoundczy dowiązania symboliczne do twoich kart będą identyfikatorami modułów:

$ ls -l /proc/asound/
total 0
lrwxrwxrwx 1 root root 5 Jan 26 19:19 HDMI -> card1
lrwxrwxrwx 1 root root 5 Jan 26 19:19 SB -> card0
dr-xr-xr-x 4 root root 0 Jan 26 19:19 card0
dr-xr-xr-x 3 root root 0 Jan 26 19:19 card1
-r--r--r-- 1 root root 0 Jan 26 19:19 cards
-r--r--r-- 1 root root 0 Jan 26 19:19 devices
-r--r--r-- 1 root root 0 Jan 26 19:19 hwdep
-r--r--r-- 1 root root 0 Jan 26 19:19 modules
dr-xr-xr-x 2 root root 0 Jan 26 19:19 oss
-r--r--r-- 1 root root 0 Jan 26 19:19 pcm
dr-xr-xr-x 2 root root 0 Jan 26 19:19 seq
-r--r--r-- 1 root root 0 Jan 26 19:19 timers
-r--r--r-- 1 root root 0 Jan 26 19:19 version
Claudio
źródło