On 2011-04-04 17:52, Krzysztof Foltman wrote:
On 03/04/11 10:38, David Henningsson wrote:
3) I'm not an IIR filter expert, and so I'm a little out on deep water
here and I'm not completely sure this is the right way to fix it. If
you happen to know any digital filter algorithm expert, feel free to
ask him/her to review the code :-)
The whole problem is a royal PITA for everyone.
www.dafx.ca/proceedings/papers/p_057.pdf
http://www.acoustics.hut.fi/~vpv/publications/icassp98-trel.pdf
And this thread on KVR:
http://www.kvraudio.com/forum/viewtopic.php?p=4134891
I had some success interpolating filter coefficients for a number of
frames (say, 64), but this is just a partial solution. The problem is,
depending on filter implementation there may be a risk of coefficients
getting out of the unit circle, causing temporary instability.
There are some clever solutions to try. For example, interpolating
log(magnitude) and phase of the poles/zeros separately, so that the
poles never get outside of the unit circle and the amplitude changes are
"even". But it sounds like a rather CPU-consuming approach and I never
tried that myself.
K.
Thanks for the input - seems like you know much more about the
background and math behind this formula than I do. Have you had a look
at the code? The old code would linearly interpolate a and b
coefficients over FLUID_BUFSIZE = 64 samples. What I came up with was to
modify w(n) based on changes of b, if b changes rapidly. Might be kind
of hacky, so I'm happy for some input for a more correct and/or faster
approach. I understand that there isn't something that's both optimal
and fast, so do you have any suggestion on a best compromise that would
work for FluidSynth?
// David
_______________________________________________
fluid-dev mailing list
fluid-dev@nongnu.org
http://lists.nongnu.org/mailman/listinfo/fluid-dev