Go Back   Cockos Incorporated Forums > REAPER Forums > REAPER Feature Requests

View Poll Results: Would you use this feature?
Yes, I would use it. 33 86.84%
No, I would not use it. 5 13.16%
Whatever (Doesn't know/care) 0 0%
Voters: 38. You may not vote on this poll

Reply
 
Thread Tools Display Modes
Old 03-05-2017, 05:28 PM   #1
heavymetalmixer
Human being with feelings
 
Join Date: Mar 2017
Posts: 60
Default Auto Loudness Matching for Cockos Plugins

What I would like to see is that all of the Cockos plugins have a "loudness matching" button, that when it's ON, it changes the level of the output signal to match the loudness level of the input signal, all of this based on the on the EBR 128 S1 standard.

One of the main problems when mixing is that the levels before and after the plugin are different, and given that we "hear louder as better" (and quieter as worse), then we can't do fair comparisions on how the audio is processed. Also, it creates the need to constantly move the faders so the balance of the mix doesn't change.

If the audio before and after the plugin is equally loud, then our brain won't be fooled and we will only listen to the changes that the plugins does, and we won't need to move the fader at all.


PD: Why is that not every Cockos plugin is in the Reaplugs pack for other DAWs?

Last edited by heavymetalmixer; 03-05-2017 at 05:52 PM.
heavymetalmixer is offline   Reply With Quote
Old 03-06-2017, 10:58 AM   #2
grinder
Human being with feelings
 
grinder's Avatar
 
Join Date: Jan 2009
Location: New Zealand
Posts: 2,905
Default

I think if you are asking this question of Reaper plugins you should also ask the question of all makes of plugins.

Grinder

https://soundcloud.com/steve-maitland-1
grinder is offline   Reply With Quote
Old 03-06-2017, 11:01 AM   #3
heavymetalmixer
Human being with feelings
 
Join Date: Mar 2017
Posts: 60
Default

Quote:
Originally Posted by grinder View Post
I think if you are asking this question of Reaper plugins you should also ask the question of all makes of plugins.

Grinder

https://soundcloud.com/steve-maitland-1
Actually yeah, every plugin should have this, but given this is a Reaper forum I can only ask for Reaper plugins to make this change possible.
heavymetalmixer is offline   Reply With Quote
Old 03-06-2017, 11:45 AM   #4
pcartwright
Human being with feelings
 
Join Date: Jan 2009
Posts: 1,030
Default

First, this would be great.

Second, I think it would be possible to do this for any plugin if you implement the feature in the FX window itself.

The chain would look something like this:
Code:
Track input audio -> 
FX Window Input -> 
[ Loudness Processing Input -> 
Effect 1 Input -> 
Effect 1 Output -> 
Loudness Adjustment ] -> 
[ Loudness Processing Input -> 
Effect 2 Input -> 
Effect 2 Output -> 
Loudness Adjustment ] -> 
... -> 
FX Window Output
To summarize, Reaper itself would analyze the audio in and make adjustments on the audio out instead of the plugin. That way, any plugin could have this feature.

You would need to restrict it to audio only effects (i.e., no VSTi or MIDI effects) to avoid inadvertently muting a synth or sampler.
pcartwright is offline   Reply With Quote
Old 03-06-2017, 11:52 AM   #5
heavymetalmixer
Human being with feelings
 
Join Date: Mar 2017
Posts: 60
Default

Quote:
Originally Posted by pcartwright View Post
First, this would be great.

Second, I think it would be possible to do this for any plugin if you implement the feature in the FX window itself.

The chain would look something like this:
Code:
Track input audio -> 
FX Window Input -> 
[ Loudness Processing Input -> 
Effect 1 Input -> 
Effect 1 Output -> 
Loudness Adjustment ] -> 
[ Loudness Processing Input -> 
Effect 2 Input -> 
Effect 2 Output -> 
Loudness Adjustment ] -> 
... -> 
FX Window Output
To summarize, Reaper itself would analyze the audio in and make adjustments on the audio out instead of the plugin. That way, any plugin could have this feature.

You would need to restrict it to audio only effects (i.e., no VSTi or MIDI effects) to avoid inadvertently muting a synth or sampler.
Very cool idea too.
heavymetalmixer is offline   Reply With Quote
Old 03-06-2017, 11:58 AM   #6
Fabian
Human being with feelings
 
Fabian's Avatar
 
Join Date: Sep 2008
Location: Sweden
Posts: 7,416
Default

I made a JSFX for exactly this. Except for the EBR 128, which someone else could maybe put in as an option. The code is here:
Code:
 desc:MF/StageGainerPDC
 /*******************************************************************
 * Tries to adjust the gain of the main channel (1/2) so that the RMS
 * matches that of the RMS of the side channel (3/4). The idea is to have 
 * this last in the FX chain of a track, and feed it with the unprocessed
 * incoming audio on the side channel. Then the StageGainer will adjust the
 * output of the track so that it has the same RMS as the input, even though
 * processing has been applied to the audio
 * 
 * incoming audio                 main (1/2)               out (1/2)
 * ------+---------> FX Chain -------------------> Stage ------------->
 *       |                               +-------> Gainer
 *       |  StageGainer side chain (3/4) |
 *       +-------------------------------+
 */

slider1:100<50,500,10> RMS Window (ms)
slider2:0<0,1,1{Mono,Stereo}> Mode

slider4:0<0,10,0.01> Gain (read only)
slider5:0<0,1,0.01> RMS main (read only)
slider6:0<0,1,0.01> RMS side (read only)
slider7:0<0,2,1{maxSquare,sumSquareAvg,squareSumAvg}> Stereo RMS

@init
// ext_noinit = 1;     // Do not exe this init part on playback start

// Constants for Play State, note that play_state < 0 means error
/* const */ PS_STOPPED = 0;
/* const */ PS_PLAYING = 1;
/* const */ PS_PAUSED = 2;
/* const */ PS_REC = 5;
/* const */ PS_RECPAUSED = 6;

/* const */ MONO_MODE = 0;
/* const */ STEREO_MODE = 1;

/* const */ MAX_SQUARE = 0;
/* const */ SUM_SQUARE_AVG = 1;
/* const */ SQUARE_SUM_AVG = 2;

init_all = -1;     // First time

mainGain = 1;

mainSumSquare = 0;
sideSumSquare = 0;

/*
 * These are three different ways to handle RMS of a stereo signal, x1 being one channel and x2 the other
 ' For mono signals, where x1 == x2, all three give the same result, namely x1*x1.
 */
function maxSquare(x1, x2)
(
	max(x1*x1, x2*x2);
);
function sumSquareAvg(x1, x2)
(
	((x1 * x1) + (x2 * x2)) / 2; 
);
function squareSumAvg(x1, x2)
(
	(x1 + x2) * (x1 + x2) / 4;
);
//ENDBLOCK

@slider
/* const */ RMS_SAMPLES = slider1 * (srate / 1000); // This many samples for the ms window defined by slider1
samplesCount = RMS_SAMPLES;

buf1 = 128; // The first buffer starts here
buf2 = buf1 + 2 * RMS_SAMPLES;
memset(buf2, 0, 2 * RMS_SAMPLES);       // clear the initial output buffer

left = 0;
right = 1;
curr_in = buf1;
curr_out = buf2;

pdc_delay = RMS_SAMPLES;
pdc_bot_ch = 0; // tells REAPER we delay the first two channels (spl0/spl1).
pdc_top_ch = 2; 

mode = slider2;
stereoRMS = slider7;

// ENDBLOCK

@block
samplesDone = RMS_SAMPLES - samplesCount;
(samplesDone == 0) ? samplesDone = 1;     // This should happen very seldom

slider4 = mainGain;
slider5 = sqrt(mainSumSquare) / samplesDone;
slider6 = sqrt(sideSumSquare) / samplesDone;

//ENDBLOCK

@sample

(play_state == PS_PLAYING || play_state == PS_REC) ?
(
	(mode == MONO_MODE) ?
	(
		// In MONO_MODE, use only the left channels
		mainSumSquare += maxSquare(spl0, spl0);
		sideSumSquare += maxSquare(spl2, spl2);
	):
	(mode == STEREO_MODE) ?
	(
		// In STEREO_MODE, we use both channels, but have three different ways to combine stereo data to single RMS streams
		(stereoRMS == MAX_SQUARE) ?
		(
			mainSumSquare += maxSquare(spl0, spl1); 
			sideSumSquare += maxSquare(spl2, spl3);
		):
		(stereoRMS == SUM_SQUARE_AVG) ?
		(
			mainSumSquare += sumSquareAvg(spl0, spl1); 
			sideSumSquare += sumSquareAvg(spl2, spl3);
			
		):
		(stereoRMS == SQUARE_SUM_AVG) ?
		(
			mainSumSquare += squareSumAvg(spl0, spl1); 
			sideSumSquare += squareSumAvg(spl2, spl3);
		);
	);
	
	curr_in[left] = spl0;
	curr_in[right] = spl1;
	
	spl0 = mainGain * curr_out[left];
	spl1 = mainGain * curr_out[right];     
	
	left += 2;
	right += 2;
	samplesCount -= 1;     // One down...
	
	(samplesCount == 0) ?     // Is it time to update mainGain?
	(
		// If main input stops mainSumSquare goes to zero, so we limit mainGain to 10
		// It should not really be a problem, since then spl0 == spl1 == 0, anyway,
		// But better safe than sorry...
		mainGain = min(sqrt(sideSumSquare / mainSumSquare), 10);
		samplesCount = RMS_SAMPLES;
		mainSumSquare = 0;
		sideSumSquare = 0;
		
		// samplesCount == 0, always happens exactly when left == 2 * RMS_SAMPLES. It does, doesn't it...? It should!
		// Note that this relies on that RMS_SAMPLES can never be 0 (compare BUFLEN of PDC_canceller)
		// (left != 2 * RMS_SAMPLES) ?
		
		// swap(curr_in, curr_out);
		temp = curr_in;
		curr_in = curr_out;
		curr_out = temp;

		left = 0;
		right = 1;          
	);
	

);
//ENDBLOCK
__________________
// MVHMF
I never always did the right thing, but all I did wasn't wrong...
Fabian is offline   Reply With Quote
Old 03-06-2017, 11:58 AM   #7
earforce
Human being with feelings
 
earforce's Avatar
 
Join Date: Jan 2015
Posts: 135
Default

Quote:
Originally Posted by pcartwright View Post
First, this would be great.

Second, I think it would be possible to do this for any plugin if you implement the feature in the FX window itself.

The chain would look something like this:
Code:
Track input audio -> 
FX Window Input -> 
[ Loudness Processing Input -> 
Effect 1 Input -> 
Effect 1 Output -> 
Loudness Adjustment ] -> 
[ Loudness Processing Input -> 
Effect 2 Input -> 
Effect 2 Output -> 
Loudness Adjustment ] -> 
... -> 
FX Window Output
To summarize, Reaper itself would analyze the audio in and make adjustments on the audio out instead of the plugin. That way, any plugin could have this feature.

You would need to restrict it to audio only effects (i.e., no VSTi or MIDI effects) to avoid inadvertently muting a synth or sampler.
yeah, really great idea!
+ 2
earforce is offline   Reply With Quote
Old 03-06-2017, 12:22 PM   #8
vanhaze
Human being with feelings
 
vanhaze's Avatar
 
Join Date: Jul 2012
Location: Netherlands
Posts: 5,247
Default

I'm in, neat idea indeed !
__________________
Macbook Pro INTEL | Reaper, always latest version | OSX Ventura | Presonus Studio 24c
My Reaper Tips&Tricks YouTube Channel: https://www.youtube.com/user/vanhaze2000/playlists
vanhaze is offline   Reply With Quote
Old 03-06-2017, 12:36 PM   #9
heavymetalmixer
Human being with feelings
 
Join Date: Mar 2017
Posts: 60
Default

Quote:
Originally Posted by Fabian View Post
I made a JSFX for exactly this. Except for the EBR 128, which someone else could maybe put in as an option. The code is here:
Code:
 desc:MF/StageGainerPDC
 /*******************************************************************
 * Tries to adjust the gain of the main channel (1/2) so that the RMS
 * matches that of the RMS of the side channel (3/4). The idea is to have 
 * this last in the FX chain of a track, and feed it with the unprocessed
 * incoming audio on the side channel. Then the StageGainer will adjust the
 * output of the track so that it has the same RMS as the input, even though
 * processing has been applied to the audio
 * 
 * incoming audio                 main (1/2)               out (1/2)
 * ------+---------> FX Chain -------------------> Stage ------------->
 *       |                               +-------> Gainer
 *       |  StageGainer side chain (3/4) |
 *       +-------------------------------+
 */

slider1:100<50,500,10> RMS Window (ms)
slider2:0<0,1,1{Mono,Stereo}> Mode

slider4:0<0,10,0.01> Gain (read only)
slider5:0<0,1,0.01> RMS main (read only)
slider6:0<0,1,0.01> RMS side (read only)
slider7:0<0,2,1{maxSquare,sumSquareAvg,squareSumAvg}> Stereo RMS

@init
// ext_noinit = 1;     // Do not exe this init part on playback start

// Constants for Play State, note that play_state < 0 means error
/* const */ PS_STOPPED = 0;
/* const */ PS_PLAYING = 1;
/* const */ PS_PAUSED = 2;
/* const */ PS_REC = 5;
/* const */ PS_RECPAUSED = 6;

/* const */ MONO_MODE = 0;
/* const */ STEREO_MODE = 1;

/* const */ MAX_SQUARE = 0;
/* const */ SUM_SQUARE_AVG = 1;
/* const */ SQUARE_SUM_AVG = 2;

init_all = -1;     // First time

mainGain = 1;

mainSumSquare = 0;
sideSumSquare = 0;

/*
 * These are three different ways to handle RMS of a stereo signal, x1 being one channel and x2 the other
 ' For mono signals, where x1 == x2, all three give the same result, namely x1*x1.
 */
function maxSquare(x1, x2)
(
	max(x1*x1, x2*x2);
);
function sumSquareAvg(x1, x2)
(
	((x1 * x1) + (x2 * x2)) / 2; 
);
function squareSumAvg(x1, x2)
(
	(x1 + x2) * (x1 + x2) / 4;
);
//ENDBLOCK

@slider
/* const */ RMS_SAMPLES = slider1 * (srate / 1000); // This many samples for the ms window defined by slider1
samplesCount = RMS_SAMPLES;

buf1 = 128; // The first buffer starts here
buf2 = buf1 + 2 * RMS_SAMPLES;
memset(buf2, 0, 2 * RMS_SAMPLES);       // clear the initial output buffer

left = 0;
right = 1;
curr_in = buf1;
curr_out = buf2;

pdc_delay = RMS_SAMPLES;
pdc_bot_ch = 0; // tells REAPER we delay the first two channels (spl0/spl1).
pdc_top_ch = 2; 

mode = slider2;
stereoRMS = slider7;

// ENDBLOCK

@block
samplesDone = RMS_SAMPLES - samplesCount;
(samplesDone == 0) ? samplesDone = 1;     // This should happen very seldom

slider4 = mainGain;
slider5 = sqrt(mainSumSquare) / samplesDone;
slider6 = sqrt(sideSumSquare) / samplesDone;

//ENDBLOCK

@sample

(play_state == PS_PLAYING || play_state == PS_REC) ?
(
	(mode == MONO_MODE) ?
	(
		// In MONO_MODE, use only the left channels
		mainSumSquare += maxSquare(spl0, spl0);
		sideSumSquare += maxSquare(spl2, spl2);
	):
	(mode == STEREO_MODE) ?
	(
		// In STEREO_MODE, we use both channels, but have three different ways to combine stereo data to single RMS streams
		(stereoRMS == MAX_SQUARE) ?
		(
			mainSumSquare += maxSquare(spl0, spl1); 
			sideSumSquare += maxSquare(spl2, spl3);
		):
		(stereoRMS == SUM_SQUARE_AVG) ?
		(
			mainSumSquare += sumSquareAvg(spl0, spl1); 
			sideSumSquare += sumSquareAvg(spl2, spl3);
			
		):
		(stereoRMS == SQUARE_SUM_AVG) ?
		(
			mainSumSquare += squareSumAvg(spl0, spl1); 
			sideSumSquare += squareSumAvg(spl2, spl3);
		);
	);
	
	curr_in[left] = spl0;
	curr_in[right] = spl1;
	
	spl0 = mainGain * curr_out[left];
	spl1 = mainGain * curr_out[right];     
	
	left += 2;
	right += 2;
	samplesCount -= 1;     // One down...
	
	(samplesCount == 0) ?     // Is it time to update mainGain?
	(
		// If main input stops mainSumSquare goes to zero, so we limit mainGain to 10
		// It should not really be a problem, since then spl0 == spl1 == 0, anyway,
		// But better safe than sorry...
		mainGain = min(sqrt(sideSumSquare / mainSumSquare), 10);
		samplesCount = RMS_SAMPLES;
		mainSumSquare = 0;
		sideSumSquare = 0;
		
		// samplesCount == 0, always happens exactly when left == 2 * RMS_SAMPLES. It does, doesn't it...? It should!
		// Note that this relies on that RMS_SAMPLES can never be 0 (compare BUFLEN of PDC_canceller)
		// (left != 2 * RMS_SAMPLES) ?
		
		// swap(curr_in, curr_out);
		temp = curr_in;
		curr_in = curr_out;
		curr_out = temp;

		left = 0;
		right = 1;          
	);
	

);
//ENDBLOCK
Could you get something useful out of the TBProAudio AB Level Matching JSFX?
They also have an EBR 128 JSFX but I'm not sure what does it work for: http://www.tb-software.com/TBProAudio/ab_lmjsfx.html
heavymetalmixer is offline   Reply With Quote
Old 03-06-2017, 01:02 PM   #10
grinder
Human being with feelings
 
grinder's Avatar
 
Join Date: Jan 2009
Location: New Zealand
Posts: 2,905
Default

I should have put this Heavymetalmixer just adding to your mix as it were.

I think if you are asking this question of Reaper plugins you "COULD" also ask the question of all makes of plugins.

Grinder

Thing is what goes on in the Reaper forum goes into most of the forums around the world!
grinder is offline   Reply With Quote
Old 03-06-2017, 01:45 PM   #11
DaveKeehl
Human being with feelings
 
DaveKeehl's Avatar
 
Join Date: Nov 2015
Location: Switzerland
Posts: 1,966
Default

I didn't see this request and I asked for the same thing a second ago! Yes I would love it!
__________________
REAPER Contest
DaveKeehl is offline   Reply With Quote
Old 03-06-2017, 02:12 PM   #12
Fabian
Human being with feelings
 
Fabian's Avatar
 
Join Date: Sep 2008
Location: Sweden
Posts: 7,416
Default

Quote:
Originally Posted by heavymetalmixer View Post
Could you get something useful out of the TBProAudio AB Level Matching JSFX?
They also have an EBR 128 JSFX but I'm not sure what does it work for: http://www.tb-software.com/TBProAudio/ab_lmjsfx.html
I can look into it...

As it is now, my JSFX works rather neatly for me. It calculates the RMS of the signal before (coming in on the side chain, channels 3/4) and after (coming in on the main, channels 1/2) the intermediate FX chain, and then divides the two to get the gain to apply to the output (channels 1/2).

If you want to try it you have to split the signal into both channels 1/2 and channels 3/4 before the intermediate FX chain (I use Volume Mixer for that), and then let channels 1/2 go through the intermediate FX chain while channels 3/4 go directly to my StageGainerPDC JSFX.

EDIT: Looking at the TBProAudio AB Level Matching JSFX, it looks as if it does the exact same thing as my JSFX do, except for being more advanced in the RMS calculations and the GUI. I'll compare when I have a little time over. Thanks for the tip.
__________________
// MVHMF
I never always did the right thing, but all I did wasn't wrong...
Fabian is offline   Reply With Quote
Old 03-06-2017, 03:01 PM   #13
haervo
Human being with feelings
 
Join Date: Mar 2016
Posts: 481
Default

Question: if RMS and/or EBU is used for measurement wont that raise the latency? For it has to measure over a period of time, so no realtime-processing can be done? Right?

As fasr as I experienced the working of make-up in Toneboosters EQ it is calculated from the settings of the EQ, not through measuring and comparing input and output.

Or did I get something completely wrong in regards of the principle how thia all works?
__________________
"Dear Americans... I told you so. Sincerely, your Aldous Huxley"
haervo is offline   Reply With Quote
Old 03-06-2017, 03:50 PM   #14
heavymetalmixer
Human being with feelings
 
Join Date: Mar 2017
Posts: 60
Default

Quote:
Originally Posted by haervo View Post
Question: if RMS and/or EBU is used for measurement wont that raise the latency? For it has to measure over a period of time, so no realtime-processing can be done? Right?

As fasr as I experienced the working of make-up in Toneboosters EQ it is calculated from the settings of the EQ, not through measuring and comparing input and output.

Or did I get something completely wrong in regards of the principle how thia all works?
Well, that's one of the reasons I think the feature I want needs to be a button so it can be switched ON and OFF. This feature is for mixing and mastering sp PDC could be applied (as Reaper already does), not something you would use while recording to monitor.

PD: You mentioned RMS and that's an average sound pressure unit, it's equal in EBU would be the "LUFS" that measures the average perceived loudness, and it's the base for this feature request.
heavymetalmixer is offline   Reply With Quote
Old 03-06-2017, 04:01 PM   #15
haervo
Human being with feelings
 
Join Date: Mar 2016
Posts: 481
Default

Quote:
Originally Posted by heavymetalmixer View Post
Well, that's one of the reasons I think the feature I want needs to be a button so it can be switched ON and OFF. This feature is for mixing and mastering sp PDC could be applied (as Reaper already does), not something you would use while recording to monitor.

PD: You mentioned RMS and that's an average sound pressure unit, it's equal in EBU would be the "LUFS" that measures the average perceived loudness, and it's the base for this feature request.
Well, OK, thats right. Shouldnt be used in tracking, that makes sense.

The EBU thing is a little more complicated, there are 3 time segments in which its measured. Let alone the gating. So this would be a great concern not only because of latency, which is, as you pointed out, meaningless while mixing and mastering, but in handling such things as to measure things about a span of 30 seconds. It would have to be a 2-pass-measurement in case of EBU 128, which means, every time you touch the EQ or comp you have to do the measurement again. Hm. Maybe it should stick to simply RMS, or calculate like Tonebooster does does with its EQ.
__________________
"Dear Americans... I told you so. Sincerely, your Aldous Huxley"
haervo is offline   Reply With Quote
Old 03-06-2017, 05:48 PM   #16
heavymetalmixer
Human being with feelings
 
Join Date: Mar 2017
Posts: 60
Default

I just checked the Melda MEqualizer, and the feature I want is basically that. Now, I don't know if these guys use LUFS or just RMS because the program doesn't specifies (and in my opinion they're not exactly good doing specific-plugins documentation).
heavymetalmixer is offline   Reply With Quote
Old 03-06-2017, 11:00 PM   #17
mpl
Human being with feelings
 
mpl's Avatar
 
Join Date: Oct 2013
Location: Moscow, Russia
Posts: 3,960
Default

JSFX have "serialize" function. Maybe it can be used almost same as Fabian solution. Like this:

>> FX Chain start

- JSFX which store input RMS into some external state
- Some plugin
- Some other plugin
- JSFX which get output RMS and calculate/subtract difference beetween current RMS and stored RMS

<< FX Chain end
mpl is offline   Reply With Quote
Old 03-06-2017, 11:52 PM   #18
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Would this really be possible in a straight forward way ?

I suppose the loudness calculation only can be done on an existing audio stream and would take a decent count of samples to do (supposedly minimum a full wave of the deepest frequency to be considered). only after that delay the loudness values can be compared and the effect volume could be tweaked. So the thing would work as an "parameter feedback" similar to a compressor with a special sidechian).

At playback the latency imposed could be compensated, but not when using it "live", which might or might not be a problem.

-Michael
mschnell is offline   Reply With Quote
Old 03-07-2017, 05:54 AM   #19
heavymetalmixer
Human being with feelings
 
Join Date: Mar 2017
Posts: 60
Default

Quote:
Originally Posted by mpl View Post
JSFX have "serialize" function. Maybe it can be used almost same as Fabian solution. Like this:

>> FX Chain start

- JSFX which store input RMS into some external state
- Some plugin
- Some other plugin
- JSFX which get output RMS and calculate/subtract difference beetween current RMS and stored RMS

<< FX Chain end
The problem on doing it this way is that it falls in a Gain staging mistake: Because some signals could become louder after being procesed, the next plugins could distort the signal (for instance, there are plugins that start distorting audio if its RMS is higher than -18dBFS).

So, what I'm trying to say, is that is necessary to level match loudness after every plugin in the chain.

Last edited by heavymetalmixer; 03-07-2017 at 06:07 AM.
heavymetalmixer is offline   Reply With Quote
Old 03-07-2017, 08:06 AM   #20
chip mcdonald
Human being with feelings
 
chip mcdonald's Avatar
 
Join Date: May 2006
Location: NA - North Augusta South Carolina
Posts: 4,294
Default

I see a day when certain functions are baked into DAWS:

Choice of level normalization in FX chains;
Auto "fader normalization" to 2 bus 0;
Splits/insert per plugin (as Reaper has a mix knob for each).

This kind of thing strikes me as "audio housekeeping" tasks that,just like a DAW lets you mix levels - you assume such a thing - all other level tasks should be in there as well.
__________________
]]] guitar lessons - www.chipmcdonald.com [[[
WEAR A FRAKKING MASK!!!!
chip mcdonald is offline   Reply With Quote
Old 03-07-2017, 10:44 AM   #21
RJHollins
Human being with feelings
 
Join Date: Dec 2011
Posts: 2,161
Default

Quote:
Originally Posted by heavymetalmixer View Post
The problem on doing it this way is that it falls in a Gain staging mistake: Because some signals could become louder after being procesed, the next plugins could distort the signal (for instance, there are plugins that start distorting audio if its RMS is higher than -18dBFS).

So, what I'm trying to say, is that is necessary to level match loudness after every plugin in the chain.
And this makes it difficult to AUTO control/adjust an FX Chain.

If each plugin is being adjusted ... the first plugins are changing, and this affects all the following plugs [which are changing]. Levels could be jumping all over the place.

There would be a need to prioritize LEVELS from the 1st plugin down. How that would be done ?!?
RJHollins is online now   Reply With Quote
Old 03-07-2017, 11:08 AM   #22
heavymetalmixer
Human being with feelings
 
Join Date: Mar 2017
Posts: 60
Default

Quote:
Originally Posted by RJHollins View Post
And this makes it difficult to AUTO control/adjust an FX Chain.

If each plugin is being adjusted ... the first plugins are changing, and this affects all the following plugs [which are changing]. Levels could be jumping all over the place.

There would be a need to prioritize LEVELS from the 1st plugin down. How that would be done ?!?
I see you're talking about all the plugins chaging output levels at the same time, but I think it would be better in a "serial" way: Until the loudness match isn't ready for the first plugin output, the second won't be able to start doing it and so on.

Also, if a plugin already had its loudness match finished then it shouldn't be doing it again, unless a modification in the plugin is made.
heavymetalmixer is offline   Reply With Quote
Old 03-07-2017, 01:24 PM   #23
lachrimae
Human being with feelings
 
lachrimae's Avatar
 
Join Date: May 2010
Location: Austin, TX
Posts: 791
Default

Hornet's VU Meter MK3 utilizes groups that can be triggered to auto-adjust levels (stopping the transport resets the Auto button so that it's no longer making adjustments).

https://streamable.com/rv6mp

If Reaper could add an invisible Peak/VU adjustment between each VST it would be incredibly powerful...


Last edited by lachrimae; 03-07-2017 at 01:40 PM. Reason: Vol knob should be pre-VST | VU/Peak Adjustment post-VST (maybe... not sure)
lachrimae is offline   Reply With Quote
Old 03-16-2017, 04:35 PM   #24
heavymetalmixer
Human being with feelings
 
Join Date: Mar 2017
Posts: 60
Default

Quote:
Originally Posted by Fabian View Post
I can look into it...

As it is now, my JSFX works rather neatly for me. It calculates the RMS of the signal before (coming in on the side chain, channels 3/4) and after (coming in on the main, channels 1/2) the intermediate FX chain, and then divides the two to get the gain to apply to the output (channels 1/2).

If you want to try it you have to split the signal into both channels 1/2 and channels 3/4 before the intermediate FX chain (I use Volume Mixer for that), and then let channels 1/2 go through the intermediate FX chain while channels 3/4 go directly to my StageGainerPDC JSFX.

EDIT: Looking at the TBProAudio AB Level Matching JSFX, it looks as if it does the exact same thing as my JSFX do, except for being more advanced in the RMS calculations and the GUI. I'll compare when I have a little time over. Thanks for the tip.
Any progress with that script or the TB is more than enough?
heavymetalmixer is offline   Reply With Quote
Old 03-16-2017, 08:04 PM   #25
RDBOIS
Banned
 
Join Date: Feb 2016
Location: It changes
Posts: 1,425
Default

Quote:
Originally Posted by heavymetalmixer View Post
Could you get something useful out of the TBProAudio AB Level Matching...[/url]
I was going to say that, but you said it first.

I'd like to add something I've been looking into today, perhaps it can be useful (it's not for A/B, but for gain staging or Mastering:

I downloaded dpMeter II, a precise digital audio multi channel meter including RMS,
EBUR128 and TruePeak measurement.

dpMeter II offers following features:

• click-free 64-bit internal processing
• measurement modes: RMS/EBU R128
• multi channel metering: 2-6 RMS channels, 2.0 stereo, 4.0, 4.1 and 5.1 surround
• RMS: integrated, momentary, peak and true peak
• EBU R128: integrated, momentary, short term, true pack and loudness range
• true peak measurement based on ITU 1770
• ITU1170/A/B/C/M-weighting filter
• continuous/synced measurement
• record metering results as automation data
• large and accurate live meters
• adjustable pre-gain
• manual loudness/peak/TP match with given reference level
• loudness offset mode

In case you missed it:

• record metering results as automation data

What this means is that you can WRITE (print) the output of the meter to a track envelope. I've only begun experimenting with the potential of this feature, but what I did today was:

1) Set the dpMeter II to EBU R128 to -14.
2) Clicked AUTO (for automation data)
3) Selected WRITE in the track
4) Checked the box of the OUTPUT I wanted to see (e.g. EBU R128 momentary)
5) Played the track

