Sempre gostei um bocado de áudio. Fiquei fascinado com um pequeno circuito divisor de freqüências que montei ainda no curso técnico (10 anos atrás), que simulava o surround sound a partir de uma fonte de áudio estéreo. Com dois amplificadores extras, excitava dois alto-falantes adicionais que produziam o aumento de estéreo e envolvimento. Mas isso era só uma jogada para se conseguir o efeito. Bons mesmo são os sistemas de som de cinema com vários canais, hoje presentes nas casas de qualquer um. Estes sim, dão mais vida aos filmes e jogos.
Anos mais tarde, adquiri um Creative Audigy 2 NX, um dispositivo de som 7.1 USB. Precisava ser um dispositivo externo, USB, para usar com o notebook. Antes de comprar, vi rapidamente se havia suporte no linux 2.6.x, e para minha sorte havia alguns indicativos positivos na página de suporte do projeto Alsa. Consegui também um Inspire 5.1 5200, um sistema de som 5.1, para ligar ao Audigy.

Estava louco pra ver o sistema todo funcionando! Logo no primeiro teste com o Alsa do Linux 2.6.18, consegui apenas um som estéreo, e nada de som 5.1 dos DVDs. Na verdade, eu queria muito que o som do meu tocador de músicas, uma saÃda estéreo comum, fosse distribuÃdo em todas os 6 canais do Inspire. Mas só as duas principais funcionavam!
Procurei um pouco na documentação do Alsa, e vi que teria de configurar essa distribuição de canais. Fiz umas buscas por alguém com um caso parecido e consegui pouca coisa. Juntei o que consegui, mais a documentação do Alsa, e criei um arquivo de configuração para o Audigy, descrito à frente.
Para que o Audigy 2 NX funcione, é necessário ter os módulos snd_usb_audio e snd_usb_lib disponÃveis. Utilizo Debian aqui, mas a maioria das distribuições GNU/Linux têm o Alsa, com estes módulos disponÃveis. Certifique-se que o sistema detecta o dispositivo de som, utilizando o alsaconf, sem parâmetros.
O dispositivo deve ser reconhecido e os módulos carregados (caso ainda não estejam). No Gnome, já é possÃvel ver através do controle de volume (gnome-volume-control) os controles individuais de cada canal do dispositivo.
Neste ponto, usar o mplayer para tocar um DVD, por exemplo, é frustrante. Cada canal está mapeado para uma caixa de som diferente. O simples reposicionamento das caixas de som não é suficiente (além de ser muito deselegante), pois os canais são agrupados 2 a 2 nos cabos RCA do Audigy e o mapeamento não combina. Para resolver isso, os canais devem ser remapeados no Alsa, através do arquivo de configuração /etc/asound.conf ou o ~/.asoundrc (a diferença é que o primeiro faz a configuração system wide, para todos, e o segundo somente para um usuário). O arquivo de configuração ficou como segue (omiti a configuração referente ao codec de áudio built-in do notebook):
pcm.audigy51 {
type plug
slave.pcm “hw:2,0″
slave.channels 6
route_policy duplicate
ttable.0.0 1 # front left
ttable.1.1 1 # front right
ttable.4.2 1 # front center
ttable.0.3 0.5 # LFE
ttable.1.3 0.5 # LFE
#ttable.4.3 1 # LFE
ttable.2.4 1 # rear left
ttable.3.5 1 # rear right
}
pcm.audigy21 {
type plug
slave.pcm “hw:2,0″
slave.channels 6
slave.rate 48000
route_policy duplicate
ttable.0.0 1 # front left
ttable.1.1 1 # front right
ttable.0.2 0.5 # front center
ttable.1.2 0.5 # front center
ttable.0.3 0.5 # LFE
ttable.1.3 0.5 # LFE
ttable.0.4 1 # rear left
ttable.1.5 1 # rear right
}
Foram criados dois dispositivos virtuais. O audigy51 é utilizado para reproduções com 6 canais, como DVDs. O audigy21 é utilizado para reproduções de música de 2 canais, distribuindo-os pelos 6 canais do sistema de som. A linha slave.pcm "hw:2,0" descreve qual o dispositivo de hardware será utilizado. Para descobrir qual é o número do Audigy instalado, utilize aplay -l.
A instrução ttable é o que faz o mapeamento dos canais do Alsa aos canais do dispositivo fÃsico. É seguido pelo número do canal “virtual”, o número do canal “fÃsico”, e um fator de escala (ou ganho). A instrução ttable.4.2 1 liga o canal central “virtual” (4) ao “fÃsico” (2), com um ganho de 1 (100% do sinal é passado). Note que na configuração do audigy51 o canal do subwoofer (graves) está recebendo metade do sinal dos canais direito e esquerdo (uma média). O que é razoável (mas não o melhor), já que não percebemos o efeito estéreo (ou diferença de canais) em freqüências baixas. Na configuração audigy21 isso também é feito para o canal central, já que partimos de um sistema 2.0 (apenas dois canais de áudio).
Para testar o sistema, basta usar o aplicativo speaker-test, que vai enviar um sinal em cada canal separadamente (recomendo!):
$ speaker-test -c 2 -t wav -D audigy21
$ speaker-test -c 5 -t wav -D audigy51
Ou o mplayer para reproduzir vÃdeos (ou áudio) com 2 e 6 canais:
$ mplayer -ao alsa:device=audigy51 dvd://
$ mplayer -ao alsa:device=audigy21 arquivo.mpeg
Note que seu player preferido deve ser configurado para utilizar o dispositivo adequado. Para os programas que utilizam gstreamer, esta configuração deve ser feita no próprio.
Os problemas conhecidos e próximos passos
Há no Alsa, um dispositivo chamado surround51, que deveria ser utilizado para aplicações de 6 canais. Fiz alguns testes na configuração acima, mas não foi possÃvel vinculá-lo ao Audigy desta forma (talvez devido ao meu hardware padrão ser o sistema 2.0 buit-in do notebook).
O subwoofer não está sendo excitado adequadamente. Existe um plugin do Alsa que implementa um filtro passa-baixas, que pode ser utilizado para gerar um sinal adequado ao amplificador de graves. É preciso descobrir como ligar este plugin para cortar o sinal em 100 ou 200 Hz.
Caso algum leitor tenha conseguido algum resultado interessante ou alguma melhoria nesta configuração, envie uma mensagem! CrÃticas e sugestões são muito bem vindas.