Hey cheers, I did check this thread before posting, but it does not explicitly say if play~ uses 4p interpolation. This is why I ask if there is an external, and not even bother to ask about equivalent "vanilla" msp object.
[play~] uses 4 point cubic interpolation as far as I know (and from information from c74), although I can't claim to have seen the source code. What exact type I'm not sure. It certainly does NOT use linear interpolation.
[groove~] also uses cubic interpolation - it'll sound better than [play~] for longer files (the internal phasor~ is 64 bit). What are you trying to do exactly? It doesn't sound like you necessarily need an external, although perhaps you have specific requirements to do with the interpolation you need, in which case it'd be helpful to know what they are....
Hey Alex, what you say is not stated explicitly in the reference or in the help file ( play~ ), but maybe you are right. I just want something like play~ (in terms of functionality) that provides the best possible "fidelity" when I slow it down et cetera...
No - it isn't stated in the help file, but that doesn't mean it isn't the case. If you really want to bother you can perform various tests on [play~] to see how the interpolation works, but I can tell you that you'll come out with the answer that it uses cubic interpolation of some sort. Same is true of [groove~] which I would advise over [play~] most of the time anyway.
I've spent a bit of time messing around with this stuff, and written externals using various kinds of interpolation (linear, several forms of cubic, windowed sinc) and have often tested against vanilla max-msp objects.
I could never get an exact sample for sample match with the cubic interpolation types I was using, but it was very very close (to the point of possibly being just to do with floating point error). Linear interpolation is VERY VERY obvious at low speeds and there is no chance of confusing it with cubic interpolation.
In addition, various forum posts and/or private emails from c74 employees (I forget which exactly) have confirmed the use of cubic interpolation in relation to [groove~] and [play~]. If you want you can search the forum and try ot churn something up.
I had specific and somewhat esoteric needs in terms of re-writing basic buffer playback objects, but for normal usage I wouldn't bother using an external. I'm guessing the point of having an [index~] with interpolation is to be able to reference by sample, rather than in terms of milliseconds. You could obtain a similar functionality with [play~], but it is a bit of a hassle, there is a small chance that float error will be greater, and you cannot determine the exact form of interpolation (which you may or may not need to do).
Hey Alex, thank for all the input. I am testing right now! On my RME, with really good sennheiser headphones.
When considerably detuning a rich instrument sound (basoon attack), the waveforms are pretty similar. Mind you, I am testing [play~], [iindex~] and [groove~]. BUT, there are "spectral" differences:
With a ratio 1/3 (~0.3) of the speed (again on a RICH sound, not a sinewave, a real instrument) I start to "hear" the "frequency response" of the interpolation filters (not the whole range of course, since there is no content in the ultra high frequencies). This is really audible at the attack point. Well, iindex~ spectrum sounds kinda brighter, while play~ sounds bassier, more "damped" groove pretty much the same.
No artifacts from downsampling in
any case. I guess I should opt for the more "musical" of them.