Noise Reduction Automation Suggestions

My platform: macOS Catalina v10.15.5, Audacity v2.4.2

I’m new to Audacity (and sound engineering in general) but have been educating myself on best practices, specifically for the purposes of audiobook creation. As a programmer, I automatically gravitated towards the ability to apply a sequence of macros to a raw recording, to help streamline the standard steps I will be taking before diving into the detailed manual cleanup of a track. This wiki page was particularly helpful: https://wiki.audacityteam.org/wiki/Audiobook_Mastering.

Frustratingly, I cannot apply a macro to Noise Reduction, though with a few minor enhancements to Audacity or a new plug-in, I think this would be possible. I have read the forums and found people requesting “one-click” solutions. I understand that the complication is that Noise Reduction needs to get a noise profile from a specific section of the sample (room noise) before it can apply that saved profile to the rest of the sample. I believe this could be accomplished via a macro, if a minor change were made to the functionality of the Noise Reduction effect. I have two suggestions which would solve this problem:

Suggestion #1: Take the code behind the Noise Reduction “Get Noise Profile” button and copy it into new effect which just performs that step.
That would allow the user to automate noise reduction via a macro. The user would first manually select the room noise sample section, then run a Noise Reduction macro, consisting of the steps:

  1. Get Noise Profile: the new stand-alone effect I’m suggesting
  2. Select All
  3. Noise Reduction. As a side note, it’s frustrating that the only macro option for noise reduction is Use Preset “Factory Defaults”, which is a separate issue that warrants improvement. The user should be able to create and save presets, or select from predefined presets (i.e. Noise Reduction of the Beast), and use a preset in their macro.

I have found that I actually can use a macro to do the aforementioned steps, since running the Noise Reduction filter in a macro will first Get Noise Profile if one is not already in memory, and then running it again will apply the noise reduction using my most recent settings. That only works the first time it is performed within an Audacity instance, due to the noise profile being stuck in memory; every rerun of Noise Reduction only performs step 2, meaning I have to close and reopen Audacity between every run of my standard macro. That leads me to the second idea.

Suggestion #2: Create a new “Forget Noise Profile” effect plug-in.
If you don’t want to touch the code behind the built-in Noise Reduction effect then perhaps a new plug-in could be created which clears the previously stored noise profile from memory. That would allow the user to run a macro which uses the existing Noise Reduction effect twice; once to get the noise profile, the second time to apply it. As in the first use case, the user would first select a small section of room noise, then run a macro with these steps:

  1. Forget Noise Profile: the new plug-in I’m suggesting, which would clear the noise profile from memory (if there is one in memory, otherwise it would do nothing).
  2. Noise Reduction: running this when there is no stored noise profile automatically performs the Get Noise Profile action using the current selection.
  3. Select All
  4. Noise Reduction: running this when there is a stored stored noise profile automatically applies to profile to the selection using the most recent settings.

As a final thought, ACX standards require 0.5-1 seconds of silence at the beginning of a recording and 1-5 seconds at the end. Anyone who follows that standard practice could fully automate the Noise Reduction process by adding a Select Time step to the beginning of the Noise Reduction section of their macro chain with the options Start Time 1, End Time 2, Relative To Project End. I’d avoid starting at 0 (the absolute end) because you could pick up your bodily movement as you hit the stop button.

your bodily movement as you hit the stop button.

I had not thought through completely automating the recording or mastering process that far, mostly because that’s not likely to work. I do admire your effort to get around that “editing takes five times the length of the show” thing.

It’s perfectly possible to record with a well-behaved microphone in a quiet, echo-free room and not need Noise Reduction. I’m not guessing. That’s how I submitted my ACX Audition which passed technical testing. But you’re right. Noise Reduction is tough to automate.

You are going to be stopping, starting, and editing anyway because nobody can read multiple chapters with no mistakes. That’s over and above suppressing gasping and other mouth noises. Yes, there is Audacity DeEsser, DeClicker, and Noise Gate. There is also an ACX failure called “Overprocessing” which you can get if you pile too many fixes on top of your reading.

The ACX metaphor is listening to somebody tell you a fascinating story over cups of tea—not over a smartphone.

You can semi-automate the Room Tone sequences. There is a technique where you record and save matching room tone in a separate file and jack it in to the show where needed. The trick is matching. If you do it at the end of production, it has to be mastered. If you do it at the beginning, it must be raw. If you don’t do that, then the bookend Room Tones will not match the spaces between your spoken words.


Do you have your book all picked out? Are you the author? Is your book available on Amazon in eBook or Paper? That’s one of the newer ACX requirements.

ACX no longer offers the Audition Service where they will evaluate your work and offer suggestions. But you can post a short test here.

Read down the blue links. They’re very short.

https://www.kozco.com/tech/audacity/TestClip/Record_A_Clip.html

No effects. Don’t do anything to it.

Koz

It’s a total new user error to read the whole book and only then stop to find if it’s OK. Home readers are doing the jobs of Actor, Recording Engineer, and Producer. You can’t leave any out.

Koz

Thanks for your suggestions. I’ll pass them on to the development team.
– Bill

You’ve been automating the existing process. I wonder if you didn’t do it that way.

Noise does have a recognizable personality. For the most part, it’s the only sound that stays constant for the whole presentation. You can test for that. That’s how cellphones do it, only their restriction is needing to do it very, very quickly. That gives you noise processing that hates music, but this isn’t a cellphone. This is a three minute song or spoken word with hiss, hum or buzz in the background. A lot easier than having to do it while a watchdog process is standing there with a stopwatch.

You can even see this on timeline Spectrogram view, so some of the analysis is already done. That continuous left-to-right band at 120Hz? That’s power hum (in the US). Get rid of it.

