summaryrefslogtreecommitdiff
path: root/libs/ardour/audioregion.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/audioregion.cc')
-rw-r--r--libs/ardour/audioregion.cc45
1 files changed, 37 insertions, 8 deletions
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index 5a99c164d9..729398cf21 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -294,6 +294,8 @@ AudioRegion::connect_to_header_position_offset_changed ()
void
AudioRegion::listen_to_my_curves ()
{
+ cerr << _name << ": listeing my own curves\n";
+
_envelope->StateChanged.connect_same_thread (*this, boost::bind (&AudioRegion::envelope_changed, this));
_fade_in->StateChanged.connect_same_thread (*this, boost::bind (&AudioRegion::fade_in_changed, this));
_fade_out->StateChanged.connect_same_thread (*this, boost::bind (&AudioRegion::fade_out_changed, this));
@@ -637,8 +639,15 @@ AudioRegion::set_live_state (const XMLNode& node, int version, Change& what_chan
const XMLNodeList& nlist = node.children();
const XMLProperty *prop;
LocaleGuard lg (X_("POSIX"));
+ boost::shared_ptr<Playlist> the_playlist (_playlist.lock());
+
+ freeze ();
+ if (the_playlist) {
+ the_playlist->freeze ();
+ }
Region::set_live_state (node, version, what_changed, false);
+ cerr << "After region SLS, wc = " << what_changed << endl;
uint32_t old_flags = _flags;
@@ -661,23 +670,32 @@ AudioRegion::set_live_state (const XMLNode& node, int version, Change& what_chan
if ((old_flags ^ _flags) & Muted) {
what_changed = Change (what_changed|MuteChanged);
+ cerr << _name << " mute changed\n";
}
if ((old_flags ^ _flags) & Opaque) {
what_changed = Change (what_changed|OpacityChanged);
+ cerr << _name << " opacity changed\n";
}
if ((old_flags ^ _flags) & Locked) {
what_changed = Change (what_changed|LockChanged);
+ cerr << _name << " lock changed\n";
}
if ((prop = node.property ("scale-gain")) != 0) {
- _scale_amplitude = atof (prop->value().c_str());
- what_changed = Change (what_changed|ScaleAmplitudeChanged);
+ float a = atof (prop->value().c_str());
+ if (a != _scale_amplitude) {
+ _scale_amplitude = a;
+ what_changed = Change (what_changed|ScaleAmplitudeChanged);
+ cerr << _name << " amp changed\n";
+ }
} else {
_scale_amplitude = 1.0;
}
/* Now find envelope description and other misc child items */
+ _envelope->freeze ();
+
for (XMLNodeConstIterator niter = nlist.begin(); niter != nlist.end(); ++niter) {
XMLNode *child;
@@ -685,6 +703,7 @@ AudioRegion::set_live_state (const XMLNode& node, int version, Change& what_chan
child = (*niter);
+#if 0
if (child->name() == "Envelope") {
_envelope->clear ();
@@ -696,6 +715,9 @@ AudioRegion::set_live_state (const XMLNode& node, int version, Change& what_chan
_envelope->set_max_xval (_length);
_envelope->truncate_end (_length);
+ cerr << _name << " envelope changd\n";
+
+
} else if (child->name() == "FadeIn") {
_fade_in->clear ();
@@ -716,6 +738,7 @@ AudioRegion::set_live_state (const XMLNode& node, int version, Change& what_chan
set_fade_in_active (false);
}
}
+ cerr << _name << " fadein changd\n";
} else if (child->name() == "FadeOut") {
@@ -737,14 +760,24 @@ AudioRegion::set_live_state (const XMLNode& node, int version, Change& what_chan
set_fade_out_active (false);
}
}
+ cerr << _name << " fadeout changd\n";
}
+#endif
}
+ _envelope->thaw ();
+ thaw ("");
+
if (send) {
+ cerr << _name << ": audio final change: " << hex << what_changed << dec << endl;
send_change (what_changed);
}
+ if (the_playlist) {
+ the_playlist->thaw ();
+ }
+
return 0;
}
@@ -836,8 +869,6 @@ AudioRegion::set_fade_in (FadeShape shape, nframes_t len)
}
_fade_in->thaw ();
-
- send_change (FadeInChanged);
}
void
@@ -903,8 +934,6 @@ AudioRegion::set_fade_out (FadeShape shape, nframes_t len)
}
_fade_out->thaw ();
-
- send_change (FadeOutChanged);
}
void
@@ -1175,7 +1204,7 @@ AudioRegion::set_scale_amplitude (gain_t g)
/* tell the diskstream we're in */
if (pl) {
- pl->Modified();
+ pl->ContentsChanged();
}
/* tell everybody else */
@@ -1245,7 +1274,7 @@ AudioRegion::normalize_to (float target_dB)
boost::shared_ptr<Playlist> pl (playlist());
if (pl) {
- pl->Modified();
+ pl->ContentsChanged();
}
/* tell everybody else */