No PulseAudio, cada placa de som possui um conjunto de perfis associado. 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 default
perfil que contém principalmente itens úteis para a saída de som analógico. Há também um extra-hdmi
perfil que é aplicado automaticamente a algumas saídas HDMI e oferece opções de até 5.1. Infelizmente /usr/share/pulseaudio/alsa-mixer/profile-sets
, esses dois perfis estão presentes e, portanto, você não pode realmente editá-los (arquivei o bug 736708 do Debug sobre isso.) De acordo com a documentação, você pode desativar a descoberta automática com base no udev e configurar manualmente tudo. 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 PULSE_PROFILE_SET
udev configurando a variável de ambiente do udev. Está documentado para pegar apenas um arquivo no /usr
subdiretório mencionado acima , mas um caminho completo também funciona. No meu caso, eu 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 de fornecedor e dispositivo PCI apropriados, os quais você pode obter facilmente lspci -nn
.
Depois de criar a regra do udev, você pode aplicá-la imediatamente com udevadm trigger -ssound
. Você provavelmente desejará 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. Isso não vai funcionar. Algo está errado com suas regras do udev (ou talvez você não as tenha acionado - você sempre pode tentar reiniciar).
Crie o arquivo /etc/pulse/my-hdmi.conf
Nota: O mapa do canal é aparentemente específico do sistema. Você precisará experimentar para acertar no seu sistema. Eu tive sorte, meu layout 7.1 envolve apenas a retirada dos itens finais para compilação 5.1, 4.0 etc. As instruções estão abaixo.
Isso é muito copiar e colar, 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, mesmo um simples aplay -l
funcionará.
- Mude para o perfil 7.1. Pessoalmente, eu costumava
pactl set-card-profile 0 "output:hdmi-surround-71"
fazer isso, mas uma GUI também funcionaria perfeitamente bem.
- Corra
speaker-test -c 8 -t w
. Ele deve começar a anunciar os nomes dos oradores, espero que o nome correto de cada orador. Se os nomes não vierem do alto-falante correto, você terá que mudar o mapa do canal para acertá-los. Após a alteração de cada mapa de canal, você deve reiniciar o PulseAudio novamente.
Bônus! Configurações mais úteis
Em /etc/pulse/daemon.conf
, existem algumas configurações que você pode querer alterar:
enable-remixing
- Se estiver ativado, um sinal estéreo terá seu canal esquerdo reproduzido nos três alto-falantes esquerdos e o canal direito nos alto-falantes direitos. Se desligado, ele só sai pela frente dois. Observe que você também pode alterar o perfil para estéreo (para enviar apenas som estéreo pela porta HDMI e deixar seu receptor decidir como mapeá-lo para os alto-falantes).
enable-lfe-remixing
- Semelhante, mas para remisturar no canal LFE (subwoofer).
default-sample-format
- Se a sua configuração HDMI suportar áudio superior a 16 bits, convém aumentar para s32le
(a partir do padrão s16le
).
default-sample-rate
, alternate-sample-rate
- Você pode trocá-las (e talvez até desativar 44.1KHz) se usar principalmente material de fonte de DVD que normalmente é 48KHz. Ou, se o seu receptor HDMI suportar, você pode ir até 192KHz. Observe que 176KHz tem a boa propriedade de ser um múltiplo par de 44,1 e 48KHz. Veja abaixo como determinar o que o seu receptor suporta
default-sample-channels
- Realmente não parece importar. O perfil provavelmente o substitui ...
Naturalmente, você precisará reiniciar o PulseAudio após alterar este arquivo.
Bônus novamente! Vendo o que o seu receptor suporta
Existem eld.*
arquivos nos /proc/asound
quais informamos o que a outra extremidade de um link HDMI afirma apoiar. 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
Assim, você pode ver que meu receptor suporta LPCM (PCM linear, isto é, áudio não compactado) em até 8 canais, 192KHz, som de 24 bits. Também suporta AC3, DTS, DSD, DD +, DTS-HD e Dolby TrueHD. Portanto, se eu tiver arquivos codificados nesses, posso passar por esses formatos (se meu media player suportar, é claro. mpv
Provavelmente sim).