@Jwif said:
Would it make sense to have modular objects so that different methods in transient/pitch could be used to create specialised analysis algorithms?
...
I guess an issue (amongst others) is syncing the two objects.
Indeed the problem with analysis objects in Pd is always the transitions from signal rate to messages and back again. It's not always helpful to have a message saying like 'bang, a transient happened somewhere in the last 20 milliseconds'.
Anyway, my approach towards analysis would be like this: develop a set of subprocesses as C++ classes, which can be individually wrapped in Pd classes, or combined into more comprehensive processes if so desired.
For example, you'd have some pitch estimator classes, each according to a different method. These classes can be thoroughly tested in Pd patches, compared to each other, and eventually optimized. The same with transient detectors. All such Pd implementations could be used on their own as independent objects.
In addition to that, you'd develop helper methods like polyphase decimator filtering. When all subprocesses are tested to work OK, they can be combined to make more advanced, integrated and optimized classes, for example a fine vocal processor with pitch and formant manipulation, as proposed by Elden in a thread which ignited the recent pitch discussions.
Following this concept, I am at the moment working on a pitch estimator according to Philip McLeod's Specially Normalized Autocorrelation (SNAC) method, and will report about it soon because it has some excellent characteristics, not only theoretically but also in practice.
@Jwif said:
By multirate do you mean upsampling? From some google-fu it seems like polyphase decimation is moving the downsampling process before the filters so that you can process them at the original samplerate? Is this right?
With 'multirate' I mean doing analysis at different sample rates. The point with pitch and transient detection is, that the large analysis frame required to accomodate the lowest frequencies, is too long for the fast fluctuations. It would be best to have short and long analysis frames running in parallel. The long frames can be run in downsampled time, so effectively they would hold as many samples as the short frames, which would be efficient. Each rate requires it's own bandlimited operation. It's wavelet filter bank technique, essentially.
Katja