From 0899a82aae31a972f1a3e2012eb67121e681b64b Mon Sep 17 00:00:00 2001 From: tremblap Date: Sat, 10 Feb 2024 15:54:00 +0000 Subject: [PATCH 1/3] check if env follow input is finite, if not replace with last valid input --- include/algorithms/public/Envelope.hpp | 11 ++++++----- include/algorithms/public/EnvelopeGate.hpp | 6 ++++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/include/algorithms/public/Envelope.hpp b/include/algorithms/public/Envelope.hpp index db732a351..7292a4da5 100644 --- a/include/algorithms/public/Envelope.hpp +++ b/include/algorithms/public/Envelope.hpp @@ -42,14 +42,14 @@ class Envelope assert(mInitialized); mFastSlide.updateCoeffs(fastRampUpTime, fastRampDownTime); mSlowSlide.updateCoeffs(slowRampUpTime, slowRampDownTime); - double filtered = in; - if (hiPassFreq != mHiPassFreq) - { + if (std::isfinite(in)) mPrevValid = in; + double filtered = mPrevValid; + if (hiPassFreq != mHiPassFreq) { initFilters(hiPassFreq); mHiPassFreq = hiPassFreq; } - if (mHiPassFreq > 0){ - filtered = mHiPass2.processSample(mHiPass1.processSample(in)); + if (mHiPassFreq > 0) { + filtered = mHiPass2.processSample(mHiPass1.processSample(filtered)); } double rectified = abs(filtered); double dB = 20 * log10(rectified); @@ -70,6 +70,7 @@ class Envelope double mHiPassFreq{0}; bool mInitialized{false}; + double mPrevValid = 0; ButterworthHPFilter mHiPass1; ButterworthHPFilter mHiPass2; diff --git a/include/algorithms/public/EnvelopeGate.hpp b/include/algorithms/public/EnvelopeGate.hpp index ab18bc75b..202706e0b 100644 --- a/include/algorithms/public/EnvelopeGate.hpp +++ b/include/algorithms/public/EnvelopeGate.hpp @@ -71,14 +71,15 @@ class EnvelopeGate mSlide.updateCoeffs(rampUpTime, rampDownTime); - double filtered = in; + if (std::isfinite(in)) mPrevValid = in; + double filtered = mPrevValid; if (hiPassFreq != mHiPassFreq) { initFilters(hiPassFreq); mHiPassFreq = hiPassFreq; } if (mHiPassFreq > 0) - filtered = mHiPass2.processSample(mHiPass1.processSample(in)); + filtered = mHiPass2.processSample(mHiPass1.processSample(filtered)); double rectified = abs(filtered); double dB = 20 * log10(rectified); @@ -261,6 +262,7 @@ class EnvelopeGate index mLatency; index mFillCount; double mHiPassFreq{0}; + double mPrevValid = 0; index mMinTimeAboveThreshold{440}; index mDownwardLookupTime{10}; From b737c3157058c78d35d683fb8c2bce208bd34227 Mon Sep 17 00:00:00 2001 From: tremblap Date: Sat, 10 Feb 2024 16:59:58 +0000 Subject: [PATCH 2/3] clang-formatted --- include/algorithms/public/Envelope.hpp | 13 ++++++----- include/algorithms/public/EnvelopeGate.hpp | 27 ++++++++-------------- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/include/algorithms/public/Envelope.hpp b/include/algorithms/public/Envelope.hpp index 7292a4da5..42957ca84 100644 --- a/include/algorithms/public/Envelope.hpp +++ b/include/algorithms/public/Envelope.hpp @@ -33,10 +33,9 @@ class Envelope mInitialized = true; } - double processSample(const double in, - double floor, index fastRampUpTime, index slowRampUpTime, - index fastRampDownTime, index slowRampDownTime, - double hiPassFreq) + double processSample(const double in, double floor, index fastRampUpTime, + index slowRampUpTime, index fastRampDownTime, + index slowRampDownTime, double hiPassFreq) { using namespace std; assert(mInitialized); @@ -44,11 +43,13 @@ class Envelope mSlowSlide.updateCoeffs(slowRampUpTime, slowRampDownTime); if (std::isfinite(in)) mPrevValid = in; double filtered = mPrevValid; - if (hiPassFreq != mHiPassFreq) { + if (hiPassFreq != mHiPassFreq) + { initFilters(hiPassFreq); mHiPassFreq = hiPassFreq; } - if (mHiPassFreq > 0) { + if (mHiPassFreq > 0) + { filtered = mHiPass2.processSample(mHiPass1.processSample(filtered)); } double rectified = abs(filtered); diff --git a/include/algorithms/public/EnvelopeGate.hpp b/include/algorithms/public/EnvelopeGate.hpp index 202706e0b..f5e60ce80 100644 --- a/include/algorithms/public/EnvelopeGate.hpp +++ b/include/algorithms/public/EnvelopeGate.hpp @@ -29,13 +29,12 @@ class EnvelopeGate public: EnvelopeGate(index maxSize, Allocator& alloc = FluidDefaultAllocator()) - : mInputBuffer(maxSize, alloc), - mOutputBuffer(maxSize, alloc) + : mInputBuffer(maxSize, alloc), mOutputBuffer(maxSize, alloc) {} void init(double onThreshold, double offThreshold, double hiPassFreq, - index minTimeAboveThreshold, index upwardLookupTime, - index minTimeBelowThreshold, index downwardLookupTime) + index minTimeAboveThreshold, index upwardLookupTime, + index minTimeBelowThreshold, index downwardLookupTime) { using namespace std; @@ -44,8 +43,8 @@ class EnvelopeGate mMinTimeBelowThreshold = minTimeBelowThreshold, mDownwardLookupTime = downwardLookupTime; mDownwardLatency = max(minTimeBelowThreshold, mDownwardLookupTime); - mLatency = max( - mMinTimeAboveThreshold + mUpwardLookupTime, mDownwardLatency); + mLatency = max(mMinTimeAboveThreshold + mUpwardLookupTime, + mDownwardLatency); if (mLatency < 0) mLatency = 1; assert(mLatency <= mInputBuffer.size()); mHiPassFreq = hiPassFreq; @@ -63,8 +62,8 @@ class EnvelopeGate } double processSample(const double in, double onThreshold, double offThreshold, - index rampUpTime, index rampDownTime, double hiPassFreq, - index minEventDuration, index minSilenceDuration) + index rampUpTime, index rampDownTime, double hiPassFreq, + index minEventDuration, index minSilenceDuration) { using namespace std; assert(mInitialized); @@ -123,7 +122,7 @@ class EnvelopeGate { index onsetIndex = refineStart(mWriteHead - mMinTimeAboveThreshold - mUpwardLookupTime, - mUpwardLookupTime); + mUpwardLookupTime); index blockSize = mWriteHead > onsetIndex ? mWriteHead - onsetIndex @@ -249,14 +248,8 @@ class EnvelopeGate mOnStateCount = 0; mOffStateCount = 1; } - else if (mInputState && nextState) - { - mOnStateCount++; - } - else if (!mInputState && !nextState) - { - mOffStateCount++; - } + else if (mInputState && nextState) { mOnStateCount++; } + else if (!mInputState && !nextState) { mOffStateCount++; } } index mLatency; From 96535890b989499ca02d8ae39f0f1480ff4fd577 Mon Sep 17 00:00:00 2001 From: tremblap Date: Sat, 10 Feb 2024 17:09:40 +0000 Subject: [PATCH 3/3] initialised the way @weefuzzy likes it --- include/algorithms/public/Envelope.hpp | 2 +- include/algorithms/public/EnvelopeGate.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/algorithms/public/Envelope.hpp b/include/algorithms/public/Envelope.hpp index 42957ca84..75036bac0 100644 --- a/include/algorithms/public/Envelope.hpp +++ b/include/algorithms/public/Envelope.hpp @@ -71,7 +71,7 @@ class Envelope double mHiPassFreq{0}; bool mInitialized{false}; - double mPrevValid = 0; + double mPrevValid{0}; ButterworthHPFilter mHiPass1; ButterworthHPFilter mHiPass2; diff --git a/include/algorithms/public/EnvelopeGate.hpp b/include/algorithms/public/EnvelopeGate.hpp index f5e60ce80..490fecdb8 100644 --- a/include/algorithms/public/EnvelopeGate.hpp +++ b/include/algorithms/public/EnvelopeGate.hpp @@ -255,7 +255,7 @@ class EnvelopeGate index mLatency; index mFillCount; double mHiPassFreq{0}; - double mPrevValid = 0; + double mPrevValid{0}; index mMinTimeAboveThreshold{440}; index mDownwardLookupTime{10};