Jak zmusić Alsa do automatycznego wybierania preferowanego urządzenia dźwiękowego?

36

Kupiłem kartę dźwiękową USB. Chciałbym skonfigurować mój pulpit z Linuksem, aby preferował urządzenie USB, jeśli jest podłączony i automatycznie przełącza się, gdy urządzenie jest (nie) podłączone. Czy to możliwe i jak?

Petr Pudlák
źródło
Debian zamiast tego używa pulseaudio.
Braiam

Odpowiedzi:

33

Znajdź swoją kartę za pomocą

$ cat /proc/asound/cards

Aby uzyskać prawidłowe nazwy kart ALSA, użyj aplay:

$ aplay -l

a następnie utwórz za /etc/asound.confpomocą:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

Zamień „kartę 1” na numer lub nazwę karty określoną powyżej.

Alternatywnie możesz zmienić kolejność kart, aby karta USB była kartą 0 i działała bez edycji asound.conf.

Matija Nalis
źródło
2
Wypróbowałem twoją sugestię, ale kiedy karta USB jest odłączona, dźwięk przestaje działać całkowicie, zamiast przełączania na kartę wbudowaną.
Petr Pudlák,
2
Korzystając z RPI2, to rozwiązanie działało dla mnie. Próbowałem całej reszty, ale nic nie działało, dopóki nie zrobiłem tego. (Musiałem użyć „karty 0” na mojej).
Rob Gibbons,
1
Używając powyższej konfiguracji, dźwięk w youtube na palemoon nie działał dla mnie, ta konfiguracja działała: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234
utknąłem na jeden dzień! i właśnie uratowałeś mi tyłek!
Alamin
2
NIE używaj ezoterycznych hackerów przetwarzania wsadowego w odpowiedziach na normalne osoby. Zamiast pisać linijkę, która wyodrębnia kolumny z danych wyjściowych, opisz słowami, jak znaleźć żądaną informację w pełnej treści.
Szczepan Hołyszewski
15

jest to metoda wyboru domyślnej karty dźwiękowej w Alsa. Jeśli chcesz korzystać z Pulse Audio, możesz zainstalować Alsa.

cat / proc / asound / modules

wyświetli listę modułów dźwiękowych. Wyjście polecenia będzie takie (np.):

0 snd_hda_intel

1 snd_usb_intel

możesz z łatwością zrozumieć, która karta dźwiękowa USB jest z góry.

nano /etc/modprobe.d/alsa-base.conf

edytuj ten plik alsa-base.conf w taki sposób, aby twoja preferowana karta miała indeks = -2 / 0, a druga karta miała indeks = -1/1 (trzymaj się -2 i -1)

opcje snd_hda_intel index = -1

opcje snd_usb_intel index = -2

w tym przypadku urządzenie USB jest preferowanym urządzeniem.

jeśli masz dwie różne karty o tej samej nazwie na wyjściu, to tak:

opcje snd_hda_intel

opcje snd_hda_intel

wydaj to polecenie, aby dowiedzieć się, które:

cat / proc / asound / cards

następnie edytuj moduły w ten sposób:

opcje snd_hda_intel enable = 1 indeks = 0

opcje snd_hda_intel enable = 0 indeks = 1

konieczne może być ponowne uruchomienie komputera. więc może być konieczne ręczne przełączenie kart dźwiękowych.

