diff options
author | David Robillard <d@drobilla.net> | 2006-10-21 22:59:29 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2006-10-21 22:59:29 +0000 |
commit | 22e41063d5b0c4c80eab3e3a375b734ca7d76169 (patch) | |
tree | e95cc99ff4e2f12bb41d1fdb0d1abf9525e92416 /libs/ardour/audioregion.cc | |
parent | fedf3d34f32264ac57c6a222b678dc90f2bb1a88 (diff) |
Merged with trunk R999.
git-svn-id: svn://localhost/ardour2/branches/midi@1000 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audioregion.cc')
-rw-r--r-- | libs/ardour/audioregion.cc | 175 |
1 files changed, 37 insertions, 138 deletions
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index d7724f3a39..31776d7be5 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -58,14 +58,6 @@ Change AudioRegion::EnvelopeActiveChanged = ARDOUR::new_change(); Change AudioRegion::ScaleAmplitudeChanged = ARDOUR::new_change(); Change AudioRegion::EnvelopeChanged = ARDOUR::new_change(); -AudioRegionState::AudioRegionState (string why) - : RegionState (why) - , _fade_in (0.0, 2.0, 1.0, false) - , _fade_out (0.0, 2.0, 1.0, false) - , _envelope (0.0, 2.0, 1.0, false) -{ -} - /** Basic AudioRegion constructor (one channel) */ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, nframes_t start, nframes_t length) : Region (src, start, length, PBD::basename_nosuffix(src->name()), DataType::AUDIO, 0, Region::Flag(Region::DefaultFlags|Region::External)), @@ -83,8 +75,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, nframes_t start, n set_default_fades (); set_default_envelope (); - save_state ("initial state"); - _envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed)); } @@ -104,7 +94,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, nframes_t start, n set_default_fades (); set_default_envelope (); - save_state ("initial state"); _envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed)); } @@ -120,7 +109,6 @@ AudioRegion::AudioRegion (SourceList& srcs, nframes_t start, nframes_t length, c set_default_fades (); set_default_envelope (); - save_state ("initial state"); _envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed)); } @@ -160,8 +148,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, nframes_t _scale_amplitude = other->_scale_amplitude; - save_state ("initial state"); - _envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed)); assert(_type == DataType::AUDIO); @@ -179,8 +165,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other) _fade_in_disabled = 0; _fade_out_disabled = 0; - save_state ("initial state"); - _envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed)); assert(_type == DataType::AUDIO); @@ -203,8 +187,6 @@ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, const XMLNode& nod throw failed_constructor(); } - save_state ("initial state"); - _envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed)); assert(_type == DataType::AUDIO); @@ -223,8 +205,6 @@ AudioRegion::AudioRegion (SourceList& srcs, const XMLNode& node) throw failed_constructor(); } - save_state ("initial state"); - _envelope.StateChanged.connect (mem_fun (*this, &AudioRegion::envelope_changed)); assert(_type == DataType::AUDIO); @@ -232,92 +212,11 @@ AudioRegion::AudioRegion (SourceList& srcs, const XMLNode& node) AudioRegion::~AudioRegion () { + cerr << "====== " << _name << " DESTRUCTOR @ " << this << endl; notify_callbacks (); GoingAway (); /* EMIT SIGNAL */ } -StateManager::State* -AudioRegion::state_factory (std::string why) const -{ - AudioRegionState* state = new AudioRegionState (why); - - Region::store_state (*state); - - state->_fade_in = _fade_in; - state->_fade_out = _fade_out; - state->_envelope = _envelope; - state->_scale_amplitude = _scale_amplitude; - state->_fade_in_disabled = _fade_in_disabled; - state->_fade_out_disabled = _fade_out_disabled; - - return state; -} - -Change -AudioRegion::restore_state (StateManager::State& sstate) -{ - AudioRegionState* state = dynamic_cast<AudioRegionState*> (&sstate); - - Change what_changed = Region::restore_and_return_flags (*state); - - if (_flags != Flag (state->_flags)) { - - uint32_t old_flags = _flags; - - _flags = Flag (state->_flags); - - if ((old_flags ^ state->_flags) & EnvelopeActive) { - what_changed = Change (what_changed|EnvelopeActiveChanged); - } - } - - if (!(_fade_in == state->_fade_in)) { - _fade_in = state->_fade_in; - what_changed = Change (what_changed|FadeInChanged); - } - - if (!(_fade_out == state->_fade_out)) { - _fade_out = state->_fade_out; - what_changed = Change (what_changed|FadeOutChanged); - } - - if (_scale_amplitude != state->_scale_amplitude) { - _scale_amplitude = state->_scale_amplitude; - what_changed = Change (what_changed|ScaleAmplitudeChanged); - } - - if (_fade_in_disabled != state->_fade_in_disabled) { - if (_fade_in_disabled == 0 && state->_fade_in_disabled) { - set_fade_in_active (false); - } else if (_fade_in_disabled && state->_fade_in_disabled == 0) { - set_fade_in_active (true); - } - _fade_in_disabled = state->_fade_in_disabled; - } - - if (_fade_out_disabled != state->_fade_out_disabled) { - if (_fade_out_disabled == 0 && state->_fade_out_disabled) { - set_fade_out_active (false); - } else if (_fade_out_disabled && state->_fade_out_disabled == 0) { - set_fade_out_active (true); - } - _fade_out_disabled = state->_fade_out_disabled; - } - - /* XXX need a way to test stored state versus current for envelopes */ - - _envelope = state->_envelope; - what_changed = Change (what_changed); - - return what_changed; -} - -UndoAction -AudioRegion::get_memento() const -{ - return sigc::bind (mem_fun (*(const_cast<AudioRegion *> (this)), &StateManager::use_state), _current_state_id); -} - void AudioRegion::set_envelope_active (bool yn) { @@ -330,11 +229,7 @@ AudioRegion::set_envelope_active (bool yn) snprintf (buf, sizeof (buf), "envelope off"); _flags = Flag (_flags & ~EnvelopeActive); } - if (!_frozen) { - save_state (buf); - } send_change (EnvelopeActiveChanged); - } } @@ -555,6 +450,8 @@ AudioRegion::state (bool full) } else { _fade_in.store_state (*child); } + + child->add_property (X_("active"), _fade_in_disabled ? X_("no") : X_("yes")); child = node.add_child (X_("FadeOut")); @@ -563,6 +460,8 @@ AudioRegion::state (bool full) } else { _fade_out.store_state (*child); } + + child->add_property (X_("active"), _fade_out_disabled ? X_("no") : X_("yes")); } child = node.add_child ("Envelope"); @@ -585,6 +484,7 @@ AudioRegion::state (bool full) } else { _envelope.store_state (*child); } + } else { child->add_property ("default", "yes"); } @@ -597,14 +497,16 @@ AudioRegion::state (bool full) } int -AudioRegion::set_state (const XMLNode& node) +AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool send) { const XMLNodeList& nlist = node.children(); const XMLProperty *prop; LocaleGuard lg (X_("POSIX")); - Region::set_state (node); + Region::set_live_state (node, what_changed, false); + uint32_t old_flags = _flags; + if ((prop = node.property ("flags")) != 0) { _flags = Flag (strtol (prop->value().c_str(), (char **) 0, 16)); @@ -612,6 +514,16 @@ AudioRegion::set_state (const XMLNode& node) _flags = Flag (_flags & ~Region::RightOfSplit); } + if ((old_flags ^ _flags) & Muted) { + what_changed = Change (what_changed|MuteChanged); + } + if ((old_flags ^ _flags) & Opaque) { + what_changed = Change (what_changed|OpacityChanged); + } + if ((old_flags ^ _flags) & Locked) { + what_changed = Change (what_changed|LockChanged); + } + if ((prop = node.property ("scale-gain")) != 0) { _scale_amplitude = atof (prop->value().c_str()); } else { @@ -647,7 +559,6 @@ AudioRegion::set_state (const XMLNode& node) if ((prop = child->property ("default")) != 0 || (prop = child->property ("steepness")) != 0) { set_default_fade_in (); } else { - _fade_in.load_state (*child); } @@ -663,9 +574,24 @@ AudioRegion::set_state (const XMLNode& node) } } + if (send) { + send_change (what_changed); + } + return 0; } +int +AudioRegion::set_state (const XMLNode& node) +{ + /* Region::set_state() calls the virtual set_live_state(), + which will get us back to AudioRegion::set_live_state() + to handle the relevant stuff. + */ + + return Region::set_state (node); +} + void AudioRegion::set_fade_in_shape (FadeShape shape) { @@ -735,10 +661,6 @@ AudioRegion::set_fade_in (FadeShape shape, nframes_t len) _fade_in.thaw (); _fade_in_shape = shape; - if (!_frozen) { - save_state (_("fade in change")); - } - send_change (FadeInChanged); } @@ -797,10 +719,6 @@ AudioRegion::set_fade_out (FadeShape shape, nframes_t len) _fade_out.thaw (); _fade_out_shape = shape; - if (!_frozen) { - save_state (_("fade in change")); - } - send_change (FadeOutChanged); } @@ -811,13 +729,6 @@ AudioRegion::set_fade_in_length (nframes_t len) if (changed) { _flags = Flag (_flags & ~DefaultFadeIn); - - if (!_frozen) { - char buf[64]; - snprintf (buf, sizeof (buf), "fade in length changed to %u", len); - save_state (buf); - } - send_change (FadeInChanged); } } @@ -829,12 +740,6 @@ AudioRegion::set_fade_out_length (nframes_t len) if (changed) { _flags = Flag (_flags & ~DefaultFadeOut); - - if (!_frozen) { - char buf[64]; - snprintf (buf, sizeof (buf), "fade out length changed to %u", len); - save_state (buf); - } } send_change (FadeOutChanged); @@ -970,7 +875,8 @@ AudioRegion::separate_by_channel (Session& session, vector<AudioRegion*>& v) con int AudioRegion::apply (AudioFilter& filter) { - return filter.run (boost::shared_ptr<AudioRegion> (this)); + boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (shared_from_this()); + return filter.run (ar); } int @@ -1110,12 +1016,6 @@ AudioRegion::normalize_to (float target_dB) _scale_amplitude = target/maxamp; - if (!_frozen) { - char buf[64]; - snprintf (buf, sizeof (buf), _("normalized to %.2fdB"), target_dB); - save_state (buf); - } - /* tell the diskstream we're in */ if (_playlist) { @@ -1130,7 +1030,6 @@ AudioRegion::normalize_to (float target_dB) void AudioRegion::envelope_changed (Change ignored) { - save_state (_("envelope change")); send_change (EnvelopeChanged); } |