Como configurar o PulseAudio para som surround 7.1 em HDMI?


10

Eu tenho minha máquina conectada através de HDMI a um receptor. Mas quando tento usar mais de dois canais com o PulseAudio, recebo apenas dois. pacmd list cardsmostra o cartão, mas não mostra um perfil HDMI com mais de dois canais.

Confirmei que o som 7.1 funciona via ALSA:

pasuspender -- speaker-test -D hdmi -c 8 -m FL,FC,FR,RR,RRC,RLC,RL,LFE

Produz estática que percorre a sala.

Respostas:


20

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 defaultperfil que contém principalmente itens úteis para a saída de som analógico. Há também um extra-hdmiperfil 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_SETudev configurando a variável de ambiente do udev. Está documentado para pegar apenas um arquivo no /usrsubdiretó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.confna 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:

  1. Reinicie o PulseAudio:, pulseaudio -kcomo seu usuário normal, supondo que você esteja usando daemons por usuário (o padrão). Inicie novamente, mesmo um simples aplay -lfuncionará.
  2. 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.
  3. 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/asoundquais 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. mpvProvavelmente sim).


Graças a um milhão por isso, estamos lutando há um tempo com a configuração. Para mim, as regras do udev não se aplicaram primeiro, tive que reiniciar o PC para isso. Porém, um problema .. @derobert Parece que não consigo transmitir o fluxo de áudio X265, 7.1. Eu só tenho que decodificá-lo usando o PC e transferir o fluxo de áudio. (Meu receptor é um 5.1 embora) Você tem alguma sugestão? Obrigado!
— Dimuthu

@dimuthu H.265 (x265) é um codec de vídeo, não um codec de áudio. Observe que o PulseAudio possui suporte limitado apenas para passagem, precisa estar ativado (mais fácil com a GUI) e pode precisar ser definido como estéreo (apenas um detalhe de implementação de como a passagem funciona, não um limite real na contagem de canais ) Eu me lembro de uma página no wiki do Kodi com detalhes.
— Derobert #

1
@dimuthu (Desculpe pelo segundo comentário, o aplicativo SE está travando ao tentar editar ...) Eu acho que um receptor 5.1 suporta apenas AC3 e DTS. Não, por exemplo, AAC. A menos que ele permita usar alguns recursos no receptor que você não pode usar com o PCM multicanal, não há muito motivo para passar. Pelo menos não através de HDMI.
— derobert

Sim, você está certo. De fato, estou passando pelo áudio configurando PulseAudio como HDMI estéreo. Esta é a única maneira de obter áudio de fluxo de bits no receptor. Também vasculhei a AAC e, embora a Yahama não tenha mencionado nada sobre suas especificações, encontrei algumas evidências online para descobrir que ela só está disponível em modelos de gama alta. Estou perdendo tantos detalhes decodificando-o usando HTPC? Eu configurei para 7.1Ch / 192KHz, 24 bits. Obrigado!
— dimuthu

@ Dimuthu, você realmente não deve perder nada decodificando no PC, desde que tenha um conversor de taxa de qualidade razoável definido no PulseAudio. Bem, nada, exceto algum tempo de CPU (especialmente a essa taxa de amostra, o que, sem dúvida, muito superior ao material de origem)
— derobert
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.