summaryrefslogtreecommitdiff
path: root/libs/ardour/automation_list.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/automation_list.cc')
-rw-r--r--libs/ardour/automation_list.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc
index ae78a217f7..6285de28ea 100644
--- a/libs/ardour/automation_list.cc
+++ b/libs/ardour/automation_list.cc
@@ -211,6 +211,10 @@ AutomationList::default_interpolation () const
case GainAutomation:
case BusSendLevel:
case EnvelopeAutomation:
+#ifndef XXX_NEW_INTERPOLATON__BREAK_SESSION_FORMAT_XXX
+ /* use old, wrong linear gain interpolation */
+ return ControlList::Linear;
+#endif
return ControlList::Exponential;
break;
case TrimAutomation:
@@ -342,7 +346,22 @@ AutomationList::state (bool full)
root->set_property ("automation-id", EventTypeMap::instance().to_symbol(_parameter));
root->set_property ("id", id());
+
+#ifndef XXX_NEW_INTERPOLATON__BREAK_SESSION_FORMAT_XXX
+ /* force new enums to existing ones in session-file */
+ Evoral::ControlList::InterpolationStyle is = _interpolation;
+ switch (is) {
+ case ControlList::Exponential:
+ case ControlList::Logarithmic:
+ is = ControlList::Linear;
+ break;
+ default:
+ break;
+ }
+ root->set_property ("interpolation-style", is);
+#else
root->set_property ("interpolation-style", _interpolation);
+#endif
if (full) {
/* never serialize state with Write enabled - too dangerous
@@ -512,6 +531,12 @@ AutomationList::set_state (const XMLNode& node, int version)
if (!node.get_property (X_("interpolation-style"), _interpolation)) {
_interpolation = default_interpolation ();
}
+#ifndef XXX_NEW_INTERPOLATON__BREAK_SESSION_FORMAT_XXX
+ /* internally force logarithmic and Trim params to use Log-scale */
+ if (_desc.logarithmic || _parameter.type() == TrimAutomation) {
+ _interpolation = ControlList::Logarithmic;
+ }
+#endif
if (node.get_property (X_("state"), _state)) {
if (_state == Write) {