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.

derobert
fonte

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).

derobert
fonte
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