Miller,
I'd like to ask for a source code change to deal with denormalized
numbers in PD. Inquiries on the PD list have shown that I am not the
only one who has found his or her CPU spiking up over 100% whenever any
sound in the patch becomes very small, both under Linux and Windows. The
problem gets extremely bad when dealing with decaying sounds, such as
reverb tails and feedback delays. I have noticed that denormalized
numbers are a much more serious problem under Linux, particularly when
using a P4 processor, although the problem is not limited to this
specific processor.
Research on the web has informed me that hardware manufacturers have no
inclination to fix this problem, so the solution must be handled on the
software level. Olaf Matthes proposed the following changes to the
source code, which should be implemented in both the PD code itself, as
well as any in external which might produce denormals:
> A fix in terms of
> changing the source code is to add the following:
>
> #define undenormalise(sample) if(((*(unsigned
> int*)&sample)&0x7f800000)==0)
> sample=0.0
>
> and add
>
> undenormalise(myfloatvalue);
>
> wherever a calculation might have produced very small values (replace
> 'myfloatvalue' with the variable that stores the float). There are
> many many places
> in the Pd sources (and in every external) where this happens.
Could you please consider implementing this, or a similar bugfix, in a
future release of PD?
Thanks for your hard work so far,
Derek