From 16624f31391bae51db770a9e9bd8899e7746b068 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 20 Jun 2017 23:41:05 +0200 Subject: Add API to compute parameter delta, depending on AutomationType --- libs/ardour/ardour/parameter_descriptor.h | 4 ++++ libs/ardour/parameter_descriptor.cc | 39 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) (limited to 'libs/ardour') diff --git a/libs/ardour/ardour/parameter_descriptor.h b/libs/ardour/ardour/parameter_descriptor.h index a451887f22..c95b028aaa 100644 --- a/libs/ardour/ardour/parameter_descriptor.h +++ b/libs/ardour/ardour/parameter_descriptor.h @@ -73,6 +73,10 @@ struct LIBARDOUR_API ParameterDescriptor : public Evoral::ParameterDescriptor */ float from_interface (float) const; + bool is_linear () const; + float compute_delta (float from, float to) const; + float apply_delta (float value, float delta) const; + /** Set step, smallstep, and largestep, based on current description. */ void update_steps(); diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc index 7ed0c78512..a63c90d1db 100644 --- a/libs/ardour/parameter_descriptor.cc +++ b/libs/ardour/parameter_descriptor.cc @@ -354,4 +354,43 @@ ParameterDescriptor::from_interface (float val) const return val; } +bool +ParameterDescriptor::is_linear () const +{ + if (logarithmic) { + return false; + } + switch(type) { + case GainAutomation: + case EnvelopeAutomation: + case BusSendLevel: + return false; + default: + break; + } + return true; +} + +float +ParameterDescriptor::compute_delta (float from, float to) const +{ + if (is_linear ()) { + return to - from; + } + if (from == 0) { + return 0; + } + return to / from; +} + +float +ParameterDescriptor::apply_delta (float val, float delta) const +{ + if (is_linear ()) { + return val + delta; + } else { + return val * delta; + } +} + } // namespace ARDOUR -- cgit v1.2.3