About delays and Knobs Problem

Hello everyone,
I’ve got a really annoying problem with my OWL Pedal: when I plug (in gen~) any of the 4 knobs to control the delay time of a delay object the sound is wobbly until I set the block size to 2 on the Owl Control. If I disconnect the knob the wobble stops. Of course I set the slide object to smooth the values, but the wobble is also when the knob is fixed in any position. I noticed that if I clip the output of the knob let’s say to 0.2 0.8 the wobbling disappears on both limits (0 - 1) of the knob but suddenly appears again when the value of the clip is reached (0.2 to 0.8). So I think that the problem is about the translation cv signal (or signal at control rate speed, I don’t know how knobs talks to the dsp) to audio rate signal. I’ve got Firmware v14 loaded.

Any suggestion to fix the problem ?

Thanks

P.S: Is it possible to set the block size directly in a gen patch ?

Because the ADCs that read the knob values are quite noisy, the parameter value will never stay exactly still without some filtering.
A few firmware versions ago we changed the default to not smooth the parameters, and instead provided what we thought were easy to use functions for smoothing and hysteresis.
However this is only available when writing C++ patches.

Hysteresis is when a value doesn’t change until the delta - difference from previous value - exceeds a limit.

What we should probably do is implement some default filtering in the OWL gen~ wrapper, so that this doesn’t have to be done for every parameter, all the time. The challenge is to do it effectively, efficiently and with minimal overhead. Looking at the code now I think I have an idea how to do it - let me try a couple of things out and get back to you.

1 Like

Perfect, thanks a lot and let me know.

Maybe you can write me a snippet of the C++ code and I’ll try to use it in a codebox in gen.

at the risk of misunderstanding codebox:

v = v*in2 + (1-in2)*in1;
out1 = v;

Pipe your parameter value into the first inlet, and a constant value into the second inlet which should be between around 0.85 and 0.999. The higher the value, the more smoothing - try with 0.95.

This implements a simple IIR filter: exponential smoothing. The constant is the lambda factor which determines how quickly the value can change.

The idea is that the code updates a state variable called v, but I’m not sure what value it will be initialised to…

Let me know if this works then we can try out hysteresis!

Maybe try this instead, with no second inlet:

lambda = 0.95;
v = v*lambda + (1-lambda)*in1;
out1 = v;

and with hysteresis (value only updates if change is greater than delta):

delta = 0.004;
lambda = 0.95;
if(abs(v-in1) > delta)
  v = v*lambda + (1-lambda)*in1;
out1 = v;

Thanks a lot, i’ll let you know.

Cheers.

Hello,
I’ve solved the problem using gen~ objects in this way

Now there is no noise anymore when the knob val is changing. I only need to find the minimum delay time to calculate the delta and the minimum threshold value to trig sample and hold.

Hope it helps someone.

Cheers

Francesco (Perk)

2 Likes

I’m currently trying to recreate this parameter filter for Pure Data patches and I can’t figure out why it isn’t working. PD delay patches are practically unusable because the amount of noise on the parameter inputs just degrades things into mush after 4 to 5 repeats.

This recreation of the gen~ patch works just fine when running it on my computer, but it completely breaks the patch once uploaded to the Lich and I have no idea why. Even the feedback produces no effect when this filter is inserted into the time control.

Anyone have any ideas why this isn’t behaving?

Screenshot 2023-01-02 075130

I found the issue. Just needed to replace the change > snapshot part to a spigot. This works great:

Screenshot 2023-01-03 101355