From 2292e33ee418070c4d12971a72e01eb29dfc8de9 Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Thu, 13 Dec 2012 16:42:05 +0000 Subject: crossfade hack and slash. removed overlap checks, overlap mode, default length, fade_is_xfade, fade_is_short, and other leftovers from previous crossfade models. Draw crossfade drags in realtime so fade_line is no longer needed. remove code for hiding crossfades during a drag. moved crossfade rect to top layer so crossfade lines dont grab mouse focus. drag-trim-with-fixed-fade-anchor is partially implemented and needs discussion git-svn-id: svn://localhost/ardour2/branches/3.0@13659 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/audio_playlist.cc | 206 ------------------------------------------ 1 file changed, 206 deletions(-) (limited to 'libs/ardour/audio_playlist.cc') diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index fe13fe4e68..b008e4ff98 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -256,198 +256,6 @@ AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, fr return cnt; } -void -AudioPlaylist::check_crossfades (Evoral::Range range) -{ - if (in_set_state || in_partition || !_session.config.get_auto_xfade ()) { - return; - } - - boost::shared_ptr starts = regions_with_start_within (range); - boost::shared_ptr ends = regions_with_end_within (range); - - RegionList all = *starts; - std::copy (ends->begin(), ends->end(), back_inserter (all)); - - all.sort (RegionSortByLayer ()); - - set > done_start; - set > done_end; - - for (RegionList::reverse_iterator i = all.rbegin(); i != all.rend(); ++i) { - for (RegionList::reverse_iterator j = all.rbegin(); j != all.rend(); ++j) { - - if (i == j) { - continue; - } - - if ((*i)->muted() || (*j)->muted()) { - continue; - } - - if ((*i)->position() == (*j)->position() && ((*i)->length() == (*j)->length())) { - /* precise overlay: no xfade */ - continue; - } - - if ((*i)->position() == (*j)->position() || ((*i)->last_frame() == (*j)->last_frame())) { - /* starts or ends match: no xfade */ - continue; - } - - boost::shared_ptr top; - boost::shared_ptr bottom; - - if ((*i)->layer() < (*j)->layer()) { - top = boost::dynamic_pointer_cast (*j); - bottom = boost::dynamic_pointer_cast (*i); - } else { - top = boost::dynamic_pointer_cast (*i); - bottom = boost::dynamic_pointer_cast (*j); - } - - if (!top->opaque ()) { - continue; - } - - Evoral::OverlapType const c = top->coverage (bottom->position(), bottom->last_frame()); - - if (c == Evoral::OverlapStart) { - - /* top starts within bottom but covers bottom's end */ - - /* { ==== top ============ } - * [---- bottom -------------------] - */ - - if (done_start.find (top) == done_start.end() && done_end.find (bottom) == done_end.end ()) { - - /* Top's fade-in will cause an implicit fade-out of bottom */ - - if (top->fade_in_is_xfade() && top->fade_in_is_short()) { - - /* its already an xfade. if its - * really short, leave it - * alone. - */ - - } else { - 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 () + 1; - 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; - } - } - - done_start.insert (top); - } - - } else if (c == Evoral::OverlapEnd) { - - /* top covers start of bottom but ends within it */ - - /* [---- top ------------------------] - * { ==== bottom ============ } - */ - - 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 */ - - - if (top->fade_out_is_xfade() && top->fade_out_is_short()) { - - /* its already an xfade. if its - * really short, leave it - * alone. - */ - - } else { - 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 () + 1; - 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; - } - } - - done_end.insert (top); - } - } - } - } - - for (RegionList::iterator i = starts->begin(); i != starts->end(); ++i) { - if (done_start.find (*i) == done_start.end()) { - boost::shared_ptr r = boost::dynamic_pointer_cast (*i); - if (r->fade_in_is_xfade()) { - r->set_default_fade_in (); - } - } - } - - for (RegionList::iterator i = ends->begin(); i != ends->end(); ++i) { - if (done_end.find (*i) == done_end.end()) { - boost::shared_ptr r = boost::dynamic_pointer_cast (*i); - if (r->fade_out_is_xfade()) { - r->set_default_fade_out (); - } - } - } -} - void AudioPlaylist::dump () const { @@ -738,13 +546,6 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version) } } - if ((p = (*i)->property ("follow-overlap")) != 0) { - out_a->set_fade_out_is_short (!string_is_affirmative (p->value())); - } else { - out_a->set_fade_out_is_short (false); - } - - out_a->set_fade_out_is_xfade (true); out_a->set_fade_out_active (true); } else { @@ -763,13 +564,6 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version) } } - if ((p = (*i)->property ("follow-overlap")) != 0) { - in_a->set_fade_in_is_short (!string_is_affirmative (p->value())); - } else { - in_a->set_fade_in_is_short (false); - } - - in_a->set_fade_in_is_xfade (true); in_a->set_fade_in_active (true); } } -- cgit v1.2.3