Ashildr
źródło
Co rozumiesz przez „modyfikowanie wyjścia”? Jak mogę zmodyfikować wyjście?
Petr Pudlák,
dokonałem niezbędnych zmian w odpowiedzi. wypróbuj tę wersję. mam nadzieję, że to pomoże. metody mogą się różnić w zależności od smaku używanego linuksa.
Ashildr,
Dziękuję Ci. Jak mogę zweryfikować konfigurację? Zidentyfikowałem karty, dodałem odpowiednie opcje, uruchomiłem ponownie, ale nie widzę żadnych zmian - nadal karta wewnętrzna (Intel) jest preferowana.
Petr Pudlák,
spróbuj> opcje snd-usb-intel enable = 1 indeks = 0 (aby włączyć)> opcje snd-hda-intel enable = 0 indeks = 1 (aby wyłączyć) lub> opcje snd-hda-intel enable = 0 indeks = 0> opcje snd-usb-intel enable = 1 indeks = 1 i uruchom ponownie
Ashildr
tj. włącz usb wyłącz drugi przy użyciu enable = 0 lub 1, zrób to też na odwrót. nie jestem pewien, który będzie dla ciebie działał. konieczne jest ponowne uruchomienie. chcę rozwiązać
twój
4

Nie mogłem również uzyskać danych wyjściowych z mojego urządzenia USB. Moje cat /proc/asound/moduleswyniki to:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

Próbowałem obu opisanych tutaj odpowiedzi, które nie pomogły (wiele kombinacji indeksu i wiele restartów). Myślę, że problemem było zainicjowanie urządzenia USB po uruchomieniu. Cokolwiek, więc moje działające rozwiązanie umieszcza na czarnej liście inne urządzenie dźwiękowe, aktualizując /etc/modprobe.d/blacklist.confjako:

blacklist snd_hda_intel
użytkownik533723
źródło
2

Odpowiedź Matija Nalis tylko dla mnie zadziałała (alsamixer zmienił domyślnie, ale inne rzeczy, takie jak aplay i firefox, uparcie utknęły w niewłaściwym domyślnym ustawieniu). Ten przykład z wiki debian działał dla mnie (na laptopie CentOS-6):

defaults.pcm.!card Generic_1
defaults.ctl.!card Generic_1
defaults.pcm.!device 0
defaults.ctl.!device 0

Dla przypomnienia: ALSA jest słabo udokumentowane, a szczególnie to bardzo proste rzeczy, takie jak wybór karty, która jest zbyt trudna. Co gorsza, wydaje się zmieniać między systemami. Ponadto dostałem ten tag „Generic_1” z aplay -l, gdzie pojawia się jako „karta 1” na liście. Wydawało się, że inni go używają, więc zrobiłem to samo ... co to znaczy, że nie mogę powiedzieć.

Tel
źródło
1

Chociaż możesz zmienić domyślną kartę alsa, edytując .asoundrc lub system asound.conf, istnieje kilka istotnych problemów z tym podejściem.

Jest delikatny i wymaga uznania aplikacji ponownie.

Jeśli chcesz przełączać karty w locie, naprawdę musisz użyć serwera dźwięku, który poprawnie oddziela aplikacje od karty dźwiękowej, takie jak pulseaudio.

Grant Diffey
źródło
Niektóre aplikacje, takie jak Skype beta, ignorują to i łączą się z domyślną kartą ALSA. To powoduje brak dźwięku dla Skype'a, gdy HDMI jest pierwszym urządzeniem zamiast HDA.
Max N
-1

Oto wariant odpowiedzi Matija Nalis i Tel. Oto, co zadziałało dla mnie:

~ / .asoundrc

defaults.pcm.!card 1
defaults.ctl.!card 1

(Odroid C0, Debian Jessie, HDMI audio jako karta 0 i USB Sound Card jako karta 1 zgodnie z aplay -l)

Uwaga: inne metody nie działały dla mnie, ponieważ / proc / asound / modules nie istnieje i nie ma modułu audio HDMI do czarnej listy lub o niskim priorytecie, jest on osadzony w jądrze. Wygląda na to, że musiałbym ponownie skompilować jądro bez obsługi audio HDMI, aby całkowicie je wyłączyć.

astooooooo
źródło
sudo modprobe $ soundcard_driver zrobiłby to, czego chcesz / proc / asound / modules
linuxdev2013
@ linuxdev2013 jak możesz zmodyfikować sterownik, który nie jest w stanie zmodyfikować? Jak wyjaśniono powyżej, nie jest to moduł, jest osadzony w jądrze.
astooooooo