From c6c2855a5608acab267cc27df9b265d0d5b4c162 Mon Sep 17 00:00:00 2001 From: xenakios Date: Wed, 28 Feb 2018 00:32:18 +0200 Subject: [PATCH] Added scaling transform for envelope --- Source/PluginProcessor.cpp | 1 + Source/envelope_component.cpp | 4 ++++ Source/jcdp_envelope.h | 9 +++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 6415efd..2ea0120 100644 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -82,6 +82,7 @@ PaulstretchpluginAudioProcessor::PaulstretchpluginAudioProcessor() m_playposinfo.timeInSeconds = 0.0; m_free_filter_envelope = std::make_shared(); + m_free_filter_envelope->SetName("Free filter"); m_free_filter_envelope->AddNode({ 0.0,0.75 }); m_free_filter_envelope->AddNode({ 1.0,0.75 }); m_free_filter_envelope->set_reset_nodes(m_free_filter_envelope->get_all_nodes()); diff --git a/Source/envelope_component.cpp b/Source/envelope_component.cpp index c8ed22c..1c85ce1 100644 --- a/Source/envelope_component.cpp +++ b/Source/envelope_component.cpp @@ -321,6 +321,10 @@ bool EnvelopeComponent::keyPressed(const KeyPress & ev) m_envelope->m_transform_y_shift += 0.01; if (ev == 'D') m_envelope->m_transform_y_shift -= 0.01; + if (ev == 'R') + m_envelope->m_transform_y_scale += 0.05; + if (ev == 'F') + m_envelope->m_transform_y_scale -= 0.05; repaint(); if (ev == KeyPress::deleteKey) diff --git a/Source/jcdp_envelope.h b/Source/jcdp_envelope.h index 2c1bdbe..00c19a0 100644 --- a/Source/jcdp_envelope.h +++ b/Source/jcdp_envelope.h @@ -561,6 +561,7 @@ public: String m_script; double m_transform_x_shift = 0.0; double m_transform_y_shift = 0.0; + double m_transform_y_scale = 1.0; inline double getTransformedValue(double x) { if (isTransformed() == false) @@ -568,11 +569,15 @@ public: double temp = fmod(x - m_transform_x_shift, 1.0); if (temp < 0.0) temp += 1.0; - return jlimit(0.0,1.0,GetInterpolatedNodeValue(temp) + m_transform_y_shift); + double v = GetInterpolatedNodeValue(temp); + double diff = 0.5 - v; + double scaled = 0.5 - m_transform_y_scale * diff; + double shifted = scaled + m_transform_y_shift; + return jlimit(0.0,1.0,shifted); } bool isTransformed() const { - return m_transform_x_shift != 0.0 || m_transform_y_shift != 0.0; + return m_transform_x_shift != 0.0 || m_transform_y_shift != 0.0 || m_transform_y_scale!=1.0; } private: nodes_t m_nodes;