domingo, 28 de dezembro de 2025

Consertando o áudio com estalos e interrupções no Pipewire - Parte 2

Consertando o áudio com estalos e interrupções no Pipewire - Parte 2

    Nesse link eu mostro como consertar (ou pelo menos tentar consertar) problemas de ruídos estranhos no áudio do seu PC com Linux usando Pipewire: esses problemas englobam interrupções e adição de estalos e outros ruídos no fluxo de som. Agora nessa continuação temos a segunda parte (que pode complementar essa primeira) em referência à latência e prioridade de processos.

     Primeiro vamos desabilitar o eventual recurso do sistema de suspender dispositivos de áudio; isso pode ser útil em notebooks para a economia de energia mas ela é tão pequena que nem vale a pena. Abra o Terminal e digite (se já tiver, vá para o arquivo de configuração):

 sudo mkdir -p /etc/security/limits.d/

sudo nano /etc/security/limits.d/99-pipewire.conf

Coloque dentro:

@audio   -  rtprio     95
@audio   -  memlock    unlimited

 Salve o arquivo. Ainda no Terminal digite:

groups

 e veja se o seu usuário aparece na listagem mostrada; se não aparecer, digite no Terminal:

 sudo usermod -aG audio $USER

Copie o arquivo pipewire.conf para a sua home:

mkdir -p ~/.config/pipewire

cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/

 Edite o arquivo:

nano ~/.config/pipewire/pipewire.conf

Procure por "context.exec = [" e deixe assim:

 context.exec = [
    { path = "/usr/bin/pipewire", args = ["--realtime", "--nice-level=-10"] }

     Essa linha normalmente aparece com um comentário mostrando o que é para colocar ali, mais ou menos assim:

 context.exec = [
    #{   path = <program-name>
    #    ( args = "<arguments>" | [ <arg1> <arg2> ... ] )
    #    ( condition = [ { <key> = <value> ... } ... ] )
    #}
    #
    # Execute the given program with arguments.
    # If condition is given, the program is executed only when the context
    # properties all match the match rules.
    #
    # You can optionally start the session manager here,
    # but it is better to start it as a systemd service.
    # Run the session manager with -h for options.
    #
    #{ path = "/usr/bin/pipewire-media-session" args = ""
    #  condition = [ { exec.session-manager = null } { exec.session-manager = true } ] }
    #
    # You can optionally start the pulseaudio-server here as well
    # but it is better to start it as a systemd service.
    # It can be interesting to start another daemon here that listens
    # on another address with the -a option (eg. -a tcp:4713).
    #
    #{ path = "/usr/bin/pipewire" args = [ "-c" "pipewire-pulse.conf" ]
    #  condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] }
]

    Apague tudo que tiver # nesse módulo e deixe como mostrado mais acima. Salve o arquivo e reinicie a máquina. No Terminal digite:

ps -eo pid,comm,rtprio,ni | grep pipewire

    Deverá aparecer algo como:

   726 pipewire             - -11
   727 pipewire             -   0
   729 pipewire-pulse       - -11


    Isso demonstra que as prioridades estão configuradas corretamente; se aparecer 0 em tudo, reveja as configurações. Essa complementação de comandos vai dar as prioridades necessárias às threads de áudio para tentar corrigir o que a matéria anterior não conseguiu resolver.

Nenhum comentário:

Postar um comentário