PulseAudio e Multicanais

De Enciclopédia do leleobhz

Conteúdo

[editar] PulseAudio e Multicanais

[editar] Introdução

Tenho um escritório em casa onde não trabalho sozinho, e por alguma ironia do destino eu sequestrei as caixas de som dos 2 computadores e soquei na minha Intel HDA. Tinha um mixer separado pras caixas ligadas no canal trazeiro (LineOut) e para as dianteiras (Front). Perfeito, som fodástico sempre que precisava. Mas nem sempre as outras pessoas querem ouvir o que eu quero, dai dá briga. E o apaziguador da peleja é o PulseAudio.

[editar] Notas

O PulseAudio no gutsy NÂO vem com o modulo remap, que é o responsavel por separar os canais em novos dispositivos. Criei um backport dele baseado na versão do hardy, que não tem esse problema e está a disposição no meu repositório.

[editar] Instalação

Em um sistema com Hardy ou com os backports para Gutsy:
  • Shell - root
aptitude -y install ~npulseaudio pavucontrol paman padevchooser

[editar] Configuração

Básicamente se trata de mudar algumas configurações do padrão. Destaque para a configuração do módulo remap e da mixagem automática, que deve ser desabilitada. Não colocarei toda a configuração como o de costume, mas sim somente o que deve ser mudado.
  • /etc/asound
pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}
  • /etc/pulse/daemon.conf
disable-remixing = yes
  • /etc/pulse/default.pa
# Aqui será informada qual a placa de som a ser usada. Ver nos anexos os detalhes desta configuração.
load-module module-alsa-sink device=hw:0 sink_name=IntelHDA_Out channels=4 channel_map=front-left,front-right,rear-left,rear-right

# Cada linha dessa cria um dispositivo virtual novo. O primeiro está ajustado para ter dois canais, que mapear-se-ão de acordo com o que está
# no channel_map (Mastermap diz quais canais da placa real serao usados, e channelmap diz quais serao os novos canais). O Sinkname deve
# também ser ajustado para um nome diferente, sem espaços, e descritivo.

load-module module-remap-sink sink_name=front_stereo master=IntelHDA_Out channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right
load-module module-remap-sink sink_name=rear_stereo master=IntelHDA_Out channels=2 master_channel_map=rear-left,rear-right channel_map=front-left,front-right
  • /etc/default/pulseaudio
PULSEAUDIO_SYSTEM_START=1
DISALLOW_MODULE_LOADING=0
Agora é só iniciar o serviço:
  • Shell - root
sudo invoke-rc.d pulseaudio restart

[editar] Começo de brincadeira

Toda a configuração é feita no pavucontrol, ou PulseAudio Volume Control. Normalmente ele está no menu Multimedia, mas pdoe ser aberto via linha de comando também.
Na aba Playback tem os programas que estão usando o PulseAudio, e o controle de volume individual. No menu mostrado na tela abaixo, acessavel clicando com o botão direito na aplicação, é possivel escolher para onde o audio vai. A ordem e a mesma que está no default.pa, sendo que a primeira opção sempre envia para a placa diretamente.
Imagem:PULSEAUDIO1.png
Na aba Output Devices, estão os mixers ordenados por placa, permitindo também ajustar o volume por placa ou "subdivisão" dela. No mesmo processo do anterior, se você acessar o menu auxiliar, poderá selecionar qual delas será a padrão (quando uma nova aplicação abrir). Sem mistérios.
Eu ativei também o PulseAudio para ouvir via tcp, pois assim quando o pessoal quiser ouvir música, é so abrir o player local e tocar. Bastam mais linhas
  • /etc/pulse/default.pa
# Deixei assim porque estou em rede local. A linha comentada faz com que somente se escute em uma dada rede (Neste caso 192.168.0.0)

#load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
#load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16

load-module module-esound-protocol-tcp auth-anonymous=1
load-module module-native-protocol-tcp auth-anonymous=1
load-module module-zeroconf-publish

  • ~/.pulse/client.conf - No cliente
default-server = IPDAMAQUINA
Basta reiniciar o pulseaudio e pronto.

[editar] Anexos

[editar] Canais

Você pode usar quantos canais quiser. O Pulseaudio reconhece a lista em ordem, ou seja, o canal 0 deve ser o primeiro a ser listado. Para descobrir a sequência, usa-se o utilitário speaker-test (e o único parametro que muda é o -c, que contem o número de canais que deseja ser usado).
  • Shell - root
speaker-test -c4 -Dhw:0 -t wav -l1
Um exemplo:
  • Saida de comando
leleobhz@zorg:~/PROGRAMAS/LINUX$ speaker-test -c4 -Dhw:0 -t wav -l1

speaker-test 1.0.14

Dispositivo de reprodução é hw:0
Parâmetros do stream são 48000Hz, S16_LE, 4 canais
Arquivo(s) WAV
Taxa alterada para 48000Hz (requisitada 48000Hz)
Tamanho do buffer tem um intervalo de 32 à 8192
Tamanho do período tem um intervalo de 16 à 4096
Usando tamanho máximo de buffer 8192
Períodos = 4
period_size definido = 2048
buffer_size definido = 8192
 0 - Da Esquerda
 1 - Da Direita
 3 - Direita Posterior
 2 - Esquerda Posterior
Tempo por peíodo = 5,718131
Está claro que o primeiro canal é o frontal da esquerda, o segundo é o frontal da direita e por ai vai. Cada placa tem seu mapeamento, e fica facil saber quem é quem porque sai um som falando que caixa é. Basta definir a sequência na configuração do PulseAudio (se 0 e frontal da esqueda, então o primeiro item no channel-map tem que ser front-left).
Ferramentas pessoais