Go Back   Cockos Incorporated Forums > REAPER Forums > REAPER Q&A, Tips, Tricks and Howto

Reply
 
Thread Tools Display Modes
Old 12-07-2021, 03:33 PM   #1
Longo
Human being with feelings
 
Longo's Avatar
 
Join Date: Dec 2021
Posts: 5
Default How to recreate King Tubby's high pass filter in Reaper

Hello, folks!

I am wondering if it is possible to create a High Pass Filter in Reaper that works like an Altec 9069B HPF and control it via MIDI controller. This unit has stepped frequency selection with ten possible cut-offs (70, 100, 150, 250, 500, 1k, 2k, 3k, 5k, 7.5k).

Here is the link to a similar unit: https://www.gearnews.com/king-tubby-...-9069b-filter/

I know that this specific stepped frequency selection effect can be achieved in Ableton using the Audio Effect Rack with Chain Selector and than assigning it to a Macro knob that could be mapped to midi, just like in this video: https://www.youtube.com/watch?v=TumnVWujTtw

But I would really like to know if this can be done in Reaper.

Anybody got a clue?
Longo is offline   Reply With Quote
Old 12-09-2021, 02:06 PM   #2
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

A way of doing this kind of thing would be with a bunch of eq presets (in your EQ of choice) and using ReaControlMidi & a suitable bank file then you could use program change messages to pick the eq presets...

Or, if you've got a continuous controller.... I'm sure someone has a jsfx that'll map CC to program change
__________________
it's meant to sound like that...

Last edited by jrk; 12-09-2021 at 02:18 PM.
jrk is offline   Reply With Quote
Old 12-11-2021, 09:21 AM   #3
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,685
Default

ReaPack Midi CC Table can manage multiple "presets" by outputting CCs defined in a table (text file) when receiving a CC message.

Now you can use "parameter link" to drive ReaEQ parameters by the CC messages.

-Michael
mschnell is online now   Reply With Quote
Old 12-11-2021, 03:13 PM   #4
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

That's neat. I may be getting this wrong, but are you suggesting using your CC Table as a way of quantising a CC to match the (10) steps of the filter the OP refers to?
__________________
it's meant to sound like that...
jrk is offline   Reply With Quote
Old 12-12-2021, 04:16 PM   #5
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,685
Default

Quote:
Originally Posted by jrk View Post
That's neat. I may be getting this wrong, but are you suggesting using your CC Table as a way of quantising a CC to match the (10) steps of the filter the OP refers to?
That would be possible, but I suppose for quantizing there are easier means.
CC Table would more likely be useful to manage complete presets. Up to 128 predefined states of all managed parameters.

BTW.: I suppose ReaLearn can do something like this, too.

-Michael
mschnell is online now   Reply With Quote
Old 12-13-2021, 02:57 AM   #6
jules
Human being with feelings
 
jules's Avatar
 
Join Date: Jan 2007
Location: Europe
Posts: 36
Default

Quote:
Originally Posted by mschnell View Post
That would be possible, but I suppose for quantizing there are easier means.
CC Table would more likely be useful to manage complete presets. Up to 128 predefined states of all managed parameters.

BTW.: I suppose ReaLearn can do something like this, too.

-Michael
Hello Michael,

Would you be so kind as to provide a step by step approach of how it could be done with CC Table and Reaeq, for instance?

Thanks a lot for your help.
jules is offline   Reply With Quote
Old 12-13-2021, 03:05 PM   #7
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,685
Default

Quote:
Originally Posted by jules View Post
Would you be so kind as to provide a step by step approach of how it could be done with CC Table and Reaeq, for instance?
What "it" exactly ?
Did you read the documentation of CC table in ReaPack ?
(BTW.: "Step by Step" does not make much sense with versatile stuff like Reaper and everything associated with same, as any application is different and requires dedicated planing.)

-Michael
mschnell is online now   Reply With Quote
Old 12-14-2021, 06:35 AM   #8
jules
Human being with feelings
 
jules's Avatar
 
Join Date: Jan 2007
Location: Europe
Posts: 36
Default

Quote:
Originally Posted by mschnell View Post
What "it" exactly ?
Did you read the documentation of CC table in ReaPack ?
(BTW.: "Step by Step" does not make much sense with versatile stuff like Reaper and everything associated with same, as any application is different and requires dedicated planing.)

