summaryrefslogtreecommitdiff
path: root/libs/ardour/audioregion.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-10-21 22:59:29 +0000
committerDavid Robillard <d@drobilla.net>2006-10-21 22:59:29 +0000
commit22e41063d5b0c4c80eab3e3a375b734ca7d76169 (patch)
treee95cc99ff4e2f12bb41d1fdb0d1abf9525e92416 /libs/ardour/audioregion.cc
parentfedf3d34f32264ac57c6a222b678dc90f2bb1a88 (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.cc175
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);
}