A better noise gate

I’m very excited to publicly release my noise gate plugin.

Its main features are:

  • it’s easy to configure not to fade out the quiet endings of phrases
  • it can remove clicks whose amplitude exceeds the threshold
  • it is 8 times faster than Steve’s noisegate.ny.

Unfortunately, it’s also about 8 times harder to install than your typical Nyquist plugin (it uses a different interface called LADSPA), but in my opinion it’s totally worth the investment. I’ve been using it myself for a couple of month now, and it significantly simplified and sped up my editing workflow.

Motivation, algorithm description, and advice on setting the parameters: https://ro-che.info/articles/2019-01-12-better-noise-gate
Source code and installation instructions: https://github.com/feuerbach/noise-gate

This sounds interesting. Do you have plans to publicly release binaries?

That’s not surprising. noisegate.ny is a Nyquist plug-in, and “Nyquist” is an extension of XLisp, which is an interpreted language. To gather the amplitude data, the plug-in has to loop through the sample values in a Lisp loop, which is slow. The process is made quicker by downsampling prior to analyzing the peaks, but it still has to loop through each sample of the low sample rate copy. It would be reasonable to expect a C++ version to be considerably faster.

Thanks. I uploaded an .so for Linux x86-64 here: https://github.com/feuerbach/noise-gate/releases/download/v0.1/ng.so. If there’s enough demand, I may consider investing in the infrastructure to automatically build packages for Linux and other systems.

Exactly — sorry for not making it clear. I didn’t mean to imply that noisegate.ny was written inefficiently. It is precisely because Nyquist lacks streaming and efficient sliding window computations that I opted for a C++ interface.

Thanks, but testing on both Audacity 2.1.2 and Audacity 2.3.1 alpha, on Ubuntu 16.04 64-bit, the plug-in fails to register.

Assuming ng.so is in the current directory, does this command print anything?

LADSPA_PATH=. listplugins

Also, what does this say?

ldd ./ng.so

Only if I run the command from the ladspa directory.

$ listplugins

prints a list of all other LADSPA plug-ins that are installed.

./ng.so: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./ng.so)
	linux-vdso.so.1 =>  (0x00007ffca8cda000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc66094b000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc660642000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc66042c000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc660062000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fc660ccd000)
/lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./ng.so)

That must be the issue—16.04 probably comes with an older version of glibc. So you’ll need to compile it yourself. Assuming you have the toolchain installed, it should be as simple as git clone and then make.

or wait until I update to Ubuntu 18.04.

Your installation notes say:
“1) Make sure you have a standard C++ development environment (the compiler and the Boost library).”

I do have a "standard C++ development environment, but I don’t have Boost (which is not a standard C++ library, nor even an extension to the C++ Standard Library, but rather a large collection of 3rd party libraries). As almost all of my C++ programming is with Audacity (which doesn’t use Boost, and tries to minimise 3rd party dependencies), I prefer to keep my development environment as “standard” as possible.