From fe2c7bfe235a16df3c4b01f228a9756d7e7c6ae8 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 5 Nov 2025 16:28:35 +0100 Subject: [PATCH] add wavefolder --- clip/fold.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 clip/fold.h diff --git a/clip/fold.h b/clip/fold.h new file mode 100644 index 0000000..3b7c46b --- /dev/null +++ b/clip/fold.h @@ -0,0 +1,40 @@ +#pragma once + +namespace trnr { +// folds the wave from -1 to 1 +inline float fold(float& sample) +{ + while (sample > 1.0 || sample < -1.0) { + + if (sample > 1.0) { + sample = 2.0 - sample; + } else if (sample < -1.0) { + sample = -2.0 - sample; + } + } + return sample; +} + +// folds the positive part of the wave independently from the negative part. +inline float fold_bipolar(float& sample) +{ + // fold positive values + if (sample > 1.0) { + sample = 2.0 - sample; + + if (sample < 0.0) { sample = -sample; } + + return fold(sample); + } + // fold negative values + else if (sample < -1.0) { + sample = -2.0 - sample; + + if (sample > 0.0) { sample = -sample; } + + return fold(sample); + } else { + return sample; + } +} +}; // namespace trnr