Raül Martínez i Peris
Posted on January 4, 2024
Tengo instalada la distro https://neon.kde.org/ (iso: neon-user-20231221-0716.iso), y una novedad que me he encontrado a finales de 2023 tras unos meses sin tocar mi ordenador ha sido el cambio de pulseaudio a pipewire.
Ello implica que ya no me funciona la configuración de sonido que tenía aplicada para quitarle el ruido de fondo al micrófono. Así que me he puesto manos a la obra para volver a ponerme el eliminador de ruido, pero esta vez para pipewire.
He de decir que me ha encantado el cambio a pipewire.
Documentación
Todo lo indicado está basado en la documentación oficial. Puedes encontrar la documentación de pipewire en Pipewire
Además, vamos a habilitar la reducción de ruido con easyeffects, la documentación está en Easyeffects
Índice
Revisar la instalación de pipewire
Todo el código que ves está pensado para que puedas ejecutarlo con un script bash, o, directamente en la consola bash. Recuerda que si creas un archivo deberás indicar en la primera línea del archivo
#!/bin/bash
para que se ejecute con dicha shell.
Instalar librerías
El primer paso es revisar la instalación de las librerías cliente:
sudo apt install pipewire-audio-client-libraries libspa-0.2-bluetooth libspa-0.2-jack
Sustituir pipewire-media-session por wireplumber
Lo siguiente que necesitamos es instalar wireplumber y quitar pipewire-media-session ya que éste último se ha quedado descontinuado y se ha cambiado por el primero:
sudo apt purge pipewire-media-session
sudo apt install wireplumber
Configurar pipewire para clientes alsa
Ahora copiaremos el archivo de configuración para alsa:
sudo cp /usr/share/doc/pipewire/examples/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d/
Desactivar pulseaudio
Es el momento de desactivar pulseaudio, para ello deshabilitaremos el servicio y anularemos sus mensajes enmascarándolos hacia /dev/null
:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
systemctl --user mask pulseaudio
Revisar y activar
Actualizamos la configuración, para ello lanzamos:
sudo ldconfig
Activamos wireplumber:
systemctl --user --now enable wireplumber.service
Y en caso de ser necesario reiniciamos los servicios:
systemctl --user restart pipewire
Comprobamos su estado:
systemctl --user status pipewire pipewire-session-manager
y consultamos la info:
pactl info
Verás un resumen. En la info que te lanza pactl
verás una línea de texto similar a "Server Name: PulseAudio (on PipeWire x.x.x.x)". Si vemos on Pipewire quiere decir que está todo bien.
Podíamos haber realizado un
grep
para mostrar solo la línea que nos interesa, pero en este momento es más interesante ver toda la info. Puedes adaptarte el script para que te dé un error si no existe 'PipeWire' en el resultado.
Instalar Easyeffects
Después de haber revisado pipewire le llega el momento a easyeffects. Con easyeffects vamos a añadir el efecto noise-reduction.
Instalamos con flatpack
el módulo easyeffects. Evidentemente deberás tener instalado flatpack
:
flatpak install flathub com.github.wwmm.easyeffects
Puedes lanzarlo la interfaz visual con
flatpak run com.github.wwmm.easyeffects
.
Vamos a empezar, construyamos algunas variables para mejorar la legibilidad y evitar errores:
noiseReduction="noise-reduction"
folderEasyEffects="$HOME/.var/app/com.github.wwmm.easyeffects/config/easyeffects"
easyEffectsConfigInput="autoload/input"
configureNoiseReduction="${noiseReduction}.json"
noiseReductionJson="${folderEasyEffects}/${easyEffectsConfigInput}/${configureNoiseReduction}"
Te habrás percibido de que vamos a guardar el filtro dentro de la carpeta
autoload/input
, de esta forma siempre se leerá cuando se inicie easyeffects. Por contra, si no quieres que se lea de forma automática deberás guardarlo en la carpetainput
en vez de en la carpetaautoload/input
.
Ahora vamos a crear el archivo noise-reduction.json
:
read -r -d '' configureContentNoiseReduction <<EOF
{
"input": {
"blocklist": [],
"plugins_order": [
"rnnoise#0"
],
"rnnoise#0": {
"bypass": false,
"enable-vad": true,
"input-gain": 0.0,
"model-path": "",
"output-gain": 0.0,
"release": 20.0,
"vad-thres": 50.0,
"wet": 0.0
}
}
}
EOF
echo "${configureContentNoiseReduction}" >| "${noiseReductionJson}"
En cada ordenador, habrá que investigar un poco sobre qué valores del filtro son los que mejor se adaptan.
Una vez ejecutado el código, comprobamos que se ha creado correctamente:
[ -f "${noiseReductionJson}" ]
fileExist=$?
Si la variable
fileExist
tiene un0
quiere decir que el archivo existe; cualquier otro valor es un error.
Con estos pasos ya tenemos preparada la configuración y podemos volver a lanzar el script cuando lo necesitemos.
Activar en el inicio (autostart)
En este último paso vamos a hacer que se ejecute easyeffects en el inicio.
Si no quieres que el perfil se inicie automáticamente, puedes lanzarlo con
flatpak run com.github.wwmm.easyeffects --load-preset nombre_del_perfil --gapplication-service &
.
Primero nos creamos nuestras variables para simplificar las acciones:
profileFolder="/etc/profile.d"
initEasyEffects="99-autostart-easyeffects.sh"
Creamos el archivo que se ejecutará al inicio:
read -r -d '' easyeffectsContent <<EOF
#!/bin/bash
flatpak run com.github.wwmm.easyeffects --gapplication-service &
EOF
echo "${easyeffectsContent}" >| "${initEasyEffects}.temp"
Movemos el archivo a su destino:
sudo mv "${initEasyEffects}.temp" "${profileFolder}/${initEasyEffects}"
Comprobamos que se movió correctamente:
[ -f "${profileFolder}/${initEasyEffects}" ]
fileExist=$?
Y le cambiamos los permisos para que se pueda ejecutar:
sudo chmod +x ${initEasyEffects}
Espero te haya servido de ayuda.
:)
Posted on January 4, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.