From 093355d9a1f970edd109538b590db10cfeb5ea05 Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Wed, 21 Mar 2018 03:29:06 -0400 Subject: [PATCH] Improve Delay algorithm --- src/Delay.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Delay.cpp b/src/Delay.cpp index 1ce1602..05a659c 100644 --- a/src/Delay.cpp +++ b/src/Delay.cpp @@ -59,8 +59,6 @@ void Delay::step() { // Number of delay samples float index = delay * engineGetSampleRate(); - // TODO Rewrite this digital delay algorithm. - // Push dry sample into history buffer if (!historyBuffer.full()) { historyBuffer.push(dry); @@ -68,12 +66,12 @@ void Delay::step() { // How many samples do we need consume to catch up? float consume = index - historyBuffer.size(); + if (outBuffer.empty()) { - double ratio = 1.0f; - if (consume <= -16) - ratio = 0.5f; - else if (consume >= 16) - ratio = 2.0f; + double ratio = 1.f; + if (abs(consume) >= 16) { + ratio = powf(10.f, clamp(consume / 10000.f, -1.f, 1.f)); + } SRC_DATA srcData; srcData.data_in = (const float*) historyBuffer.startData();