quinta-feira, 16 de julho de 2026

Alguns erros no som do Linux como ruídos, chiados, interrupções e como tentar corrigi-los

Tem uma postagem aqui mais antiga sobre como resolver alguns problemas de som que costumam ocorrer no Linux e nessa nova postagem vou acrescentar mais algumas situações, inclusive referente à chiadeira de microfones. Só lembrando que instabilidades decorrentes de drivers mal escritos ou processadores pouco potentes só podem ser remediados.

Desabilitar o "suspend" da placa de som

Por padrão o sistema costuma desabilitar a placa de som depois de certo tempo de ociosidade para economizar energia, principalmente em notebooks. Pode ocorrer de, numa dessas "desligadas", a placa "não volte" ou fique instável e que pode provocar atrasos e soluços no som. Sendo assim, temos duas coisas a serem feitas (pode fazer as duas):

Desligar a nível de kernel:

É um pouco radical, necessita de privilégios de administrador da máquina e pode não incluir dispositivos de som USB. Abra o Terminal e digite:

inxi -A

Deverá aparecer algo assim:

Audio:
  Device-1: Intel NM10/ICH7 Family High Definition Audio driver: snd_hda_intel
  API: ALSA v: k6.12.95+deb13-amd64 status: kernel-api
  Server-1: PipeWire v: 1.4.2 status: active
 

O que interessa pra gente é o que está aparecendo em verde (snd_hda_intel) que é o módulo de som padrão usado no sistema. Se aparecer o snd_usb_audio é por que a placa de som ou dispositivo usado (como um microfone) é usb, esse item é importante. No Terminal, digite:

sudo nano /etc/modprobe.d/audio_disable_powersave.conf 

Coloque dentro e salve com ctrl+o e feche com ctrl+x:

options snd_hda_intel power_save=0
options snd_hda_intel power_save_controller=N

Use onde está azul a opção de "snd" que apareceu no comando inxi -A dado anteriormente. Reinicie a máquina. 

Desligar a nível de servidor de som

Esse me parece ser o mais adequado pois inclui dispositivos USB na jogada além de não precisar ser administrador pois as mudanças são aplicadas a nível de usuário. Pra isso precisamos saber qual a versão do Wireplumber está em uso:

wireplumber --version

Deverá aparecer algo assim:

wireplumber
Compiled with libwireplumber 0.5.8
Linked with libwireplumber 0.5.8

Se a sua versão por acima da 0.5 como no exemplo acima, no Terminal digite os comandos:

mkdir -p ~/.config/wireplumber/wireplumber.conf.d
nano ~/.config/wireplumber/wireplumber.conf.d/disable-audio-suspend.conf

e coloque dentro: 

monitor.alsa.rules = [
  {
    matches = [
      {
        node.name = "~alsa_.*"
      }
    ]
    actions = {
      update-props = {
        session.suspend-timeout-seconds = 0
      }
    }
  }
]


Se o Wireplumber for abaixo de 0.5:

mkdir -p ~/.config/wireplumber/main.lua.d
nano ~/.config/wireplumber/main.lua.d/50-disable-suspend.lua


e coloque dentro: 

table.insert(alsa_monitor.rules, {
  matches = {
    {
      { "node.name", "matches", "alsa_.*" },
    },
  },
  apply_properties = {
    ["session.suspend-timeout-seconds"] = 0,
  },
}) 

Em ambos os exemplos, salve com ctrl+o e feche com ctrl+x. Reinicie a máquina. 

As configurações de som não são salvas 

Taí um negócio chato, você liga o PC e o som (microfone e áudio) não estão nos níveis que você deixou. Abra o Terminal e digite: 

sudo nano /etc/udev/rules.d/90-alsa-restore.rules

Coloque dentro:

ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", TEST=="/usr/sbin", TEST=="/usr/share/alsa", GOTO="alsa_restore_go"
GOTO="alsa_restore_end"

LABEL="alsa_restore_go"

ENV{ALSA_CARD_NUMBER}="$attr{device/number}"

# mark HDA analog card; HDMI/DP card does not have capture devices
DRIVERS=="snd_hda_intel", TEST=="device/pcmC$env{ALSA_CARD_NUMBER}D0p", RUN+="/bin/sh -c 'echo ALSA_CARD_HDA_ANALOG=$env{ALSA_CARD_NUMBER} >> /run/udev/alsa-hda-analog-card'"

# check for ACP hardware
TEST=="device/device/acp3x-dmic-capture", GOTO="alsa_hda_analog"
TEST=="device/device/acp6x-dmic-capture", GOTO="alsa_hda_analog"
TEST=="device/device/acp63-dmic-capture", GOTO="alsa_hda_analog"
TEST=="device/device/acp-dmic-codec", GOTO="alsa_hda_analog"
GOTO="alsa_restore_std"

LABEL="alsa_hda_analog"
# restore configuration for profile with combined cards (HDA + digital mic)
TEST!="/run/udev/alsa-hda-analog-card", GOTO="alsa_restore_std"
IMPORT{program}="/usr/bin/cat /run/udev/alsa-hda-analog-card"
ENV{ALSA_CARD_HDA_ANALOG}!="", ENV{ALSA_CARD_NUMBER}="$env{ALSA_CARD_HDA_ANALOG}"

