|
|
|
12-07-2021, 03:33 PM
|
#1
|
Human being with feelings
Join Date: Dec 2021
Posts: 5
|
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?
|
|
|
12-09-2021, 02:06 PM
|
#2
|
Human being with feelings
Join Date: Aug 2015
Posts: 2,969
|
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.
|
|
|
12-11-2021, 09:21 AM
|
#3
|
Human being with feelings
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,690
|
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
|
|
|
12-11-2021, 03:13 PM
|
#4
|
Human being with feelings
Join Date: Aug 2015
Posts: 2,969
|
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...
|
|
|
12-12-2021, 04:16 PM
|
#5
|
Human being with feelings
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,690
|
Quote:
Originally Posted by jrk
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
|
|
|
12-13-2021, 02:57 AM
|
#6
|
Human being with feelings
Join Date: Jan 2007
Location: Europe
Posts: 36
|
Quote:
Originally Posted by mschnell
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.
|
|
|
12-13-2021, 03:05 PM
|
#7
|
Human being with feelings
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,690
|
Quote:
Originally Posted by jules
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
|
|
|
12-14-2021, 06:35 AM
|
#8
|
Human being with feelings
Join Date: Jan 2007
Location: Europe
Posts: 36
|
Quote:
Originally Posted by mschnell
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.
|
|
|
12-14-2021, 06:49 AM
|
#9
|
Human being with feelings
Join Date: Feb 2006
Location: decepticon mothership in a hidden place inside a mountain
Posts: 3,754
|
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/
|
|
|
12-14-2021, 08:47 AM
|
#10
|
Human being with feelings
Join Date: Jul 2007
Location: Jazz City
Posts: 5,065
|
Quote:
Originally Posted by jules
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)
|
|
|
12-14-2021, 02:10 PM
|
#11
|
Human being with feelings
Join Date: Dec 2021
Posts: 5
|
Quote:
Originally Posted by mschnell
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!
|
|
|
12-14-2021, 04:20 PM
|
#12
|
Human being with feelings
Join Date: Aug 2015
Posts: 2,969
|
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.
|
|
|
12-15-2021, 01:12 AM
|
#13
|
Human being with feelings
Join Date: Jan 2007
Location: Europe
Posts: 36
|
Thanks a lot Jrk!
|
|
|
12-15-2021, 02:57 PM
|
#14
|
Human being with feelings
Join Date: Dec 2021
Posts: 5
|
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"?
|
|
|
12-16-2021, 12:40 AM
|
#16
|
Human being with feelings
Join Date: Aug 2015
Posts: 2,969
|
Quote:
Originally Posted by Longo
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.
|
|
|
12-16-2021, 02:53 PM
|
#17
|
Human being with feelings
Join Date: Dec 2021
Posts: 5
|
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;
|
|
|
12-17-2021, 12:18 AM
|
#18
|
Human being with feelings
Join Date: Aug 2015
Posts: 2,969
|
Quote:
Originally Posted by Longo
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.
|
|
|
12-21-2021, 01:35 PM
|
#19
|
Human being with feelings
Join Date: Dec 2021
Location: Christchurch, New Zealand
Posts: 2
|
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);
|
|
|
12-22-2021, 12:38 PM
|
#20
|
Human being with feelings
Join Date: Aug 2015
Posts: 2,969
|
Quite so.
__________________
it's meant to sound like that...
|
|
|
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
HTML code is Off
|
|
|
All times are GMT -7. The time now is 01:56 AM.
|