I have a very old program that used to do completely automated noise reduction. This was back when we didn’t have microphones and had to use rocks.

There is a very old Noise Reduction Request that I think settled way down at the bottom of the basket.

Save/Load Noise Profile.

You can simulate that now by carefully saving a chunk of noise as a high quality sound file and repeatedly using it as Profile. But what would happen if you didn’t have to go through all that?

Macro command of noise reduction might reduce to Noise Reduction: 14, 6, 6, 6. Load profile number 14 and apply Noise Reduction of the Beast.

And to extend that. Noise Reduction: Auto

Koz

I quite like this suggestion. :sunglasses:

But I think what you have here is a bug. It seems that you can set the 6,6,6 “mark of the beast” with but when you Edit parameters - but when you go back to the Macro it shows “Factory Defaults” as the setting. But if you re-edit the parameters they show as 6,6,6.

So I think I’ll be logging this as a bug. Anybody disagree ?

Peter

It’s not really a “bug”, but I think it could be logged on bugzilla as an anomaly.

Quite some time ago, effects were updated to a new, consistent base class which supports presets and some other features that were previously missing. Unfortunately, the developer that was working on Noise Reduction at the time moved on to other things, leaving this one effect (and associated clutter) as the one effect left over from the “old style” effects.

The “bug” (enhancement) is to update the effect to the same “new style” as all the other built-in effects.
Better still would be to update to a “real-time-preview” effect.


I also like the idea to allow the user to automate noise reduction via a macro.
If we were to have a stand-alone “Get Noise Profile” effect, then I see no reason why it needs to be limited to only one noise profile. It could support multiple profiles that could be stored on disk for future use. The “Noise Removal” effect could then be set to use any of the existing profiles, or in the absence of any profiles it could use an “auto” option that could either attempt to automatically extract a suitable noise profile, or use a generic profile.

I also like the idea to allow the user to automate noise reduction via a macro.
If we were to have a stand-alone “Get Noise Profile” effect, then I see no reason why it needs to be limited to only one noise profile. It could support multiple profiles that could be stored on disk for future use. The “Noise Removal” effect could then be set to use any of the existing profiles, or in the absence of any profiles it could use an “auto” option that could either attempt to automatically extract a suitable noise profile, or use a generic profile.

What a terrific idea.

Koz

This is a great idea, it would also be amazing if this new plugin could be configured and accessed via scripting. There’s a few podcasts I listen to which I would love to use noise reduction trained against the bumper music in an automated / scripted fashion

I wonder, has this feature made any progress yet?

I’m processing many audio files to remove noise multiple times due to there being multiple noise profiles. It would be great to have these noise profiles saved to disk as .WAV (or whatever) and be able to pass a file path as a parameter to the Noise Reduction automation function!

I’ve read in other threads that some people spend quite a bit of time collating and curating noise reduction profiles, so this would work well for those folk as well.

-Andrew

PS I’m loving the Python automation interface!

With reference to the original post at the top, I wrote an ACX Audiobook Mastering Macro.

ACX-Mastering-Macro.txt (458 Bytes)
It automatically runs the three mastering tools, Filter Curve, Set RMS, and Set Peaks.

Since Mastering (either manual or automatic) doesn’t use heavy compressors or other non-linear tools, you can apply the macro and then correct your mistakes, process for length, and correct or apply “book end” room tone. If you recorded well in a quiet, echo-free room, that can finish your chapter.

As noted in this message thread, Noise is the college course.

Koz

While I think that the complicated Noise Profile file management additions are a terrific idea, for my money a two-part Profile process would be worlds better than it is now.

– 1. If there is a profile, use that.

– 2. If there isn’t a profile, assume the quietest part of the performance is noise and use that as profile. This can re-purpose the noise sampling code in the ACX Check tool. While I don’t think the default noise reduction settings are always optimal, that would work.

That doesn’t preclude using the other posted profile management steps. They all fall into step 1. If there is a profile, no matter where you got it from, use that. I’m trying to avoid turning Noise Reduction into a large cumbersome tool and force the user to run it that way.

I think there is a difference between the existing tool and the legacy tools, but I don’t know what that difference is and I can’t find the explainer.

Koz

I have a revision.

– 2. If there isn’t a profile, and in the absence of any other instruction, assume the quietest part of the performance is noise and use that as profile, and use the default reduction values.

“Any other instruction” can include instructions of where to find a pre-baked profile, and which reduction numbers to use.

For example:

Effect > Noise Reduction is automatic profile and default correction.
Effect > Noise Reduction 5 means use the prebaked profile number five and the default correction.

Effect > Noise Reduction 5, 6, 6, 6 means use prebaked profile number five and Noise Reduction Of The Beast.

Effect > Noise Reduction 0, 6, 6, 6 means use auto profile and Noise Reduction Of The Beast.

Note that if you manually generated a profile and didn’t include any option, Noise Reduction works like it always did.

That’s before coffee notes and I’m not a developer. I think there’s a conflict in there somewhere.

Koz

I found the Noise Reduction detailed description and I don’t understand what it’s describing.

================================
When using Noise Reduction in Macros the Noise Profile is captured as below.

– If a Noise Profile exists, that Noise Profile will be used. It is often best to
capture a suitable Noise Profile before running a Macro.

– If a Noise Profile does not exist:

– If the Macro is applied to the current project, the current selection is
used to create the Noise Profile. Therefore, other effect commands in the
Macro will also only apply to that selection. If an export command is added,
the entire file will be exported.

– If the Macro is applied to files, the first file (all of it) is used to create the Noise
Profile. It may be useful to prepare a file containing a suitable Noise Profile
and name it so that it is alphabetically the first file of those to be run in the
Macro.
=================================

???

I remember trying to understand this when it was first introduced, but I didn’t entirely understand it then, either.

Koz