-Michael
Hi Michael,

Thanks for your reply.

"It", in my post, refers to what the orignal poster inquired about: switch between different states/presets of an EQ (Reaeq, for instance)set as a hipass filter at discrete frequencies.

I read the instructions that are in the JS file itself but didn't really understand how to achieve that result, I'm sorry.In that regard, it would be extremely kind of you if you could explain in a slightly more detailed way what you hinted at in your post.

No big deal if you can't

Thanks!

Note to self: It shouldn't be too hard to design a JS FX filter with a slider that jumps through discrete HP cut-off frequencies.




J.
jules is offline   Reply With Quote
Old 12-14-2021, 06:49 AM   #9
sinkmusic
Human being with feelings
 
sinkmusic's Avatar
 
Join Date: Feb 2006
Location: decepticon mothership in a hidden place inside a mountain
Posts: 3,754
Default

Hello,
From what I know, this passive filter is not just a filter, as it also provides a quite strong effect on impedance (changing the cutoff point also changes the impedance, leading to further sonic artifacts).
Audiothing modelled it as a VST plugin :
https://www.audiothing.net/effects/a...e-dub-station/
sinkmusic is offline   Reply With Quote
Old 12-14-2021, 08:47 AM   #10
beingmf
Human being with feelings
 
beingmf's Avatar
 
Join Date: Jul 2007
Location: Jazz City
Posts: 5,065
Default

Quote:
Originally Posted by jules View Post
It shouldn't be too hard to design a JS FX filter with a slider that jumps through discrete HP cut-off frequencies.
You wouldn't even need the whole package I guess ‒ just a slider which puts out stepped values and then controls the appropriate frequency slider in e.g. Filther (JS) via Midi or Parameter Link.
__________________
Windows 10x64 | AMD Ryzen 3700X | ATI FirePro 2100 | Marian Seraph AD2, 4.3.8 | Yamaha Steinberg MR816x
"If I can hear well, then everything I do is right" (Allen Sides)
beingmf is online now   Reply With Quote
Old 12-14-2021, 02:10 PM   #11
Longo
Human being with feelings
 
Longo's Avatar
 
Join Date: Dec 2021
Posts: 5
Default

Quote:
Originally Posted by mschnell View Post
ReaPack Midi CC Table can manage multiple "presets" by outputting CCs defined in a table (text file) when receiving a CC message.

Now you can use "parameter link" to drive ReaEQ parameters by the CC messages.

-Michael
Thanks a lot for the feedback, guys! By now I am pretty sure that it can be done in Reaper, but I must confess I still would not be able to do it by myself, since I have absolutely no familiarity with JS. Even tough, I downloaded Reapack, installed Midi CC Table and, to my surprise, found out that Michael Schnell himself is the author. How cool is that?

That being said, and not wanting to be intrusive, would it be possible for someone to send a step-by-step tutorial on how to do it? It wouldn't even need to have all the parameters mentioned on my original post. A simple example of a table with 2 ReaEQ presets that could be chosen via an external knob from a MIDI controller would be enough. And from there I would edit it to try to emulate the HPF.

And, once again, thanks a lot for making Reaper such a collaborative community!
Longo is offline   Reply With Quote
Old 12-14-2021, 04:20 PM   #12
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

ReaEQ isn't ideal for the job I don't think. The filters aren't quite steep enough. 12db/oct v. 18dB desired.

Also, I suspect Midi CC Table may be overkill.

But like beingmf says, it's pretty much trivial to quantize a slider value with a little jsfx...

Code:
slider1:0<0,127,1>Input
slider2:0<0,127,1>Output

@init
@slider

// ReaEQ approximately
//70  100  150  250  500  1000  2000  3000  5000  7500
//13  18    25   34   47    61    75    83    94   102.5
// or whatever the frequencies are...

