Alsa USB-Audio hotplug

2

Meu novo alto-falante USB apareceu como o segundo dispositivo da Alsa. Consegui fazer disso o principal:

$ cat /proc/asound/modules 
 0 snd_usb_audio
 1 snd_hda_intel
$ cat /proc/asound/cards
 0 [Speaker        ]: USB-Audio - uBoom Q Speaker
                      uBoom Q Speaker at usb-0000:00:1d.1-1, full speed
 1 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0x80000000 irq 16

adicionando estas linhas a /etc/modprobe.d/alsa-base.conf :

options snd_hda_intel index=1
options snd_usb_audio index=0

Agora, quando inicializo o USB-Audio, ele funciona por padrão em todos os lugares. O problema é - quando eu o desconecto (ou inicializo sem ele), vejo

$ cat /proc/asound/modules 
 1 snd_hda_intel

e nada funciona porque não há 0 -th device:

$ aplay
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'

O que eu quero é reatribuir os índices dos dispositivos. Se a solução é um script - vou criar uma regra do udev com ela.

Atualmente, eu mudo 'index =?' de volta ao padrão '0,1', invoque alsa force-reload e isso ajuda. Alguma maneira melhor?

Nota: não há asoundconf na minha distro (KUbuntu Lucid): (

    
por kolypto 05.08.2010 / 21:27

4 respostas

1

Primeiro, vamos lidar com os índices dos dispositivos Alsa. Conecte seu alto-falante USB e invoque sudo alsa force-reload para que Alsa o encontre.

Indique os índices dos cartões e seus drivers:

$ cat /proc/asound/modules 
 0 snd_hda_intel
 1 snd_usb_audio

Mostrar informações mais detalhadas:

$ cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0x80000000 irq 16
 1 [Speaker        ]: USB-Audio - uBoom Q Speaker
                      uBoom Q Speaker at usb-0000:00:1d.0-1, full speed

Queremos ter 'Speaker' com índice = 0.

Adicione estas linhas a /etc/modprobe.d/alsa-base.conf para tornar o USB Speaker o dispositivo padrão, se presente:

options snd_hda_intel index=-2
options snd_usb_audio index=-1

Isso torna o USB-Speaker mais preferível do que o cartão Builtin. Problema sudo alsa force-reload , voila! Agora você pode ver com cat /proc/asound/cards como os cards aparecem & desaparece quando liga / desliga o seu altifalante USB.

Aqui está outro recibo como escolher qual dos dois cartões disponíveis o próximo aplicativo lançado usará.

Adicione estas linhas ao /etc/asound.conf:

$ cat /etc/asound.conf.switch 
# CARD DEFINITIONS
#=== CARD 'card0'
pcm.card0-hw { type hw ; card 0 ; }
ctl.card0-hw { type hw ; card 0 ; }

pcm.card0 { type dmix ;
    ipc_key 4109 ; ipc_perm 0660 ;
    slave { pcm "hw:0,0"
        channels 2 ; period_size 1024 ; buffer_size 4096 ; rate 44100 ; period_time 0 ;
        }
    bindings { 0 0 ; 1 1 ; }
    }

#=== CARD 'card1'
pcm.card1-hw { type hw ; card 1 ; }
ctl.card1-hw { type hw ; card 1 ; }

pcm.card1 { type dmix ;
    ipc_key 1949 ; ipc_perm 0660 ;
    slave { pcm "hw:1,0"
        channels 2 ; period_size 1024 ; buffer_size 4096 ; rate 44100 ; period_time 0 ;
        }
    bindings { 0 0 ; 1 1 ; }
    }

Isso criará dois dispositivos de reprodução 'dmix': 'card0' & 'card1'. Eles permitirão alternar entre eles sem problemas.

Agora, coloque isso em ~ / .asoundrc:

# Define new virtual devices
pcm.this                { type plug ; slave.pcm "card1" ; }
ctl.this                ctl.card1-hw
# Set default device
pcm.!default    pcm.this
ctl.!default    ctl.this

para mudar para o segundo cartão. Substitua todos os '1's por' 0 para voltar. Um pequeno script será útil:)

NOTA: Neste manual, criamos vários novos dispositivos Alsa: 'this', 'card0-hw', 'card0', 'card1-hw', 'card1'. Você pode se referir a eles:

$ amixer -D 'this' scontrols
Simple mixer control 'PCM',0

P.S. Eu não estou em comum com a forma como o Alsa realmente funciona e pode ter cometido erros terríveis :) Por favor, corrija-me se houver uma maneira melhor. Mas ainda assim, isso funciona:)

    
por 31.08.2010 / 04:02
2

tente instalar o asoundconf-gtk mas cuide do link

    
por 29.08.2010 / 02:14
0

Eu tentei a edição simples do alsa-base.conf definindo o onboard para -2 e o usb para -1, mas isso não funcionou.

no entanto, quando eu defino BOTH como -1 (com o onboard listado primeiro), então eu poderia alternar entre eles.

Eu tenho que executar uma força de força para recarregar a cada mudança, no entanto.

    
por 13.10.2013 / 21:38
0

Estou tentando resolver o mesmo problema: redirecionando automaticamente o fluxo de áudio quando uma placa de som USB é conectada ao sistema, então decidi escrever uma nova regra para o udev:

/etc/udev/rules.d/50-alsa.rules:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/bin/alsa-switch.sh"

é claro, você deve substituir os '*' por números de acordo com o seu dispositivo (use o lsusb para saber quais)

O script alsa-switch.sh é muito simples:

#!/bin/sh
ln -sf /path/to/custom/asoundrc /home/<user>/.asoundrc

Outra regra pode ser adicionada para reverter a configuração quando o dispositivo for removido (desculpe, ainda estou trabalhando nisso)

    
por 07.01.2016 / 00:30