From 872e7c68e05d781d6a1389e214fcfd9fca85e552 Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Tue, 7 Apr 2020 00:50:30 +0200 Subject: [PATCH] Use round rather than trunc; more stable.. --- src/sfizz/ModifierHelpers.h | 5 +---- tests/EventEnvelopesT.cpp | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/sfizz/ModifierHelpers.h b/src/sfizz/ModifierHelpers.h index 0ee1e900..1a5d5aba 100644 --- a/src/sfizz/ModifierHelpers.h +++ b/src/sfizz/ModifierHelpers.h @@ -5,7 +5,6 @@ #include "SfzHelpers.h" #include "Resources.h" #include "absl/types/span.h" - namespace sfz { /** @@ -150,7 +149,6 @@ void multiplicativeEnvelope(const EventVector& events, absl::Span envelop if (envelope.size() == 0) return; const auto maxDelay = static_cast(envelope.size() - 1); - const auto logStep = std::log(step); // If we assume that a = b.q^r for b in (1, q) then // log a log b @@ -178,7 +176,7 @@ void multiplicativeEnvelope(const EventVector& events, absl::Span envelop continue; } - const auto numSteps = static_cast(std::log(difference) / logStep); + const auto numSteps = std::round(std::log(difference) / logStep); const auto stepLength = static_cast(length / numSteps); for (int i = 0; i < numSteps; ++i) { fill(envelope.subspan(lastDelay, stepLength), lastValue); @@ -216,7 +214,6 @@ void multiplicativeModifier(const sfz::Resources& resources, absl::Span s return lambda(curve.evalNormalized(x) * ccData.data.value); }); } else { - // FIXME: not sure about this step size for multiplicative envelopes const float stepSize { lambda(ccData.data.value / (ccData.data.steps - 1)) }; multiplicativeEnvelope(events, span, [&ccData, &curve, &lambda](float x) { return lambda(curve.evalNormalized(x) * ccData.data.value); diff --git a/tests/EventEnvelopesT.cpp b/tests/EventEnvelopesT.cpp index 634d98d6..a2dc6b30 100644 --- a/tests/EventEnvelopesT.cpp +++ b/tests/EventEnvelopesT.cpp @@ -330,7 +330,7 @@ TEST_CASE("[multiplicativeModifiers] Compare with envelopes") ccData.data.value = 100.0f; resources.midiState.ccEvent(5, 20, 0.1); - resources.midiState.ccEvent(10, 20, 0.2); + resources.midiState.ccEvent(10, 20, 0.8); std::array output; std::array envelope;