slider1 > 100? slider2 = 102.5 :
slider1 > 90 ? slider2 = 94 :
slider1 > 80 ? slider2 = 83 :
slider1 > 70 ? slider2 = 75 :
slider1 > 60 ? slider2 = 61 :
slider1 > 50 ? slider2 = 47 :
slider1 > 40 ? slider2 = 34 :
slider1 > 30 ? slider2 = 25 :
slider1 > 20 ? slider2 = 18 :
slider1 > 10 ? slider2 = 13 : slider2 = 0;
In which case, use your controller to, er, control the input slider (you might want to look at ReaLearn for this). Then you can parameter mod a ReaEQ high pass filter with the output slider. You'd probably want to tweak the bandwidth to get the right kind of thing....


adding tiny clicks when changing steps left as exercise for reader...
E&OE
__________________
it's meant to sound like that...

Last edited by jrk; 12-14-2021 at 05:13 PM.
jrk is offline   Reply With Quote
Old 12-15-2021, 01:12 AM   #13
jules
Human being with feelings
 
jules's Avatar
 
Join Date: Jan 2007
Location: Europe
Posts: 36
Default

Thanks a lot Jrk!
jules is offline   Reply With Quote
Old 12-15-2021, 02:57 PM   #14
Longo
Human being with feelings
 
Longo's Avatar
 
Join Date: Dec 2021
Posts: 5
Default

Thank you very much, jrk! That's so nice of you! It's exactly what I was looking for.

By the way... Is there a chance you could come up with some JS idea regarding the aforementioned "tiny clicks"?
Longo is offline   Reply With Quote
Old 12-15-2021, 03:36 PM   #15
pepe44
Human being with feelings
 
pepe44's Avatar
 
Join Date: Jul 2013
Location: Portugal
Posts: 1,827
Default

For reason users we have the reason rack plugin that can be used inside other DAWs. This looks like what you want.

https://www.reasonstudios.com/shop/b...-filter-suite/

Another option is this one from Audiothing: https://www.audiothing.net/effects/a...e-dub-station/
pepe44 is offline   Reply With Quote
Old 12-16-2021, 12:40 AM   #16
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

Quote:
Originally Posted by Longo View Post
Is there a chance you could come up with some JS idea regarding the aforementioned "tiny clicks"?
Well, I don't know about that, but here's a stepped 18dB/oct filter.
Depends on CookDSP which you'd have to obtain separately:
see http://ajaxsoundstudio.com/cookdspdoc/index.html

Code:
desc:JRK Tubby Filter

import cookdsp.jsfx-inc

in_pin:left
in_pin:right
out_pin:left
out_pin:right


slider1:0<0,127,1>Control
slider2:0<0,7500,1>Stepped

@init

Q = 1.8 ;  // or to taste.

// Initialize
filt1.biquad(slider2, Q, 1);
filt2.biquad(slider2, Q, 1);
filt3.hip(slider2);
filt4.hip(slider2);

@slider
slider1 > 100? f = 7500 :
slider1 > 90 ? f = 5000 :
slider1 > 80 ? f = 3000 :
slider1 > 70 ? f = 2000 :
slider1 > 60 ? f = 1000 :
slider1 > 50 ? f = 500 :
slider1 > 40 ? f = 250 :
slider1 > 30 ? f = 150 :
slider1 > 20 ? f = 100 :
slider1 > 10 ? f = 70 : f = 0;

slider2 = f;

filt1.biquad_set_freq(slider2);
filt2.biquad_set_freq(slider2);

filt3.hip_set_freq(slider2);
filt4.hip_set_freq(slider2);


@sample

//stack the biquad & a first order for 18dB/oct

f > 0 ? (

  spl0 = filt1.biquad_do(spl0);
  spl1 = filt2.biquad_do(spl1);
  spl0 = filt3.hip_do(spl0);
  spl1 = filt3.hip_do(spl1);
  
):
(
  spl0 = spl0  ;
  spl1 = spl1  ;
);
i.e you don't require a separate EQ plugin.
__________________
it's meant to sound like that...

Last edited by jrk; 12-16-2021 at 01:35 AM.
jrk is offline   Reply With Quote
Old 12-16-2021, 02:53 PM   #17
Longo
Human being with feelings
 
Longo's Avatar
 
Join Date: Dec 2021
Posts: 5
Default

Thank you very much Jrk! It seems this year Santa is coming one week ahead for the dubheads looking for a Reaper 3rd order HPF. It works just perfect!

