maybe the usage of block~ with a blocksize-argument less than 64
well, a blocksize of 4 was enough for my ears ... still, profiling i figured out, you are using sin/cos instead of sinf/cosf, which should be faster ... since they work with float instead of doubles ... not part of ansi c but of c99 (at least gcc supports them)...
hm ... doing even more profiling on hml_shelf~, i'm found that the stability checking (at a blocksize of 4) is much more expensive than the actual _perform function, due to the sinf, cosf calls...
the specific part from opreport: 111961 2.3181 libm-2.3.4.so __sinf 107115 2.2177 hml_shelf~.pd_linux sighml_shelf_calc 103545 2.1438 hml_shelf~.pd_linux sighml_shelf_perform 54676 1.1320 libm-2.3.4.so __cosf
i'm not really familiar with filter design, but hot accurate does the sin/cos functions have to be? would it make sense to replace the libm functions with table lookups (like in osc~)? not sure, if it would be accurate enough, though ...
cheers ... tim