From e3f73f265511cb6890e646094956da8c438e3505 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 26 May 2012 01:24:01 +0000 Subject: convert audioregion xfade stuff to properties, add "is-short" property for fade in and out so that we can keep track of whether an (x)fade is supposed to remain "short", and don't do "mess-with-region-below" stuff when trimming a short xfade. should be back-compatible with 3beta4a git-svn-id: svn://localhost/ardour2/branches/3.0@12452 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/audioregion.cc | 113 ++++++++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 32 deletions(-) (limited to 'libs/ardour/audioregion.cc') diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index a57aecb388..66b978131d 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -61,6 +61,10 @@ namespace ARDOUR { PBD::PropertyDescriptor fade_in_active; PBD::PropertyDescriptor fade_out_active; PBD::PropertyDescriptor scale_amplitude; + PBD::PropertyDescriptor fade_out_is_xfade; + PBD::PropertyDescriptor fade_out_is_short; + PBD::PropertyDescriptor fade_in_is_xfade; + PBD::PropertyDescriptor fade_in_is_short; } } @@ -164,6 +168,14 @@ AudioRegion::make_property_quarks () DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for fade-out-active = %1\n", Properties::fade_out_active.property_id)); Properties::scale_amplitude.property_id = g_quark_from_static_string (X_("scale-amplitude")); DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for scale-amplitude = %1\n", Properties::scale_amplitude.property_id)); + Properties::fade_out_is_xfade.property_id = g_quark_from_static_string (X_("fade-out-is-xfade")); + DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for fade-out-is-xfade = %1\n", Properties::fade_out_is_xfade.property_id)); + Properties::fade_out_is_short.property_id = g_quark_from_static_string (X_("fade-out-is-short")); + DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for fade-out-is-short = %1\n", Properties::fade_out_is_short.property_id)); + Properties::fade_in_is_xfade.property_id = g_quark_from_static_string (X_("fade-in-is-xfade")); + DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for fade-in-is-xfade = %1\n", Properties::fade_in_is_xfade.property_id)); + Properties::fade_in_is_short.property_id = g_quark_from_static_string (X_("fade-in-is-short")); + DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for fade-in-is-short = %1\n", Properties::fade_in_is_short.property_id)); } void @@ -177,6 +189,10 @@ AudioRegion::register_properties () add_property (_fade_in_active); add_property (_fade_out_active); add_property (_scale_amplitude); + add_property (_fade_out_is_xfade); + add_property (_fade_out_is_short); + add_property (_fade_in_is_xfade); + add_property (_fade_in_is_short); } #define AUDIOREGION_STATE_DEFAULT \ @@ -185,7 +201,11 @@ AudioRegion::register_properties () , _default_fade_out (Properties::default_fade_out, true) \ , _fade_in_active (Properties::fade_in_active, true) \ , _fade_out_active (Properties::fade_out_active, true) \ - , _scale_amplitude (Properties::scale_amplitude, 1.0) + , _scale_amplitude (Properties::scale_amplitude, 1.0) \ + , _fade_in_is_xfade (Properties::fade_in_is_xfade, false) \ + , _fade_out_is_xfade (Properties::fade_out_is_xfade, false) \ + , _fade_in_is_short (Properties::fade_in_is_short, false) \ + , _fade_out_is_short (Properties::fade_out_is_short, false) #define AUDIOREGION_COPY_STATE(other) \ _envelope_active (Properties::envelope_active, other->_envelope_active) \ @@ -193,7 +213,11 @@ AudioRegion::register_properties () , _default_fade_out (Properties::default_fade_out, other->_default_fade_out) \ , _fade_in_active (Properties::fade_in_active, other->_fade_in_active) \ , _fade_out_active (Properties::fade_out_active, other->_fade_out_active) \ - , _scale_amplitude (Properties::scale_amplitude, other->_scale_amplitude) + , _scale_amplitude (Properties::scale_amplitude, other->_scale_amplitude) \ + , _fade_in_is_xfade (Properties::fade_in_is_xfade, other->_fade_in_is_xfade) \ + , _fade_out_is_xfade (Properties::fade_out_is_xfade, other->_fade_out_is_xfade) \ + , _fade_in_is_short (Properties::fade_in_is_short, other->_fade_in_is_short) \ + , _fade_out_is_short (Properties::fade_out_is_short, other->_fade_out_is_short) /* a Session will reset these to its chosen defaults by calling AudioRegion::set_default_fade() */ void @@ -223,8 +247,6 @@ AudioRegion::AudioRegion (Session& s, framepos_t start, framecnt_t len, std::str , _envelope (new AutomationList(Evoral::Parameter(EnvelopeAutomation))) , _fade_in_suspended (0) , _fade_out_suspended (0) - , _fade_in_is_xfade (false) - , _fade_out_is_xfade (false) { init (); assert (_sources.size() == _master_sources.size()); @@ -242,8 +264,6 @@ AudioRegion::AudioRegion (const SourceList& srcs) , _envelope (new AutomationList(Evoral::Parameter(EnvelopeAutomation))) , _fade_in_suspended (0) , _fade_out_suspended (0) - , _fade_in_is_xfade (false) - , _fade_out_is_xfade (false) { init (); assert (_sources.size() == _master_sources.size()); @@ -263,8 +283,6 @@ AudioRegion::AudioRegion (boost::shared_ptr other) , _envelope (new AutomationList (*other->_envelope, 0, other->_length)) , _fade_in_suspended (0) , _fade_out_suspended (0) - , _fade_in_is_xfade (false) - , _fade_out_is_xfade (false) { /* don't use init here, because we got fade in/out from the other region */ @@ -291,8 +309,6 @@ AudioRegion::AudioRegion (boost::shared_ptr other, framecnt_t , _envelope (new AutomationList (*other->_envelope, offset, other->_length)) , _fade_in_suspended (0) , _fade_out_suspended (0) - , _fade_in_is_xfade (false) - , _fade_out_is_xfade (false) { /* don't use init here, because we got fade in/out from the other region */ @@ -316,8 +332,6 @@ AudioRegion::AudioRegion (boost::shared_ptr other, const Sour , _envelope (new AutomationList (*other->_envelope)) , _fade_in_suspended (0) , _fade_out_suspended (0) - , _fade_in_is_xfade (false) - , _fade_out_is_xfade (false) { /* make-a-sort-of-copy-with-different-sources constructor (used by audio filter) */ @@ -341,8 +355,6 @@ AudioRegion::AudioRegion (SourceList& srcs) , _envelope (new AutomationList(Evoral::Parameter(EnvelopeAutomation))) , _fade_in_suspended (0) , _fade_out_suspended (0) - , _fade_in_is_xfade (false) - , _fade_out_is_xfade (false) { init (); @@ -806,7 +818,6 @@ AudioRegion::state () } child = node.add_child (X_("FadeIn")); - child->add_property ("is-xfade", (_fade_in_is_xfade ? "yes" : "no")); if (_default_fade_in) { child->add_property ("default", "yes"); @@ -820,7 +831,6 @@ AudioRegion::state () } child = node.add_child (X_("FadeOut")); - child->add_property ("is-xfade", (_fade_out_is_xfade ? "yes" : "no")); if (_default_fade_out) { child->add_property ("default", "yes"); @@ -899,12 +909,6 @@ AudioRegion::_set_state (const XMLNode& node, int version, PropertyChange& what_ } } - if ((prop = child->property ("is-xfade")) != 0) { - _fade_in_is_xfade = string_is_affirmative (prop->value()); - } else { - _fade_in_is_xfade = false; - } - if ((prop = child->property ("active")) != 0) { if (string_is_affirmative (prop->value())) { set_fade_in_active (true); @@ -913,6 +917,14 @@ AudioRegion::_set_state (const XMLNode& node, int version, PropertyChange& what_ } } + /* legacy a3 */ + + if ((prop = child->property ("is-xfade")) != 0) { + _fade_in_is_xfade = string_is_affirmative (prop->value()); + } else { + _fade_in_is_xfade = false; + } + } else if (child->name() == "FadeOut") { _fade_out->clear (); @@ -925,14 +937,8 @@ AudioRegion::_set_state (const XMLNode& node, int version, PropertyChange& what_ _fade_out->set_state (*grandchild, version); } } - - if ((prop = child->property ("is-xfade")) != 0) { - _fade_out_is_xfade = string_is_affirmative (prop->value()); - } else { - _fade_out_is_xfade = false; - } - - if ((prop = child->property ("active")) != 0) { + + if ((prop = child->property ("active")) != 0) { if (string_is_affirmative (prop->value())) { set_fade_out_active (true); } else { @@ -940,6 +946,14 @@ AudioRegion::_set_state (const XMLNode& node, int version, PropertyChange& what_ } } + /* legacy a3 */ + + if ((prop = child->property ("is-xfade")) != 0) { + _fade_out_is_xfade = string_is_affirmative (prop->value()); + } else { + _fade_out_is_xfade = false; + } + } else if (child->name() == "InvFadeIn") { XMLNode* grandchild = child->child ("AutomationList"); if (grandchild) { @@ -1163,7 +1177,7 @@ AudioRegion::set_fade_in_length (framecnt_t len) if (_session.config.get_xfade_model() == FullCrossfade && _session.config.get_auto_xfade() && - _fade_in_is_xfade) { + _fade_in_is_xfade && !_fade_in_is_short) { /* trim a single other region below us to the new start of the fade. @@ -1202,7 +1216,7 @@ AudioRegion::set_fade_out_length (framecnt_t len) if (_session.config.get_xfade_model() == FullCrossfade && _session.config.get_auto_xfade() && - _fade_out_is_xfade) { + _fade_out_is_xfade && !_fade_out_is_short) { /* trim a single other region below us to the new start of the fade. @@ -1256,6 +1270,7 @@ AudioRegion::set_default_fade_in () { _fade_in_suspended = 0; _fade_in_is_xfade = false; + _fade_in_is_short = true; set_fade_in (FadeLinear, 64); } @@ -1264,6 +1279,7 @@ AudioRegion::set_default_fade_out () { _fade_out_suspended = 0; _fade_out_is_xfade = false; + _fade_out_is_short = true; set_fade_out (FadeLinear, 64); } @@ -1835,13 +1851,46 @@ AudioRegion::body_range () const void AudioRegion::set_fade_in_is_xfade (bool yn) { + if (yn == _fade_in_is_xfade) { + return; + } + _fade_in_is_xfade = yn; + send_change (PropertyChange (Properties::fade_in_is_xfade)); } void AudioRegion::set_fade_out_is_xfade (bool yn) { + if (yn == _fade_out_is_xfade) { + return; + } + _fade_out_is_xfade = yn; + send_change (PropertyChange (Properties::fade_out_is_xfade)); +} + +void +AudioRegion::set_fade_in_is_short (bool yn) +{ + if (yn == _fade_in_is_short) { + return; + } + + _fade_in_is_short = yn; + send_change (PropertyChange (Properties::fade_in_is_short)); + +} + +void +AudioRegion::set_fade_out_is_short (bool yn) +{ + if (yn == _fade_out_is_short) { + return; + } + + _fade_out_is_short = yn; + send_change (PropertyChange (Properties::fade_out_is_short)); } boost::shared_ptr -- cgit v1.2.3