Hi Yota,
Thank you for using MuBu and for your feedback.
We definitely have to document things a little more, however I can already answer a few of your questions.
Concerning dct, mel, bands, and mfcc :
mfcc is in fact a shortcut for slice:fft:bands:dct with predefined settings
mel is also a shortcut for slice:fft:bands
So you should use them as single pipo operators.
I think you can find some use examples in mubu.gmm/gmr/hhmm/xmm help patches
dct and bands are regular pipo operators (they are not combinations)
bands is supposed to be computed on a spectrum
dct can be also used like fft (slice:dct)
Concerning fft :
I assume you are talking about a slice:fft pipo combination
fft has the following behavior :
if its size attribute is <= 0, it will use the incoming stream’s window size,
otherwise if it has a smaller value than this of the incoming stream, this smaller value will be used,
and if it has a greater value, it will clip to the incoming stream’s size
Concretely this means that if we have, say slice.size == 2048 (which is the default value),
if fft.size <= 0, fft will use 2048 as its window size
if fft.size == 1024, fft will perform on windows of size 1024 (and some info will be discarded)
if fft.size > 2048, fft will perform on windows of size 2048 (because it doesn’t have some kind of buffer to store more values than the incoming ones)
slice’s hop attribute is totally independent from the size, it just means how often the last “size” values should be output
(slice has an integrated buffer that allows it to do this)
this is what determines its output samplerate.
it’s different from the way the pfft~ object works, because audio analysis/resynthesis performs best with some power-of-two-sized arrays.
having a smaller hop size allows you to have a better samplerate while still using a big window for analysis.
Concerning onseg :
the way it is used in the examples is one of the best combinations of parameters for onset detection.
it would make sense to create a special pipo for this, just as mfcc was created, but for the moment you have to set all the parameters manually.
you can create your own max abstraction to encapsulate this, though.
Hope this helps.
Best,
Joseph