I tried removing the block~ 1 a while ago, for the reason you mention, that fexpr~ is already processing every sample, but I did not get the same result, So kind of scratched it, but I will look into it again.
you need the block~ 1 for 1 sample feedback delay in a resonant filter
I am still beginner with filters, but the reason I used fexpr~ was because of the "processes every sample", so I was kind og thinking this is what I need.
for the lop~ are you sure that these filters are made in the same way, the lop~ and the karlsen filter?
yes, they are exactly the same. you can just stack 4 lop~ an feed back the output with one sample delay. or, if you want signal input for cutoff use rpole~ like this:
rpole is like [fexpr~ $x1 + $x2 * $y1] (see help) with the additional math it is what the fexpr~ in your patch does. same as lop~..
For the oversampling usually oversampling makes sure that it doesn't blow up at higher frequencies.
[clip~ 0.0001 0.8] prevents your patch from blowing up.
@jaffasplaffa why fexpr~ for a simple onepole filter.. when your patch already runs with blocksize 1? you can replace [fexpr~] with [lop~] or [rpole~] or some delays + math like in the original code.
I couldn't resit building the thing following this example: https://www.musicdsp.org/en/latest/Filters/240-karlsen-fast-ladder.html
!filter gets unstable at higher frequencies
also, do you notice any difference in sound with oversampling + anti aliasing filter..?
maybe make it optional and put the anti aliasing filter in a subpatch with [switch~]
Merry christmas to you too!
@tabache seems like you have declared "audiolab" under File -> Preferences -> Startup.
You only need to do this for single binary libraries, e.g. zexy or GEM. Audiolab is a collection of abstractions. You can point pd to the right directory under File -> Preferences -> Path, or you can just copy the audiolab folder into your projects directory and use [declare -path ./audiolab] in your main patch.
It should still work with Pd 0.50.2, but in the future I'll incorporate any new features of pd whenever it makes sense.. you should stick with the latest version of pd, there are only benefits.
@Polaris please don't use pd-extended in 2020... In the latest pd "vanilla" there is the option to run pd in batch mode from within pd using the fast-forward message. here is an example:
it fills an 10 sec. array instantly. Of cause all other processes will also be fast forwarded.
However, if you want to point out what you are planning to do in a wider context, i guess there is a better solution then filling arrays instantly. maybe..
@tungee Haas effect is already implemented in your brain, it's a psychoacoustic effect
I guess you want is a small delay between two output channels. You can do it with [pp.sdel~] samplewise delay.
something like this:
assuming you have the abstractions in your path, here is the patch:
if you change the delay times over time you can get some nasty phasing effects depending on the position of your speakers. it works okay with headphones though.
@Laevatein do you want to avoid externals in general?
my spoonful of wisdom if you want to do something like earplug~ with pd-vanilla objects only:
First you'll have to figure out how to do the panning between your channels. basically you have two options, vbap (vector based amplitude panning, read: https://ccrma.stanford.edu/workshops/gaffta2010/spatialsound/topics/amplitude_panning/materials/vbap.pdf) or dbap (distance based amplitude panning, read http://www.pnek.org/wp-content/uploads/2010/04/icmc2009-dbap.pdf).
Actually it's just triangulation, not too complicated stuff. You'll find many open source code examples online, including pd-patches, e.g. [pan8~] in the else library or my humble implementation [pp.spat8~] in audiolab are dbap. Both are available in the deken repos (help -> find externals)
The convolution part is a bit more complicated. You can do it in pd-vanilla, there are some examples in Alexandre Torres Porres live electronics tutorial, which is now part of the else library i think. But if you care about latency or if your IR files are larger than a few hundred milliseconds you'll have to use partitioning. Again, you can find examples online. Tom Erbe shared something a few years ago, there are patches in else, in audiolab ... Problem is though if you're doing the convolution part in pure data and you'll need to convolve with say 8-16 stereo impulse responses to get a decent binaural effect... it will bring your modern day computer to it's knees. You can try to outsource the convolution part to different instances of pd with [pd~] but I think it makes much more sense to do it with tools that are better suited for this task. jconvolver comes to mind if you're using jack.
good luck with your project!