Then

6) Copied all the points of the envelope
7) Pasted them in the VOLUME envelope
8) Selected INVERSE the points
9) Put back to READ/TRIM
10) Played the track

What this did was it applied the inverse of the loudness departures from the -14 baseline. I check the output with the meter and it did smooth out the loudness of the track to near -14. I think I need to try more stuff, like moving/nudging the envelope a bit, because I think the copy / paste, as is, may not be a precise fit due to response time or integration of the meter reading input signal. I don't know yet.

I'm just experimenting. What I like about TBProAudio plugins is the capacity to view the output data in envelopes. What you do with it is up to your imagination.

Myself, I'm trying to find a "hands on" way to smooth out a track according to "perceived loudness" without having to rely on black box compression plugins, or always having to manually create envelopes. I'm not saying that I always want an instrument or vocal to be 100% on cue to a precise loudness value, but it would be nice to know that, from a technical point of view I can make all equal, raise, or lower with precision especially given I have poor monitors and/or ear fatigue.

Little by little I'm taming this beast.
RDBOIS is offline   Reply With Quote
Old 04-12-2018, 01:00 AM   #26
vitalker
Human being with feelings
 
vitalker's Avatar
 
Join Date: Dec 2012
Posts: 13,333
Default

@Fabian, yeah, any progress on this?
vitalker is offline   Reply With Quote
Old 04-12-2018, 10:33 AM   #27
Fabian
Human being with feelings
 
Fabian's Avatar
 
Join Date: Sep 2008
Location: Sweden
Posts: 7,416
Default

Quote:
Originally Posted by vitalker View Post
@Fabian, yeah, any progress on this?
Oh... I promised to do something? Sorry, no I haven't, but I have it on the todo-list.

Currently I use my StageGainerPDC quite a lot and it works for me. But yeah, I guess using LUFS instead of RMS would be better.

Are people really using it? Hm... that might be extra incentive to actually look into LUFS calculations.
__________________
// MVHMF
I never always did the right thing, but all I did wasn't wrong...
Fabian is offline   Reply With Quote
Old 04-12-2018, 11:03 AM   #28
vitalker
Human being with feelings
 
vitalker's Avatar
 
Join Date: Dec 2012
Posts: 13,333
Default

Quote:
Originally Posted by Fabian View Post
Are people really using it?
It works for me almost perfectly, thank you!!! Maybe when you'll change claculations to LUFS, it will be perfect? I hope...
vitalker is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 11:12 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.