Após instalarmos um segundo dispositivo de áudio no
Linux, é bastante comum acontecer da ordem de carregamento dos drivers de dispositivo mudar, podendo inclusive ser diferente a cada boot. Com isso, programas que esperavam achar a placa de som principal em /dev/dsp, por exemplo, acabam achando a placa secundária e pronto... nada mais de som. Como num passe de mágica, após um reboot o som pode voltar a funcionar se a ordem de carregamento do driver for invertida novamente, dificultando ainda mais o entendimento do problema.
Com essa dica pretendo mostrar uma forma simples de forçarmos a ordem de carregamento dos drivers de áudio, de forma que não tenhamos mais essas surpresas desagradáveis. Estou utilizando o Slackware com kernel 2.6, sendo que os módulos são carregados automaticamente pelo UDEV. Em outras distros o procedimento pode ser ligeiramente diferente, mas creio que o método seja geral o bastante.
No meu caso específico tenho 3 dispositivos de áudio: uma placa de som onboard, o microfone de minha webcam USB e a entrada de áudio de uma placa de captura de vídeo. Os respectivos drivers são os seguintes:
- placa de som: hda_intel
- webcam USB: usb_audio
- placa de captura: cx88_alsa
Você pode descobrir quais são seus drivers com o comando
lsmod (normalmente é necessário que você esteja como usuário root). Geralmente os drivers de som ALSA começam com o prefixo snd_ - os meus por exemplo aparecem como: snd_hda_intel, snd_usb_audio e cx88_alsa (este caiu na exceção :P).
Descobertos os nomes dos drivers, basta especificar a ordem de carregamento dos mesmos no arquivo /etc/modprobe.conf através da diretiva "index":
options hda_intel index=0
options usb_audio index=1
options cx88_alsa index=2
Dessa forma, após o próximo reboot, /dev/dsp será a placa de som, /dev/dsp1 o áudio da webcam e /dev/dsp2 o dispositivo de áudio da placa de captura. Esses são os nomes de dispositivos compatíveis com o sistema de som antigo (OSS). Você pode verificar que a ordem de carregamento dos drivers ALSA também é a mesma com o seguinte comando:
$ cat /proc/asound/cards
Resultado no meu sistema:
- O [NVidia ]: HDA-Intel - HDA NVidia
- HDA NVidia at 0xddff8000 irq 11
- 1 [U0x46d0x8b2 ]: USB-Audio - USB Device 0x46d:0x8b2
- USB Device 0x46d:0x8b2 at usb-0000:00:02.0-1, full speed
- 2 [CX8801 ]: CX88x - Conexant CX8801
- Conexant CX8801 at 0xde000000
Se você quiser alterar a ordem de carregamento, basta reordenar os "index" conforme desejado no arquivo /etc/modprobe.conf.
Bom, é isso aí. Dê boas vindas ao som perdido!
Referências:
Oi Cláudio. To com um problema, quem sabe pode me ajudar. Tenho uma placa de TV USB Pixelview prolink usb 2 (módulo em28xx). Quando uso o tv time, pra pegar a tv, faça a conexão dos tres cabos RCA (amarelo, branco e vermelho) do decodificador da tv a cabo nessa placa que possui tres entradas RCA. No programa TvTime, coloco a configuração de entrada no composite1(video composto). A imagem é perfeita, mas não tem som. Tenho dos os módulos rodando normalmente (snd-usb-audio, em28xx_alsa). No diretório /dev tenho /dsp1 /dsp2. Dando o comando cat /proc/asound/cards aparece o seguinte:
[root@localhost flavio]# cat /proc/asound/cards
0 [Intel]: HDA-Intel - HDA Intel
HDA Intel at 0xf0000000 irq 21
1 [Video]: USB-Audio - USB 2821 Video
USB 2821 Video at usb-0000:00:1d.7-5, high speed
2 [Em28xx Audio]: Empia Em28xx AudEm28xx Audio - Em28xx Audio
Empia Em28xx Audio
[root@localhost flavio]#
O que será que ta acontecendo que o som não sai? No windows funciona normalmente. Obrigado.