diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-05-26 01:24:01 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-05-26 01:24:01 +0000 |
commit | e3f73f265511cb6890e646094956da8c438e3505 (patch) | |
tree | a3ebbb5f7d0902ca7c7dcc027856cefef8698dab /libs/ardour/audio_playlist.cc | |
parent | 2d017301f99a42dcbff4239b8767c0e14331ff77 (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.cc | 123 |
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); } |