Come fare in modo che Alsa scelga automaticamente un dispositivo audio preferito?


36

Ho comprato una scheda audio USB. Vorrei configurare il mio desktop Linux in modo che preferisca il dispositivo USB, se è collegato e cambia automaticamente quando il dispositivo è (scollegato). È possibile e come?


Debian usa invece pulseaudio.
Braiam,

Risposte:


36

Trova la tua carta con

$ cat /proc/asound/cards

Per ottenere nomi di carte ALSA validi, utilizzare aplay:

$ aplay -l

e quindi creare /etc/asound.confcon il seguente:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

Sostituisci "carta 1" con il numero o il nome della tua carta determinato sopra.

In alternativa, puoi cambiare l'ordine delle tue carte in modo che la tua carta USB sia la carta 0 e funzionerà senza modifiche asound.conf.


2
Ho provato il tuo suggerimento, ma quando la scheda USB è scollegata, l'audio smette di funzionare completamente, invece di passare alla scheda integrata.
Petr Pudlák,

2
Usando un RPI2, questa soluzione ha funzionato per me. Ho provato tutto il resto, ma nulla ha funzionato fino a quando non ho fatto questo. (Ho dovuto usare "carta 0" sulla mia).
Rob Gibbons il

2
Utilizzando la configurazione di cui sopra, l'audio in YouTube su Palemoon non ha funzionato per me, questa configurazione ha funzionato: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234

bloccato per questo un giorno! e mi hai appena salvato il culo!
alamin,

2
NON utilizzare la pirateria informatica esoterica in risposta a persone normali. Invece di scrivere una riga che estrae colonne dall'output, descrivi a parole come trovare le informazioni desiderate nell'output completo.
Szczepan Hołyszewski,

16

questo è il metodo per selezionare la scheda audio predefinita in Alsa. Potrebbe essere necessario installare Alsa affinché questo metodo funzioni se si utilizza Pulse Audio.

cat / proc / asound / modules

elencherà i tuoi moduli sonori. L'output del comando sarà così (es.):

0 snd_hda_intel

1 snd_usb_intel

puoi facilmente capire quale sia la tua scheda audio USB dall'alto.

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

modifica questo alsa-base.conf in modo tale che la tua carta preferita abbia un indice = -2 / 0 e l'altra carta abbia un indice = -1 / 1 (mantieni con -2 e -1)

opzioni snd_hda_intel index = -1

opzioni snd_usb_intel index = -2

in questo caso si preferisce il dispositivo USB.

se hai due carte diverse con lo stesso nome dall'output, in questo modo:

opzioni snd_hda_intel

opzioni snd_hda_intel

emettere questo comando per scoprire quale è quale:

cat / proc / asound / carte

quindi modifica i moduli in questo modo:

opzioni snd_hda_intel abilita = 1 indice = 0

opzioni snd_hda_intel abilita = 0 indice = 1

potrebbe essere necessario un riavvio, quindi potrebbe essere necessario cambiare manualmente le schede audio.


Cosa intendi con "modifica dell'output"? Come posso modificare l'output?
Petr Pudlák l'

ho apportato le modifiche necessarie nella answer.try questa versione. Spero che questo aiuti.I metodi possono variare a seconda del sapore di Linux che usi.
Ashildr,

Grazie. Come posso verificare l'installazione? Ho identificato le carte, aggiunto le opzioni appropriate, riavviato, ma non vedo alcun cambiamento - comunque la carta interna (intel) è quella preferita.
Petr Pudlák, l'

prova> opzioni snd-usb-intel abilitazione = 1 indice = 0 (per abilitare)> opzioni snd-hda-intel abilitazione = 0 indice = 1 (per disabilitare) o> opzioni snd-hda-intel abilitazione = 0 indice = 0> opzioni snd-usb-intel abilitazione = 1 indice = 1 e riavvio
Ashildr

cioè, abilita usb disabilita l'altro usando enable = 0 o 1, fai anche questo viceversa.Non sono sicuro che funzionerà per te. Il riavvio è necessario.Vorrei risolvere il tuo problema
Ashildr

4

Inoltre non sono riuscito a ottenere l'output dal mio dispositivo USB. La mia cat /proc/asound/modulesuscita è stata:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

Ho provato entrambe le risposte descritte qui che non sono state di aiuto (con molte combinazioni di indici e molti riavvii). Penso che il problema sia stato l'inizializzazione del mio dispositivo USB dopo l'avvio. Qualunque cosa, quindi la mia soluzione di lavoro sta inserendo nella blacklist altri 2 dispositivi audio aggiornando /etc/modprobe.d/blacklist.confcome:

blacklist snd_hda_intel

3

La risposta di Matija Nalis ha funzionato solo a metà per me (alsamixer ha cambiato il valore predefinito, ma altre cose come aplay e firefox ostinatamente bloccate con il valore predefinito errato). Questo esempio del wiki debian ha funzionato per me (sul laptop CentOS-6):

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

Per la cronaca: ALSA è scarsamente documentata, e soprattutto questa roba molto semplice come selezionare quale carta usare è troppo difficile. Peggio ancora, sembra cambiare tra i sistemi. Inoltre, ho ottenuto quel tag "Generic_1" da aplay -l dove compare come "carta 1" nell'elenco. Altre persone sembravano usarlo, quindi ho fatto lo stesso ... cosa significa che non posso dire.


1

Sebbene sia possibile modificare la scheda alsa predefinita modificando .asoundrc o il sistema asound.conf, ci sono un paio di problemi significativi con questo approccio.

È fragile e richiede il riavvio dell'applicazione per essere onorato.

Se vuoi cambiare le carte al volo, devi davvero usare un sound server che astragga correttamente le applicazioni dalla scheda audio come pulseaudio.


Alcune applicazioni come Skype beta lo ignorano e si collegano alla scheda ALSA predefinita. Ciò non comporta alcun audio per Skype quando HDMI è il primo dispositivo anziché HDA.
Max N,

-1

Ecco una variante delle risposte di Matija Nalis e Tel. Questo è ciò che ha funzionato per me:

~ / .Asoundrc

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

(Odroid C0, Debian Jessie, audio HDMI come scheda 0 e scheda audio USB come scheda 1 secondo aplay -l)

Nota: altri metodi non hanno funzionato per me, dato che / proc / asound / modules non esiste e non esiste un modulo audio hdmi da inserire nella blacklist o messo a bassa priorità, è incorporato nel kernel. Sembra che avrei dovuto ricompilare il kernel senza il supporto audio HDMI per disabilitarlo completamente.


sudo modprobe $ soundcard_driver farebbe quello che desideri per / proc / asound / modules
linuxdev2013

@ linuxdev2013 come hai potuto modprobe un driver che non è in grado di modprobe? Come spiegato sopra, non è un modulo, è incorporato nel kernel.
astooooooo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.