From 6944d0c96a21a0033a7b2a49714e4e9e8522aabf Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Thu, 25 Jun 2020 04:01:00 +0100 Subject: feat(tazjin/nsfv-setup): Add script for noise-cancelling others This script creates a pulseaudio sink that will cancel noise in audio streams sent to it, and then move it on to the default sink. This means that other people's crackling, static background, gulping, keyboard sounds, fan whirring, construction noise etc. are removed. Some preliminary tests on TVL suggest that this actually works. The parameter might need some tweaking ("50" is just the default value), as there is some occasional crackling at the beginning/end of a speech segment, but this is already *much* better than before. Change-Id: I9d4e2b39cfc2b878b4b7c5458788b8d46fb801af Reviewed-on: https://cl.tvl.fyi/c/depot/+/577 Reviewed-by: nyanotech --- third_party/default.nix | 1 + users/tazjin/nsfv-setup/default.nix | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 users/tazjin/nsfv-setup/default.nix diff --git a/third_party/default.nix b/third_party/default.nix index b4b799e8ee..934eee1571 100644 --- a/third_party/default.nix +++ b/third_party/default.nix @@ -106,6 +106,7 @@ let pkgconfig postgresql pounce + pulseaudio python3 python3Packages remarshal diff --git a/users/tazjin/nsfv-setup/default.nix b/users/tazjin/nsfv-setup/default.nix new file mode 100644 index 0000000000..65f94034da --- /dev/null +++ b/users/tazjin/nsfv-setup/default.nix @@ -0,0 +1,18 @@ +# Configures a running Pulseaudio instance with an LADSP filter that +# creates a noise-cancelling sink. +# +# This can be used to, for example, cancel noise from an incoming +# video conferencing audio stream. +# +# There are some caveats, for example this will not distinguish +# between noise from different participants and I have no idea what +# happens if the default sink goes away. +{ pkgs, ... }: + +let + inherit (pkgs) ripgrep pulseaudio nsfv; +in pkgs.writeShellScriptBin "nsfv-setup" '' + SINK=$(${pulseaudio}/bin/pacmd info | ${ripgrep}/bin/rg -r '$1' '^Default sink name: (.*)$') + echo "Setting up NSFV filtering to sink ''${SINK}" + ${pulseaudio}/bin/pacmd load-module module-ladspa-sink sink_name=NSFV sink_master=''${SINK} label=noise_suppressor_stereo plugin=${pkgs.nsfv}/lib/ladspa/librnnoise_ladspa.so control=50 +'' -- cgit 1.4.1