No PulseAudio, cada placa de som tem um conjunto de perfis associado a ela. Um conjunto de perfis contém vários perfis, e esses são os perfis que você vê ao listar os cartões (ou ao procurar nas várias GUIs do PulseAudio).
Existe um perfil default
, que contém principalmente coisas úteis para saída de som analógico. Há também um perfil extra-hdmi
que é aplicado automaticamente a algumas saídas HDMI e fornece opções de até 5.1. Infelizmente, esses dois perfis estão em /usr/share/pulseaudio/alsa-mixer/profile-sets
e, portanto, você não pode realmente editá-los (eu arquivei Erro de depuração 736708 sobre isso.) De acordo com a documentação, você pode desabilitar a descoberta automática com base no udev e configurar tudo manualmente - isso permite especificar o caminho completo para um perfil. Mas acontece que, embora não esteja documentado, o udev também pode especificar um caminho completo.
Configure uma regra do udev para atribuir um conjunto de perfis
Você atribui um conjunto de perfis em uma regra do udev definindo a variável de ambiente PULSE_PROFILE_SET
udev. Está documentado para obter apenas um arquivo no subdiretório /usr
mencionado acima, mas um caminho completo também funciona. No meu caso, criei esta regra:
# cat /etc/udev/rules.d/95-local-pulseaudio.rules
ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1c20", ENV{PULSE_PROFILE_SET}="/etc/pulse/my-hdmi.conf"
Você precisará usar os números apropriados de fornecedores e dispositivos PCI, que você pode obter facilmente em lspci -nn
.
Depois de criar a regra do udev, você pode aplicá-la imediatamente com udevadm trigger -ssound
. Você provavelmente vai querer reconstruir seu initramfs também ( update-initramfs -u
)
Confirme se a regra do udev entrou em vigor com udevadm info --query=all --path /sys/class/sound/card0
(use o número do cartão apropriado, é claro). Você deve ver E: PULSE_PROFILE_SET=/etc/pulse/my-hdmi.conf
na saída. Caso contrário, não continue. Não vai funcionar. Algo está errado com suas regras do udev (ou talvez você não as tenha ativado - você sempre pode tentar reinicializar).
Crie o arquivo /etc/pulse/my-hdmi.conf
Nota: o mapa do canal é aparentemente específico do sistema. Você precisará experimentar para acertar o seu sistema. Tive sorte, meu layout 7.1 apenas envolve a queda dos itens finais para criar 5.1, 4.0, etc. As instruções estão abaixo.
Isso é um monte de cópia & cole, principalmente. Cada seção difere em (a) nome, (b) descrição, (c) mapa de canal, (d) prioridade [opcional].
[General]
auto-profiles = yes
[Mapping hdmi-stereo]
device-strings = hdmi:%f
channel-map = front-left,front-right
description = Digital Stereo (HDMI)
priority = 4
direction = output
paths-output = hdmi-output-0
[Mapping hdmi-surround-40]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right
description = Digital Quadrophonic (HDMI)
priority = 1
direction = output
paths-output = hdmi-output-0
[Mapping hdmi-surround-51]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
description = Digital Surround 5.1 (HDMI)
priority = 2
direction = output
paths-output = hdmi-output-0
[Mapping hdmi-surround-71]
description = Digital Surround 7.1 (HDMI)
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
priority = 3
direction = output
paths-output = hdmi-output-0
Agora, para testar isso:
- Reinicie o PulseAudio:
pulseaudio -k
, como seu usuário normal, supondo que você esteja usando daemons por usuário (o padrão). Inicie novamente, até mesmo um simplesaplay -l
funcionará. - Alterne para o perfil 7.1. Pessoalmente, usei
pactl set-card-profile 0 "output:hdmi-surround-71"
para fazer isso, mas uma GUI funcionará perfeitamente também. - Executar
speaker-test -c 8 -t w
. Ele deve começar a anunciar os nomes dos palestrantes, esperançosamente o nome correto de cada palestrante. Se os nomes não vêm do orador correto, você terá que mudar o mapa do canal para acertar. Depois que cada mapa de canal mudar, você deverá reiniciar o PulseAudio novamente.
Bônus! Configurações mais úteis
Em /etc/pulse/daemon.conf
, existem algumas configurações que você pode alterar:
enable-remixing
- Se estiver ativado, um sinal estéreo terá seu canal esquerdo reproduzido de todos os três alto-falantes esquerdos e o canal direito dos alto-falantes direitos. Se fora, só sairá os dois da frente. Note que você também pode alterar o perfil para estéreo (para enviar apenas som estéreo para fora da porta HDMI e deixar que o seu receptor decida como mapeá-lo para os alto-falantes).
enable-lfe-remixing
- Similar, mas para remixagem para o canal LFE (subwoofer).
default-sample-format
- Se a sua configuração HDMI suporta áudio de mais de 16 bits, você pode querer aumentar isso para s32le
(do padrão s16le
).
default-sample-rate
, alternate-sample-rate
- Você pode querer trocar estes (e talvez até desabilitar 44.1KHz por completo) se você usa principalmente material de fonte de DVD que normalmente é de 48KHz. Ou, se o seu receptor HDMI suportar, você pode ir até 192KHz. Note que 176KHz tem a boa propriedade de ser um múltiplo par de 44.1 e 48KHz. Veja abaixo como determinar o que seu receptor suporta
default-sample-channels
- realmente não parece importar. O perfil provavelmente substitui isso ...
Naturalmente, você terá que reiniciar o PulseAudio depois de alterar este arquivo.
Bônus novamente! Vendo o que seu receptor suporta
Existem eld.*
arquivos em /proc/asound
que informam o que a outra extremidade de um link HDMI afirma suportar. Por exemplo:
# cat /proc/asound/card0/eld#3.0
monitor_present 1
eld_valid 1
monitor_name TX-SR606
connection_type HDMI
eld_version [0x2] CEA-861D or below
edid_version [0x3] CEA-861-B, C or D
manufacture_id 0xcb3d
product_id 0x863
port_id 0x0
support_hdcp 0
support_ai 1
audio_sync_delay 0
speakers [0x4f] FL/FR LFE FC RL/RR RLC/RRC
sad_count 8
sad0_coding_type [0x1] LPCM
sad0_channels 2
sad0_rates [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
sad0_bits [0xe0000] 16 20 24
sad1_coding_type [0x1] LPCM
sad1_channels 8
sad1_rates [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
sad1_bits [0xe0000] 16 20 24
sad2_coding_type [0x2] AC-3
sad2_channels 8
sad2_rates [0xe0] 32000 44100 48000
sad2_max_bitrate 640000
sad3_coding_type [0x7] DTS
sad3_channels 8
sad3_rates [0xc0] 44100 48000
sad3_max_bitrate 1536000
sad4_coding_type [0x9] DSD (One Bit Audio)
sad4_channels 6
sad4_rates [0x40] 44100
sad5_coding_type [0xa] E-AC-3/DD+ (Dolby Digital Plus)
sad5_channels 8
sad5_rates [0xc0] 44100 48000
sad6_coding_type [0xb] DTS-HD
sad6_channels 8
sad6_rates [0x1ec0] 44100 48000 88200 96000 176400 192000
sad7_coding_type [0xc] MLP (Dolby TrueHD)
sad7_channels 8
sad7_rates [0x1480] 48000 96000 192000
Para que você possa ver meu receptor suporta LPCM (PCM Linear, ou seja, áudio não-comprimido) em até 8 canais, 192KHz, som de 24 bits. Ele também suporta AC3, DTS, DSD, DD +, DTS-HD e Dolby TrueHD. Então, se eu tiver arquivos codificados neles, posso passar esses formatos (se o meu media player suportar isso, é claro. mpv
provavelmente faz).