diff --git a/wdsp/amsq.hpp b/wdsp/amsq.hpp index 069ed74da..f9acdf76b 100644 --- a/wdsp/amsq.hpp +++ b/wdsp/amsq.hpp @@ -78,6 +78,7 @@ public: double _max_tail, double _muted_gain ); + AMSQ(const AMSQ&) = delete; ~AMSQ(); void flush(); diff --git a/wdsp/anb.cpp b/wdsp/anb.cpp index 7dcff5c6e..33f3d95e9 100644 --- a/wdsp/anb.cpp +++ b/wdsp/anb.cpp @@ -57,7 +57,7 @@ void ANB::initBlanker() for (i = 0; i <= trans_count; i++) wave[i] = 0.5 * cos(i * coef); - std::fill(dline, dline + dline_size * 2, 0); + std::fill(dline.begin(), dline.end(), 0); } ANB::ANB ( @@ -81,20 +81,20 @@ ANB::ANB ( hangtime(_hangtime), advtime(_advtime), backtau(_backtau), - threshold(_threshold) + threshold(_threshold), + dtime(0), + htime(0), + itime(0), + atime(0) { - wave = new double[((int)(MAX_SAMPLERATE * MAX_TAU) + 1)]; + tau = tau < 0.0 ? 0.0 : (tau > MAX_TAU ? MAX_TAU : tau); + hangtime = hangtime < 0.0 ? 0.0 : (hangtime > MAX_ADVTIME ? MAX_ADVTIME : hangtime); + advtime = advtime < 0.0 ? 0.0 : (advtime > MAX_ADVTIME ? MAX_ADVTIME : advtime); + samplerate = samplerate < 0.0 ? 0.0 : (samplerate > MAX_SAMPLERATE ? MAX_SAMPLERATE : samplerate); + wave.resize((int)(MAX_SAMPLERATE * MAX_TAU) + 1); dline_size = (int)((MAX_TAU + MAX_ADVTIME) * MAX_SAMPLERATE) + 1; - dline = new float[dline_size * 2]; + dline.resize(dline_size * 2); initBlanker(); - legacy = new float[2048 * 2]; /////////////// legacy interface - remove -} - -ANB::~ANB() -{ - delete[] legacy; /////////////// legacy interface - remove - delete[] dline; - delete[] wave; } void ANB::flush() diff --git a/wdsp/anb.hpp b/wdsp/anb.hpp index 00619997b..2a349e19f 100644 --- a/wdsp/anb.hpp +++ b/wdsp/anb.hpp @@ -28,6 +28,8 @@ warren@wpratt.com #ifndef wdsp_anb_h #define wdsp_anb_h +#include + #include "export.h" namespace WDSP { @@ -37,17 +39,17 @@ class WDSP_API ANB public: int run; int buffsize; // size of input/output buffer - float* in; // input buffer - float* out; // output buffer + float* in; // input buffer + float* out; // output buffer int dline_size; // length of delay line which is 'double dline[length][2]' - float *dline; // pointer to delay line + std::vector dline; // delay line double samplerate; // samplerate, used to convert times into sample counts double tau; // transition time, signal<->zero double hangtime; // time to stay at zero after noise is no longer detected double advtime; // deadtime (zero output) in advance of detected noise double backtau; // time constant used in averaging the magnitude of the input signal double threshold; // triggers if (noise > threshold * average_signal_magnitude) - double *wave; // pointer to array holding transition waveform + std::vector wave; // array holding transition waveform int state; // state of the state machine double avg; // average value of the signal magnitude int dtime; // count when decreasing the signal magnitude @@ -64,7 +66,6 @@ public: int count; // set each time a noise sample is detected, counts down double backmult; // multiplier for waveform averaging double ombackmult; // multiplier for waveform averaging - float *legacy; ANB( int run, @@ -78,7 +79,8 @@ public: double backtau, double threshold ); - ~ANB(); + ANB(const ANB&) = delete; + ~ANB() = default; void flush(); void execute(); diff --git a/wdsp/nob.cpp b/wdsp/nob.cpp index cc54dec1d..5b7834315 100644 --- a/wdsp/nob.cpp +++ b/wdsp/nob.cpp @@ -105,15 +105,15 @@ NOB::NOB ( MAX_HANG_SLEW_TIME + MAX_HANG_TIME + MAX_SEQ_TIME ) + 2); - dline = new double[dline_size * 2]; - imp = new int[dline_size]; - awave = new double[(int)(MAX_ADV_SLEW_TIME * MAX_SAMPLERATE + 1)]; - hwave = new double[(int)(MAX_HANG_SLEW_TIME * MAX_SAMPLERATE + 1)]; + dline.resize(dline_size * 2); + imp.resize(dline_size); + awave.resize((int)(MAX_ADV_SLEW_TIME * MAX_SAMPLERATE + 1)); + hwave.resize((int)(MAX_HANG_SLEW_TIME * MAX_SAMPLERATE + 1)); filterlen = 10; - bfbuff = new double[filterlen * 2]; - ffbuff = new double[filterlen * 2]; - fcoefs = new double[filterlen]; + bfbuff.resize(filterlen * 2); + ffbuff.resize(filterlen * 2); + fcoefs.resize(filterlen); fcoefs[0] = 0.308720593; fcoefs[1] = 0.216104415; fcoefs[2] = 0.151273090; @@ -128,17 +128,6 @@ NOB::NOB ( init(); } -NOB::~NOB() -{ - delete[] fcoefs; - delete[] ffbuff; - delete[] bfbuff; - delete[] hwave; - delete[] awave; - delete[] imp; - delete[] dline; -} - void NOB::flush() { out_idx = 0; @@ -149,10 +138,10 @@ void NOB::flush() avg = 1.0; bfb_in_idx = filterlen - 1; ffb_in_idx = filterlen - 1; - std::fill(dline, dline + dline_size * 2, 0); - std::fill(imp, imp + dline_size, 0); - std::fill(bfbuff, bfbuff + filterlen * 2, 0); - std::fill(ffbuff, ffbuff + filterlen * 2, 0); + std::fill(dline.begin(), dline.end(), 0); + std::fill(imp.begin(), imp.end(), 0); + std::fill(bfbuff.begin(), bfbuff.end(), 0); + std::fill(ffbuff.begin(), ffbuff.end(), 0); } void NOB::execute() diff --git a/wdsp/nob.hpp b/wdsp/nob.hpp index 51dbd78e2..adfc525d9 100644 --- a/wdsp/nob.hpp +++ b/wdsp/nob.hpp @@ -28,6 +28,8 @@ warren@wpratt.com #ifndef wdsp_nob_h #define wdsp_nob_h +#include + #include "export.h" namespace WDSP { @@ -37,11 +39,11 @@ class WDSP_API NOB public: int run; int buffsize; // size of input/output buffer - float* in; // input buffer - float* out; // output buffer + float* in; // input buffer + float* out; // output buffer int dline_size; // length of delay line which is 'double dline[length][2]' - double *dline; // pointer to delay line - int *imp; + std::vector dline; // delay line + std::vector imp; double samplerate; // samplerate, used to convert times into sample counts int mode; double advslewtime; // transition time, signal<->zero @@ -50,15 +52,15 @@ public: double hangtime; // time to stay at zero after noise is no longer detected double max_imp_seq_time; int filterlen; - double *fcoefs; - double *bfbuff; + std::vector fcoefs; + std::vector bfbuff; int bfb_in_idx; - double *ffbuff; + std::vector ffbuff; int ffb_in_idx; double backtau; // time constant used in averaging the magnitude of the input signal double threshold; // triggers if (noise > threshold * average_signal_magnitude) - double *awave; // pointer to array holding transition waveform - double *hwave; + std::vector awave; // array holding transition waveform + std::vector hwave; int state; // state of the state machine double avg; // average value of the signal magnitude int time; // count when decreasing the signal magnitude @@ -96,7 +98,8 @@ public: double backtau, double threshold ); - ~NOB(); + NOB(const NOB&) = delete; + ~NOB() = default; //////////// legacy interface - remove void flush(); void execute();