# ---> A CORREÇÃO FICA AQUI (Substituindo o "alsa_restore_go" duplicado)
LABEL="alsa_restore_std"
TEST!="/etc/alsa/state-daemon.conf", TEST=="/usr/sbin/alsactl", RUN+="/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime restore $env{ALSA_CARD_NUMBER}"
TEST=="/etc/alsa/state-daemon.conf", TEST=="/usr/sbin/alsactl", RUN+="/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime nrestore $env{ALSA_CARD_NUMBER}"

LABEL="alsa_restore_end" 

Salve com ctrl+o e feche com ctrl+x. Depois disso:

sudo udevadm control --reload-rules 

Ainda no Terminal, para complementar a restauração de áudio:

nano ~/.config/autostart/restaurar-audio.desktop

Coloque dentro:

 [Desktop Entry]
Type=Application
Name=Restaurar Volume Universal
Exec=alsactl restore
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
X-KDE-autostart-after=panel

Se o seu microfone fica também com essa de não voltar ao volume configurado:

nano ~/.config/autostart/travar-microfone.desktop 

Coloque dentro (configurando para 85% do volume total):

 [Desktop Entry]
Type=Application
Name=Fixar Volume do Microfone
Exec=amixer set Capture 85%
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true

Salve com ctrl+o e feche com ctrl+x em ambos os exemplos. Agora basta colocar os níveis de acordo com a sua necessidade e reiniciar a máquina.

Tirando o chiado de gravações de microfones

Aqui vamos habilitar um recurso do Pipewire que é o filtro de ruídos para o microfone e que, usado em conjunto do filtro de ruídos do OBS-Studio deixa o som gravado do microfone limpinho; e pra quem não consegue usar o OBS na máquina, só esse filtro já tira 80% da chiadeira de fundo.

Usando o pipewire original 

No Terminal, digite:

mkdir -p ~/.config/pipewire

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

nano ~/.config/pipewire/pipewire.conf 

Procure pelo item:

context.objects = [
    #{ factory = <factory-name>
    #    ( args  = { <key> = <value> ... } )
    #    ( flags = [ ( nofail ) ] )
    #    ( condition = [ { <key> = <value> ... } ... ] ) 

 e coloque ANTES de "context.objects":

 { name = libpipewire-module-echo-cancel
  args = {

    capture.props = {
      node.name = "mic_capture"

      audio.channels = 1
      audio.position = [ MONO ]
    }

    source.props = {
      node.name = "mic_source"
      node.description = "Microfone Filtrado"

      audio.channels = 1
      audio.position = [ MONO ]
    }

    sink.props = {
      node.name = "audio_sink"
      node.description = "Saida Filtrada"
    }

    playback.props = {
      node.name = "audio_playback"
    }
  }
}
]

Deverá então ficar assim (a parte em azul já existe no arquivo e a parte verde é a nova, atenção aos colchetes!):

            }
        }
        flags = [ ifexists nofail ]
        condition = [ { module.jackdbus-detect = true } ]
    }

{ name = libpipewire-module-echo-cancel
  args = {

    capture.props = {
      node.name = "mic_capture"

      audio.channels = 1
      audio.position = [ MONO ]
    }

    source.props = {
      node.name = "mic_source"
      node.description = "Microfone Filtrado"

      audio.channels = 1
      audio.position = [ MONO ]
    }

    sink.props = {
      node.name = "audio_sink"
      node.description = "Saida Filtrada"
    }

    playback.props = {
      node.name = "audio_playback"
    }
  }
}

]

context.objects = [
    #{ factory = <factory-name>
    #    ( args  = { <key> = <value> ... } )
    #    ( flags = [ ( nofail ) ] )
    #    ( condition = [ { <key> = <value> ... } ... ] ) 
 

Novamente, atenção ao único colchete que vai mudar de lugar. No arquivo original a parte que vem antes do "context_objects" está assim:

            }
        }
        flags = [ ifexists nofail ]
        condition = [ { module.jackdbus-detect = true } ]
    } 

context.objects = [
    #{ factory = <factory-name>
    #    ( args  = { <key> = <value> ... } )
    #    ( flags = [ ( nofail ) ] )
    #    ( condition = [ { <key> = <value> ... } ... ] )
    #}

Esse colchete marcado em azul vai "sumir" para dar lugar ao conteúdo em verde e esse colchete vai para o final desse mesmo conteúdo em verde (olhe lá mais pra cima). Se isso não for feito a configuração não vai funcionar. Basta então reiniciar o sistema. Se não funcionar (ficar sem som) basta apagar o arquivo que está em ~./config/pipewire/. Se funcionou, abra o seu "Painel de Controle" e selecione lá na parte de som o "Microfone Filtrado" para a entrada de microfone. No Controle de Volume do XFCE seria algo assim (atenção às entrada e saída selecionadas):

Saída (áudio interno analógico):

 Entrada (dispositivo de entrada):


Com isso o seu som deverá voltar ao normal ou, pelo menos, ficar mais estável, principalmente com máquinas mais antigas.

Nenhum comentário:

Postar um comentário