Cockos Incorporated Forums New to JSFX. Here is my Dynamic Low Frequency Limiter proof of concept.
 Register Track Bugs/Feature Requests Search Today's Posts Mark Forums Read

 05-21-2020, 06:08 PM #1 Iain_mf Human being with feelings   Join Date: May 2020 Posts: 2 New to JSFX. Here is my Dynamic Low Frequency Limiter proof of concept. Hello. I have managed to Frankenstein parts together to make an effect that hard limits low-frequencies using the level of high frequencies as a threshold. It's ugly but it works. The idea is that low frequencies tend to mask higher ones, so you can make things clearer if you limit the low frequencies to prevent masking. I have been using it to audiobooks I have downloaded from my library. desc: Dynamic LF limiter import cookdsp.jsfx-inc slider1:1000<100,5000>Cutoff Frequency In Hz slider2:20<1,200>speed Hz slider3:0<-12,12,0.1>threshold offset slider4:-40<-60,0>floor @init // Initializes the filters filt1.butlp(slider1); levelsmooth1.butlp(slider2); levelsmooth2.butlp(slider2); lo_level=hi_level=0; gr1=gr2=1; offset=2 ^ (slider3/6); floor_level=2 ^ (slider4/6); @slider filt1.butlp_set_freq(slider1); levelsmooth1.butlp_set_freq(slider2); levelsmooth2.butlp_set_freq(slider2); offset=2 ^ (slider3/6); floor_level=2 ^ (slider4/6); @sample lo_pass=filt1.butlp_do(spl0); hi_pass=spl0-lo_pass; // filter abs values to get something like RMS level // adjust lo_level by offset as threshold adjustment // floor level means that the effect is not apply to low level signals like noise lo_level= max(levelsmooth1.butlp_do(abs(lo_pass))*offset,flo or_level); hi_level= max(levelsmooth2.butlp_do(abs(hi_pass)),floor_leve l); // Calcualte gain reduction to hard limit lo_level with threhold of hi_level gr1= min((hi_level/lo_level),1); spl0 = (lo_pass*gr1)+hi_pass; spl1 = spl0; I was only using the left input to keep things simple for a beginner like me I used spl1 to output the gain reduction so I could see it on an oscilloscope. That's why the inputs and output are strange. What I would really like it to add gain reduction meter, but when I looked at the code from other plugins I was confused. Is there a step by step guide for gfx? Also, any feedback is most welcome.
05-21-2020, 11:00 PM   #2
junh1024
Human being with feelings

Join Date: Feb 2014
Posts: 151

Quote:
 Originally Posted by Iain_mf What I would really like it to add gain reduction meter, but when I looked at the code from other plugins I was confused. Is there a step by step guide for gfx? Also, any feedback is most welcome.

Have a look at my @gfx section https://github.com/junh1024/Reaper-S...mpressor_6.txt , or Liteon's deesser (GPL) . IIRC you set gr_meter in your code to the gain, & then the gfx updates using that.

Also, does this get better results than ReaXComp for you?

05-22-2020, 12:43 AM   #3
Iain_mf
Human being with feelings

Join Date: May 2020
Posts: 2

Quote:
 Originally Posted by junh1024 Have a look at my @gfx section https://github.com/junh1024/Reaper-S...mpressor_6.txt , or Liteon's deesser (GPL) . IIRC you set gr_meter in your code to the gain, & then the gfx updates using that. Also, does this get better results than ReaXComp for you?
Thanks, I will look into that.

The big difference between this and ReaXcomp is this has a dynamic threshold. The threshold for the low band limiting is the RMS level of the high band.

That means that if the low band's level is higher than the high-band's level the low-band gain is reduced regardless of the level of the low band. Likewise, if the low band is very loud but still quieter than the high band, it will have no gain reduction.

I haven't done extensive testing, but one area that it might be useful to others is controlling proximity effect. If you have a singer that has an inconsistent position to the microphone this, theoretically, will prevent the changes in low-frequency level while maintaining the dynamics.

Edit: Success. You gain reduction meter works! Thanks again.

Last edited by Iain_mf; 05-22-2020 at 01:03 AM.

 05-22-2020, 02:58 AM #4 mschnell Human being with feelings     Join Date: Jun 2013 Location: Krefeld, Germany Posts: 9,014 Nice ! (But supposedly could be done by using the Splitter and the Limiter plugins which come with Reaper). Thanks, -Michael __________________ http://www.boa-sorte.de, http://www.bschnell.de/b

 Thread Tools Display Modes Linear Mode

 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 Rules
 Forum Jump User Control Panel Private Messages Subscriptions Who's Online Search Forums Forums Home REAPER Forums     REAPER General Discussion Forum     newbieland     REAPER Q&A, Tips, Tricks and Howto     Recording Technologies and Techniques     REAPER Compatibility     REAPER Color Themes and Icon Sets     MIDI Hardware, Control Surfaces, and OSC     REAPER Non-English Speaking User Forums         Forum de REAPER en français         Foro de REAPER en Español         Fórum do REAPER em português         Forum di REAPER in italiano         Deutschsprachiges REAPER Userforum         Pyccкоязычный фopyм REAPER     REAPER Bug Reports     REAPER Feature Requests     Dstruct's Casa De Nitpicks     REAPER for Live Use     REAPER for Video Editing/Mangling     REAPER for Ambisonic and 3D positional audio uses     ReaScript, JSFX, REAPER Plug-in Extensions, Developer Forum     REAPER for macOS X     REAPER for Linux     REAPER Pre-Release Discussion     REAPER Music/Collaboration Discussion NINJAM Discussion     NINJAM User Discussion     NINJAM Developer Discussion Other Software Discussion     WDL users forum     LICEcap Discussion     OSCII-bot forum     Old Cockos Products Forum

All times are GMT -7. The time now is 06:23 AM.

 -- Cockos ---- REAPER 5 ---- Reaper 3 ---- Reaper 2 ---- Reaper 1 Contact Us - Çockos Incorporated - Archive - Top