X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmtdm.cc;h=f959d30539d752da322f86138d2f1e4415634f2c;hb=5ada17eba0195d90f0685776251b384efdf5168e;hp=940f0b8c2507cc5aefd3dba0810bd2e00a071ff6;hpb=0e0c15833eb1c2f06cc5e45aaeed37adae288287;p=ardour.git diff --git a/libs/ardour/mtdm.cc b/libs/ardour/mtdm.cc index 940f0b8c25..f959d30539 100644 --- a/libs/ardour/mtdm.cc +++ b/libs/ardour/mtdm.cc @@ -17,12 +17,14 @@ */ #include +#include #include "ardour/mtdm.h" -MTDM::MTDM (int fsamp) +MTDM::MTDM (int fsamp) : _cnt (0) , _inv (0) + , _peak (0) { int i; Freq *F; @@ -32,7 +34,7 @@ MTDM::MTDM (int fsamp) _freq [2].f = 3072; _freq [3].f = 2560; _freq [4].f = 2304; - _freq [5].f = 2176; + _freq [5].f = 2176; _freq [6].f = 1088; _freq [7].f = 1312; _freq [8].f = 1552; @@ -56,21 +58,24 @@ int MTDM::process (size_t len, float *ip, float *op) int i; float vip, vop, a, c, s; Freq *F; + float peak = 0; + assert (len > 0); while (len--) { vop = 0.0f; vip = *ip++; + if (fabsf(vip) > peak) { peak = vip; } for (i = 0, F = _freq; i < 13; i++, F++) { - a = 2 * (float) M_PI * (F->p & 65535) / 65536.0; + a = 2 * (float) M_PI * (F->p & 65535) / 65536.0; F->p += F->f; - c = cosf (a); - s = -sinf (a); + c = cosf (a); + s = -sinf (a); vop += (i ? 0.01f : 0.20f) * s; F->xa += s * vip; F->ya += c * vip; - } + } *op++ = vop; if (++_cnt == 16) { @@ -86,6 +91,8 @@ int MTDM::process (size_t len, float *ip, float *op) } } + if (peak > _peak) { _peak = vip; } + return 0; } @@ -113,10 +120,10 @@ int MTDM::resolve (void) k = (int)(floor (p + 0.5)); e = fabs (p - k); if (e > _err) _err = e; - if (e > 0.4) return 1; + if (e > 0.4) return 1; d += m * (k & 1); m *= 2; - } + } _del = 16 * d; return 0;