[Feature Request] msp's delay~ quality much higher than gen's delay…

Alexandre's icon

Hi,
I'm looking forward for a sinc interpolation in delay in gen!
Because actually, none of interpolations available in delay in gen is able to give me an un-aliased sound, clean un-aliased sound that i get using the delay~ object in msp!

Since my original formant-pitchshifter algorithm was first prototyped in msp using delay~, which is using sinc interpolation that is not available in gen***, i first tried a bit the different gen's delay interpolation options, having the quick conclusion that cubic was good... but i just had tested pitch shifting down on a noise… Now i realised while pitching-up violin notes that cubic is actually the worst interpolation! (not considering '@interp none' of course).
I was testing the sound mostly using my great monophonic-formant-pitchshifter patch (messy at the moment), that is using a bright electric violin sound source (i precise that i'm using big low-pass filters all over the place going in and out of the pitchshifting to prevent real aliasing from too high frequencies ;-) ), but i also made a simple test patch to post here.

Here are my tests, see simple test-patch attached:

- msp's delay~ , (4-points?) SINC interp: Clean un-aliased sound!

- gen's delay, LINEAR interp: Aliasing when pitchshifting-up. (only ok if upsampling my poly~
- gen's delay, COSINE interp: Strange Aliasing even while pitchshifting a little...
- gen's delay, CUBIC interp: Strange Aliasing even while pitchshifting a little...
- gen's delay, SPLINE interp: Strange distortions/beats while pitchshifting-up from several octaves... (somehow i couldn't clearly reproduce in this test patch that is just using a single cycle~)

So I'm really looking forward for a sinc interpolation in delay in gen!

Cheers,
Alexandre

Alternatively, if someone know how to transform the Max 6.1/examples/gen/gen~.sincinterpolation.forloop.maxpat from 16-points sinc interp to 4-points sinc, i could eventually test if the cpu cost is ok with it. (…Not sure since I have 12 delays in my algorithm * 15 voices of polyphony))

Max Patch
Copy patch and select New From Clipboard in Max.
testcase's icon

"Alternatively, if someone know how to transform the Max 6.1/examples/gen/gen~.sincinterpolation.forloop.maxpat from 16-points sinc interp to 4-points sinc, i could eventually test if the cpu cost is ok with it. (…Not sure since I have 12 delays in my algorithm * 15 voices of polyphony))"

Perhaps I am misunderstanding but can't you simply change the number of points by changing the 'points' variable in the code?