I listened to the examples. I think my present experiments do better at removing the white noise behind the sinusoid, than spectral subtraction example. This is not to say we should not have a choice of algorithms for sophisticated users, but that opportunities for improving the existing algorithm are not exhausted.
I could give a longer explanation and some other interesting test cases. I would rather put it on the wiki page but I don’t think I am authorized.
I’ll say one thing: results in this test case depend very much on the frequency. Use Audacity 2.0.5, a sine wave of 5 * 44100 / 2048 = 107.666015625 hz, 30 seconds of the noise for profile, and noise removal settings of 48, 1, 0, 0.1 . The noise removal works very well in that case. (Turns out that frequency smoothing will reduce the signal too however.)
Why does 2.0.5 work poorly for other frequencies? A longer story. Do I know how to make it work well regardless of frequency, with the current approach of spectral gating? Yes. Does it sound better than the spectral subtraction example? In my opinion, yes, provided Sensitivity is a little above zero (less is needed, the longer the noise sample is).
because mGains[center][j] will multiply FFT coefficients, but min and mNoiseThreshold[j] are power.
All that said, there may be a useful idea here, but as with spectral gating, I think the real solution to good removal of noise behind sounds is first to get better spectral data by using a non-rectangular windowing function. So what I am doing would benefit both.