Pioneer/Traktor style Dj Filter


#1

I'm tring to build a "dj" filter like found on pioneer mixers or software like traktor.

Basically if you turn to the left it'a low cut and to the right a high cut filter.
Since SVF has outlets for all the filter moders I thought it's a nice one to use it for building it.

Here is what I got:

dj filter 2_0_1.axs (5.6 KB)

It kind of works but I have 2 problems:

  1. There is a little tick when going from middle position to the left. It propably comes from switching from one filter to the other. I tried smoothing on both the filter mod input and the crossfade between lp and hp but that didnt really work.

  2. When using a hp the range doesn't go up to 20khz. I believe this was a common problem with axolotis filters, and I wonder if anyone has fixed it maybe?


#2

Can't you just use a multi-mode filter that has both a HP and LP out and then just fade between those outs?


#3

No I want each half of the knob to be the fullrange of each filter, with the middle position being neutral.


#4

You can still use a multi-mode filter setup, just halve the scale so they are both at max value at the center rather then at each end.
So you start with..
0 to 127 - filter 1
127 to 0 - filter 2
becomes
0 to 63 - filter 1 then retained to 127
127 to 64 - filter 2 then retained to 0


#5

Yes this is what I did and it works but I got this click when going from one filter to the either even though I'm crossfading.

This might be connected to my second problem

Since the lp filter cuts doesn't go to 20khz but only 13khz it cuts a bit high frequencies and therefore sounds different the hp, thus resulting in a click when switching?


#6

Update:
Got a solution that's less clicky, I use a mux to switch between lp netrual and hp. But you still recognize differences in sound when engaging one of the filters. The weird thing is that the lp boosts some of the highs when engaged. is that maybe because the SVF has a little peak even with 0 resonance?

dj filter 3_0_2.axs (6.1 KB)

What I had before was a crossfade between both filters with middle position of knob resulting in a 50/50 mix of both outputs but that sounded weird, so I came up with this.
Crossfading between filtered and unfiltered woul propably smoothen the transition but I didn'T come up with an efficient solution yet.


#7

Good you found an improvement, my thought was that at complete center, there would be zero filter applied on either, so in theory if no filter is applied then their shouldn't be a click.
I'll need to look into this one as well, because this is something I wanted to have controlled by an expression pedal.
:thinking:


#8

While applying the subpatch to my mainpatches I realized that I still got clicking. Still not really ideal.

In another setup I use an expression pedal for filter as well. I have a button to turn the filter on and off and even with the pedal in "neutral" position the difference in sound is quite noticable when turning on the filter.

I would really love to have filters that are more neutral when in an "open" position.


#9

I am know where near my Axo to confirm this nor be too specific, but this is what I would try and assemble. You are not switching between filters at all.
Create an object with a bipolar dial, and scale values -64 to 0 to 64. (dial1) or similar etc..
2 outputs, output1 and output2. The outputs are then connected to each filter.
code..
if(dial1 < 0) {
output1 = dial1 * -2;
} else {
output1 = 0;
}
if(dial1 > 0) {
output2 = dial1 * 2;
} else {
output2 = 0;
}


#10

Was just looking at 2 factory filters, the basic first order lp and hp.
With both of them set to zero, they both still have a different sounding output that would be enough to have a very noticable step.
Maybe this is simillar to what you are experiencing. So I think the trick then is to find a way to get it to fade realy quickly from one to the other other then switch. So would need to find a way to smooth transition from one filter to the other, so first thoughts are an object that triggers a fast fader, not too fast to create unwanted sound, or there is some kind of fade in starting well before the value gets to zero.
There are some contributor objects that refer to having some smoothing available, but needs testing, one that seemed interesting was "tiar/mux", there is only one object there. Maybe can find some ideas in there.
:thinking:


#11

Hi gavin thanks for looking into this!

I think you are right the filters do indeed change the sound even when in an open position, this is what I already noticed with my simple expression pedal setup.

I already experimented with fades by feeding a boolean into a smooth object. So neutral is boolean off, filter on means boolean on, and the smooth will give me the fade time.

The tiar/mux does indeed look interesting, thanks for the tip! As oposed to normal mux with and integer selector it does have float input for that. I'm not sure how that would work, I need to try this out.

EDIT:
I think even with fading there will be noticeble change in sound. the best thing would be to have filters that go up all to 20k as discussed here


#12

Your probably correct with all that.
In the mean time I'm going to work on various smoothing scenarios, because I see this as something that could implemented for all sorts of effects, that is why I am so interested, and I too have thought that different methods outside the standard fader could be consider further changing the how the overall effect is heard. I plan to build 5 expression pedals so I am going to want objects to connect to it.
:wink:


#13

Hi @Blindsmyth ! You gave me a very nice idea, and I put this kind of filter at the end of my loopstation, using the last 1000 free bytes of SRAM...
Here's the way I implemented it, uses 2 crossfades, works like a charm (for me...)
morphilter.axp (5.6 KB)


#14

that looks nice valmir thanks.

Your LP doesn't close completetly, it only goes half it's range.
Also for me efficiency is really an issue which is why I want to avoid 2 filter objects and went for the svf.
The transition is quite smooth though! But I think it's possible to do it with only one crossfade object!


#15

You just need to put the lp pitch dial at minimum to have the full frequency, I forgot to do it, and thinking twice I guess the lp pitch bitshift should be of 2. Anyhow, still two filters and two xfades, pretty big... ah, that ol' SRAM blues...


#16

I think you need an unipolar to bipolar, putting it down would only shift it's half range.

I'm trying now one crossfade, but it's not so easy.


#17

That was fast!
I actually never cleared my head around axo's attributes and parameters, but my thought was this: -64 on the object dial + 64 <<1 (equal 128) gives you the complete range... it's not specified if the object inlet is uni or bi so I assumed uni. I might be totally off though!


#18

I don't know about bitshift or stuff I just hook things up to displays see and listen what happens and make my patching accordingly. But unipolar to bipolar did it.

They need bipolar! So in that sense also your hp doesn't go all the range.


#19

OK, thanks! Time to sleep now, tomorrow I'll hook up some disp oblects and check things out. Good work with your one xfade approach.


#20

An objects inlet is neither unipolar or bipolar, its all mapped within the 7 bit range of 0 to 127. This is why Midi integrates so well. So at the end of the day, its all how you interpret it. A bipolar dial is still controlled between 0 to 127, but it only displays 64 to 0 to -64, the unipolar is 0 to 64 in 0.5 steps, also 0 to 127. You will see all this if you connect an Integer display to a dial and turn it. The cool thing with all this, as long as you get the value you want coming out of the outlet, then the rest is history. When setting it up, be sure to connect and Integer display first so you know what values you are getting, then tweak it from there.
Well that's how I see it at least, I may not have entirely explain it right, but works for me.:yum: I currently busy working on a way of massively increase the pattern size of a seq object that has only 16 steps. :stuck_out_tongue_closed_eyes: