Questions about LV2 effects

Not sure if this section is the appropriate place to ask for this, if is not please move it where it should be.
I’ve been developing a realtime broadband noise reduction lv2 plugins for a couple of months now called noise-repellent (https://github.com/lucianodato/noise-repellent). Initially I targeted Ardour to be the main platform to be used with but some users ask me to make it work with Audacity too. The problem is that I don’t really know the internals of the effect applications used in Audacity and my plugin relies in temporal buffers for noise profiling and various other stuff so when it is applied it does not change anything. I’m close to releasing a new version of it and I wanted to know if I could do something to fix this and get it to work with audacity too. I will appreciate any hints or insights you guys could give me regarding this.

That sounds terrific.
If your plug-in is fully compliant with LV2 specifications, and does not require MIDI, then it ‘should’ work with Audacity.
(Update: Another thought, Audacity only supports mono or stereo, not multi-channel > 2)

Is the plug-in Linux only, or cross-platform?

Noise-repellent is a mono plugin for now. It is multiplataform though I’ve only tested it on Linux. It loads fine in Audacity but when I select a region to make a noise profile out of it it seems to capture it correctly but when playhead stops somehow the noise profile buffers are not retained in memory. Is this an Audacity design or is it something wrong with it? In Ardour works flawlessly.

Unfortunately I don’t know much about the internals of LV2 effects (it’s not something that I’ve got round to yet), but I have an idea what the problem may be.

In “real time” DAWs such as Ardour, plug-ins are loaded and attached to a track or bus, and remain loaded for the duration of the session. On the other hand, Audacity is a WYSIWYG sample editor, and when you apply an effect, Audacity loads the effect, applies it to the selected audio, then closes the effect. If you need the effect to retain data from one pass to the next, I think you will need to handle storing that data somewhere, for example, writing it to a temporary file.

I thought that was the case. I believe that lv2 state extension is for this purpose and in fact it is already implemented in noise-repellent but not working in audacity. Do you know if Audacity supports lv2 state extension? I can’t find anything on audacity wiki.

Sorry, I don’t know. You could ask on the developer’s mailing list (see: https://www.audacityteam.org/contact/mailing-lists/), though please be aware that we are currently preparing for the next release so you may not get a quick response (also, the guy that did much of the LV2 development is no longer active in Audacity).
The other option is to search the code: https://github.com/audacity/audacity/tree/master/src/effects/lv2

Have you run any comparative tests between your “Noise Repellent” effect and Audacity’s “Noise Reduction” effect? (Noise Reduction - Audacity Manual)
Noise reduction is an important effect for many of our users, so it would be terrific to see a better effect available for Audacity.

Another possible option could be to implement your algorithm as a built-in effect for Audacity, though perhaps more work than you were intending(?)

Yes I did a comparative study using objective measurement like PESQ and PEAQ but with previous versions of noise-repellent. I’ve improved it a lot lately and I believe it is better in almost all program material I had tested with. The thing is that doing offline noise reduction permits using all the file information at the same time and that enables using different methods for smoothing and other parts of the algorithm so Paul’s noise reduction tool is using this as an advantage for noise classification and envelopes. I can’t do that with noise-repellent without introducing more latency. Previous versions were not that great but currently I believe it is.

I would love to improve what Paul did but it will require take the offline consideration and of course to be a separate project from noise-repellent because of that. I have read that Audacity mostly require as few controls as possible in effects to be easy to use. That is also hard since it will require lots of testing. I could be done though.

Just to interiorize you a bit, current version of noise-repellent is using a spectral subtraction suppression rule with a smoothed detector and a masking model to avoid musical noise and distortion. It also implements a simple onset detector to automatically switch between smoothed and non-smoothed detector to avoid transient distortion in music program material. All this require parameter tuning for best results so it is difficult to use that 2 sliders approach. If I would have to implement this for offline processing I would surely try joint time-frequency smoothing to avoid musical noise and distortion, it seems to work well in other commercial denoisers.

I will wait for the next release and will chime in for discussing this with other devs for next cycle. Thanks for the info.

I’ve briefly tried noise-repellent and from a quick test it is impressive. I look forward to testing it more thoroughly once the next Audacity release is out, and I look forward to you chiming in for discussion :wink: