Defina a saída de áudio padrão quando houver apenas um coletor

Defina a saída de áudio padrão quando houver apenas um coletor

Instalei recentemente o Ubuntu 22.04.1 LTS (depois de usar o 18.04 anteriormente). O menu de configuração de som tem essas opções de saída, das quais a segunda opção (o S/PDIF) é a que eu uso, e escolhê-la faz com que o áudio funcione perfeitamente.

menu de saída de áudio

Mas após cada reinicialização, a saída de áudio é redefinida para a saída HDMI e preciso que ela seja padronizada para S/PDIF. As soluções que encontrei (e usei em instalações anteriores) envolvem a escolha do coletor certo para o Pulseaudio, mas parece que só tenho um coletor agora! A saída de pactl list short sinksé:

6   alsa_output.pci-0000_00_0e.0.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED

A saída de aplay -ltambém não parece ter nenhum vestígio do S/PDIF:

**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC283 Analog [ALC283 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC283 Digital [ALC283 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Então onde está?! De onde vêm as alternativas do menu? E como posso definir S/PDIF como padrão?

Responder1

Pesquisei mais fundo e encontrei duas soluções funcionais, das quais estou totalmente satisfeito com o número 2.

Solução 1: alsa-sink explícito

Percebi que os dois primeiros subdispositivos listados por aplay -lsão na verdade S/PDIF, porque reproduzir sons de Java (como faço emmeu próprio reprodutor de música) funciona com o dispositivo de saída configurado para plughw:0,0ou plughw:0,1com os LEDs do meu DAC mudando apropriadamente de acordo com a taxa de amostragem.

Para que um deles seja escolhido por padrão, funciona para adicionar

load-module module-alsa-sink
load-module module-alsa-source device=hw:0,1

para o meu ~/.config/pulse/default.pa(copiado de /etc/pulse/). Isso adiciona uma opção “Áudio Integrado” no menu de saída de som, que é escolhida por padrão. Este é efetivamente um alias para a opção S/PDIF (que é o que considero um pouco irritante com esta solução).

Solução 2: definir perfil de cartão

O comando Pulseaudiocartões de listarevela algumas informações interessantes. A pacmd list-cardssaída lista um cartão nomeado alsa_card.pci-0000_00_0e.0que possui umportosseção que contém a linha:

iec958-stereo-output: Digital Output (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)

Isso é produzido por module-udev-detecte deve ser onde as configurações de som obtêm as informações sobre a saída listada como S/PDIF. Ao olhar paracartões de listasaída com diferentes seleções de saída no menu de configurações de som, descobri que a diferença estava no que estava definido como “perfil ativo”. Esse,eu encontrei, pode ser alterado com set-card-profile. Adicionando

set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo

funcionou ~/.config/pulse/default.pano sentido de que eu obteria a saída S/PDIF depois pulsaudio -k, mas após a reinicialização e o login, a saída de som seriaaindaser definido como HDMI. (Aparentemente, algo diferente da inicialização do Pulseaudio altera a configuração do perfil do cartão.) Então, em vez disso, excluí meu local default.panovamente e adicionei o comando

pacmd set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo

como umaplicativo de inicialização. Isso parecia ter funcionado, até que o protetor de tela entrou em ação… Quando a tela é despertada do protetor de tela, o perfil do cartão éde novomudou para outra coisa! A solução que encontrei para isso foi criar um script que escuta os eventos do protetor de tela, verifica a configuração do perfil do cartão quando o protetor de tela é ativado e o configura novamente quando o protetor de tela é desativado. O script é uma versão modificada daquele emesta resposta (que trata da configuração do coletor em vez do perfil do cartão), e fica assim:

#!/bin/bash
    
my_card="alsa_card.pci-0000_00_0e.0"
watch="type=signal,interface=org.gnome.ScreenSaver"
screen_locked_signal="boolean true"
screen_unlocked_signal="boolean false"

_get_active_profile() {
    pacmd list-cards | sed -n 's/^\s*[Aa]ctive\s\s*[Pp]rofile:\s*<\([^>]*\)>/\1/p'
}

last_profile=$(_get_active_profile)

# Watch for screensaver D-Bus signals
dbus-monitor --session "$watch" | ( \
    while read signal; do
        if [[ "$signal" =~ "$screen_locked_signal" ]]; then
            # Screen locked: remember the current profile
            last_profile=$(_get_active_profile)
        elif [[ "$signal" =~ "$screen_unlocked_signal" ]]; then
            # Screen unlocked: restore the last profile
            pacmd set-card-profile "$my_card $last_profile"
        fi
    done)

Adicionar esse script também aos aplicativos de inicialização elimina o problema do protetor de tela.

informação relacionada