The only changes I've made regard the steps division for the Midi knob. Ahh, also thought it would be cool if automatically cut frequencies under 20Hz even when the knob is fully left.

It goes like this:

slider1 > 126.9? f = 7500 :
slider1 > 114.2 ? f = 5000 :
slider1 > 101.4 ? f = 3000 :
slider1 > 88.6 ? f = 2000 :
slider1 > 75.8 ? f = 1000 :
slider1 > 63 ? f = 500 :
slider1 > 50.2 ? f = 250 :
slider1 > 37.4 ? f = 150 :
slider1 > 24.6 ? f = 100 :
slider1 > 11.8 ? f = 70 : f = 20;
Longo is offline   Reply With Quote
Old 12-17-2021, 12:18 AM   #18
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

Quote:
Originally Posted by Longo View Post

The only changes I've made regard the steps division for the Midi knob. Ahh, also thought it would be cool if automatically cut frequencies under 20Hz even when the knob is fully left.
Excellent. Yeah, the steps are better. You don't need the "f > 0 ?" condition & bypass at the bottom if you keep the filter above 0Hz, but I guess you figured that out.

A neat little project would be to hack a proper knob together from a 11 detent pot & a teensy (or similar) board. https://www.pjrc.com/teensy/td_midi.html
__________________
it's meant to sound like that...

Last edited by jrk; 12-17-2021 at 12:48 AM.
jrk is offline   Reply With Quote
Old 12-21-2021, 01:35 PM   #19
SimeonPilgrim
Human being with feelings
 
Join Date: Dec 2021
Location: Christchurch, New Zealand
Posts: 2
Default

I found this post to be a really nice intro so a number of topics, so thank you.

In return I hope to offer a few code lessons I have learnt so far:

the mapping from the slider1 to filter cut-off, can done as cascade of returning values (as compared to having an assignment in each branch), and thus look a little simpler like so:

Code:
f = slider1 > 126.9 ? 7500 :
    slider1 > 114.2 ? 5000 :
    slider1 > 101.4 ? 3000 :
    slider1 >  88.6 ? 2000 :
    slider1 >  75.8 ? 1000 :
    slider1 >  63.0 ?  500 :
    slider1 >  50.2 ?  250 :
    slider1 >  37.4 ?  150 :
    slider1 >  24.6 ?  100 :
    slider1 >  11.8 ?   70 : 20;
which means f can be fully dropped as slider2 only needs to be assigned to once and then we could swap the use of checking f to control the filter being on/off later could happen, but also given we always have a filter active with the value of 20 being used, this latter check can also be removed. Also changing the defaults for slider2 to be inside the accepted bounds gives:

Code:
desc:JRK Tubby Filter

import cookdsp.jsfx-inc

in_pin:left
in_pin:right
out_pin:left
out_pin:right


slider1:0<0,127,1>Control
slider2:20<20,7500,1>Stepped

@init

Q = 1.8 ;  // or to taste.

// Initialize
filt1.biquad(slider2, Q, 1);
filt2.biquad(slider2, Q, 1);
filt3.hip(slider2);
filt4.hip(slider2);

@slider
slider2 = slider1 > 126.9 ? 7500 :
          slider1 > 114.2 ? 5000 :
          slider1 > 101.4 ? 3000 :
          slider1 >  88.6 ? 2000 :
          slider1 >  75.8 ? 1000 :
          slider1 >  63.0 ?  500 :
          slider1 >  50.2 ?  250 :
          slider1 >  37.4 ?  150 :
          slider1 >  24.6 ?  100 :
          slider1 >  11.8 ?   70 : 20;

filt1.biquad_set_freq(slider2);
filt2.biquad_set_freq(slider2);
filt3.hip_set_freq(slider2);
filt4.hip_set_freq(slider2);


@sample
//stack the biquad & a first order for 18dB/oct
spl0 = filt1.biquad_do(spl0);
spl1 = filt2.biquad_do(spl1);
spl0 = filt3.hip_do(spl0);
spl1 = filt3.hip_do(spl1);
SimeonPilgrim is offline   Reply With Quote
Old 12-22-2021, 12:38 PM   #20
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

Quite so.
__________________
it's meant to sound like that...
jrk 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 01:33 AM.


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