Wow! Great additions!
-
Audiolab is now available on deken!
-
In your audiolab plugin suite, there are a lot of nice filter implentations mostly in moog-ladder style. In case your are interested in implentation of an Oberheim-style filter:
https://github.com/ddiakopoulos/MoogLadders/blob/master/src/OberheimVariationModel.h
https://www.willpirkle.com/app-notes/
Best Reagrds
-
@solipp Thank you for contributing this library, I'm learning tons. I have some questions about fft-split~.
- It looks like you are simply passing the bins that are below the threshold frequency to the left inverse transform, and the rest to the right (with the omitted bins on each side muted), is that correct?
- If so, then why does the transition band sound continuous? i.e. when I output lowpass to the left and highpass to the right, as I sweep up it moves continuously from left to right around the threshold frequency.
- I struggled to make a test to see what phase distortions occur near the threshold frequency, and there don't appear to be any. Could that be true? (I'm not confident I tested properly)
-
@jameslo said:
- It looks like you are simply passing the bins that are below the threshold frequency to the left inverse transform, and the rest to the right (with the omitted bins on each side muted), is that correct?
yes, that's correct.
- If so, then why does the transition band sound continuous? i.e. when I output lowpass to the left and highpass to the right, as I sweep up it moves continuously from left to right around the threshold frequency.
that is the result of spectral smearing i guess https://en.wikipedia.org/wiki/Spectral_leakage
the slopes of the lowpass/highpass are not perfectly steep- I struggled to make a test to see what phase distortions occur near the threshold frequency, and there don't appear to be any. Could that be true? (I'm not confident I tested properly)
there shouldn't be any phase distortion. essentially it's a linear phase FIR filter.
@tungee thanks for the links!
I made this pp.ladder~ filter to get an idea about the concept of "zero delay filters". So I kind of mapped it out as a pd patch to get an overview (not that i fully understand it now...)
However, it makes much more sense to create externals (instead of vanilla abstractions) of this filters. Pure data is really not efficient in processing patches with one sample dsp blocks. -
@solipp I was wondering if fft-split~ could be used as an upsampled anti-aliasing filter but I'm not getting the results I expected. Things seem to change radically depending on the oversampling factor. What am I misunderstanding?
fft-split~ as antialias filter.pdEDIT: NEVERMIND
It appears that Pd doesn't perform the 4X overlapped FFT windowing as expected if the FFT's block size is smaller than 4X the block size of the enclosing patch. When I change fft-split~'s block size to 4096, things are fine. But let me know if I've given the wrong reason. -
@jameslo nja, i think you gave the wrong reason
if you run pd at samplerate 44100 and you upsample by 16, the samplerate of the patch is 705 600. Devide this by fft-split~'s default blocksize 1024 and you get a bin resolution of 705600/1024 ~ 689 hz.
This is like running fft-split~ with a blocksize of 64 at normal samplerate (44100/64 ~ 689). You can try, [pp.fft-split 64 4] will give you the same strange result (I'm not even sure why fft patches start to act weird when you run them with block sizes >256, maybe it actually is related to overlap...)
With block size 4096 you get 705600/4096 ~ 172hz resolution, but you probably want 705600/16384 ~ 43hz witch relates to 44100/1024 ~ 43hz. -
Maybe someone can help me here. I LOVE the parameq~ object, BUT it resets every time I close and reopen my patch.
I've tried saving the patch after setting the parameq~ object, and I've also tried saving the parameq~ object once I've adjusted the EQ settings, but every time I reopen it has completely reset again. What am I missing here??? -
@Dizzy-Dizzy Before saving and closing your patch, you have to send manually a [save $1( message to right inlet of all pp.objects of interest (where $1 is replaced by a "preset"number of your choice).
When you re-open the patch, you have to send a [recall $1( message to the same inlets. -
Amazing, thanks got it working! Always learning something new...
-
I'd like to use pp.fft-partconv~ on a long impulse response but I get the message "pp.fft-partconv-st~: IR length exceeds buffer". Do either of the creation arguments control the buffer length? Sorry for my laziness.
edit: OMG I am so lazy, what is my problem? It took 30 mins to find the answer, here's how:
-
use text editor to search pp.fft-part*.* for the error message
-
find subpatch that prints the message
-
look at the condition that makes it print
-
trace backwards on some of the receives that could make the condition true, e.g. $0-nparts
-
notice that one factor in $0-nparts is $0-max-blocksize. Gee, that happens to resemble the name of one of the creation arguments.
-
try it. Bingo!
-
-
@solipp said:
this is such a great collection, thank you for sharing with all of us
i'm fairly new to Pd, was wondering how difficult it might be to create a 7.1 preset in the spat8 patch? (ie Front L, C, R. Side L R. Rear L R, and sub?)
I tried just moving the speakers into position which worked but when I save and re-open it reverts to octophonic.
Any guidance will be greatly appreciated, thank you.