summaryrefslogtreecommitdiff
path: root/libs/ardour/audio_playlist.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-05-26 01:24:01 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-05-26 01:24:01 +0000
commite3f73f265511cb6890e646094956da8c438e3505 (patch)
treea3ebbb5f7d0902ca7c7dcc027856cefef8698dab /libs/ardour/audio_playlist.cc
parent2d017301f99a42dcbff4239b8767c0e14331ff77 (diff)
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
Diffstat (limited to 'libs/ardour/audio_playlist.cc')
-rw-r--r--libs/ardour/audio_playlist.cc123
1 files changed, 72 insertions, 51 deletions
diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc
index 76cab14699..2ebbdd5131 100644
--- a/libs/ardour/audio_playlist.cc
+++ b/libs/ardour/audio_playlist.cc
@@ -313,40 +313,51 @@ AudioPlaylist::check_crossfades (Evoral::Range<framepos_t> range)
/* Top's fade-in will cause an implicit fade-out of bottom */
- framecnt_t len = 0;
+ if (top->fade_in_is_xfade() && top->fade_in_is_short()) {
+
+ /* its already an xfade. if its
+ * really short, leave it
+ * alone.
+ */
- if (_capture_insertion_underway) {
- len = _session.config.get_short_xfade_seconds() * _session.frame_rate();
} else {
- switch (_session.config.get_xfade_model()) {
- case FullCrossfade:
- len = bottom->last_frame () - top->first_frame ();
- break;
- case ShortCrossfade:
+ framecnt_t len = 0;
+
+ if (_capture_insertion_underway) {
len = _session.config.get_short_xfade_seconds() * _session.frame_rate();
+ } else {
+ switch (_session.config.get_xfade_model()) {
+ case FullCrossfade:
+ len = bottom->last_frame () - top->first_frame ();
+ top->set_fade_in_is_short (false);
+ break;
+ case ShortCrossfade:
+ len = _session.config.get_short_xfade_seconds() * _session.frame_rate();
+ top->set_fade_in_is_short (true);
+ break;
+ }
+ }
+
+ top->set_fade_in_active (true);
+ top->set_fade_in_is_xfade (true);
+
+ /* XXX may 2012: -3dB and -6dB curves
+ * are the same right now
+ */
+
+ switch (_session.config.get_xfade_choice ()) {
+ case ConstantPowerMinus3dB:
+ top->set_fade_in (FadeConstantPower, len);
+ break;
+ case ConstantPowerMinus6dB:
+ top->set_fade_in (FadeConstantPower, len);
+ break;
+ case RegionFades:
+ top->set_fade_in_length (len);
break;
}
}
-
- top->set_fade_in_active (true);
- top->set_fade_in_is_xfade (true);
-
- /* XXX may 2012: -3dB and -6dB curves
- * are the same right now
- */
-
- switch (_session.config.get_xfade_choice ()) {
- case ConstantPowerMinus3dB:
- top->set_fade_in (FadeConstantPower, len);
- break;
- case ConstantPowerMinus6dB:
- top->set_fade_in (FadeConstantPower, len);
- break;
- case RegionFades:
- top->set_fade_in_length (len);
- break;
- }
-
+
done_start.insert (top);
}
@@ -361,35 +372,45 @@ AudioPlaylist::check_crossfades (Evoral::Range<framepos_t> range)
if (done_end.find (top) == done_end.end() && done_start.find (bottom) == done_start.end ()) {
/* Top's fade-out will cause an implicit fade-in of bottom */
- framecnt_t len = 0;
+
+ if (top->fade_out_is_xfade() && top->fade_out_is_short()) {
+
+ /* its already an xfade. if its
+ * really short, leave it
+ * alone.
+ */
- if (_capture_insertion_underway) {
- len = _session.config.get_short_xfade_seconds() * _session.frame_rate();
} else {
- switch (_session.config.get_xfade_model()) {
- case FullCrossfade:
- len = top->last_frame () - bottom->first_frame ();
- break;
- case ShortCrossfade:
+ framecnt_t len = 0;
+
+ if (_capture_insertion_underway) {
len = _session.config.get_short_xfade_seconds() * _session.frame_rate();
+ } else {
+ switch (_session.config.get_xfade_model()) {
+ case FullCrossfade:
+ len = top->last_frame () - bottom->first_frame ();
+ break;
+ case ShortCrossfade:
+ len = _session.config.get_short_xfade_seconds() * _session.frame_rate();
+ break;
+ }
+ }
+
+ top->set_fade_out_active (true);
+ top->set_fade_out_is_xfade (true);
+
+ switch (_session.config.get_xfade_choice ()) {
+ case ConstantPowerMinus3dB:
+ top->set_fade_out (FadeConstantPower, len);
+ break;
+ case ConstantPowerMinus6dB:
+ top->set_fade_out (FadeConstantPower, len);
+ break;
+ case RegionFades:
+ top->set_fade_out_length (len);
break;
}
}
-
- top->set_fade_out_active (true);
- top->set_fade_out_is_xfade (true);
-
- switch (_session.config.get_xfade_choice ()) {
- case ConstantPowerMinus3dB:
- top->set_fade_out (FadeConstantPower, len);
- break;
- case ConstantPowerMinus6dB:
- top->set_fade_out (FadeConstantPower, len);
- break;
- case RegionFades:
- top->set_fade_out_length (len);
- break;
- }
done_end.insert (top);
}