X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudioregion.cc;h=45454b0909028661da4ae1d377b1677efb60f5d3;hb=f372a661286bac38ec93a4c90cb8da056d856a0c;hp=0909140f91be8db7e0500c6fd23141706002af02;hpb=6ae4f104371ed433a79c8845de97428d964edd8b;p=ardour.git diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 0909140f91..45454b0909 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -744,7 +744,7 @@ AudioRegion::read_from_sources (SourceList const & srcs, framecnt_t limit, Sampl /* copy an existing channel's data in for this non-existant one */ - uint32_t channel = n_channels() % chan_n; + uint32_t channel = chan_n % n_channels(); boost::shared_ptr src = boost::dynamic_pointer_cast (srcs[channel]); if (src->read (buf, _start + internal_offset, to_read) != to_read) { @@ -987,6 +987,8 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len) boost::shared_ptr c2 (new Evoral::ControlList (FadeInAutomation)); boost::shared_ptr c3 (new Evoral::ControlList (FadeInAutomation)); + const int num_steps = min ((framecnt_t) 16, len); + _fade_in->freeze (); _fade_in->clear (); _inverse_fade_in->clear (); @@ -999,15 +1001,15 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len) break; case FadeFast: - generate_db_fade (_fade_in.val(), len, 10, -60); + generate_db_fade (_fade_in.val(), len, num_steps, -60); reverse_curve (c1, _fade_in.val()); _fade_in->copy_events (*c1); generate_inverse_power_curve (_inverse_fade_in.val(), _fade_in.val()); break; case FadeSlow: - generate_db_fade (c1, len, 10, -1); // start off with a slow fade - generate_db_fade (c2, len, 10, -80); // end with a fast fade + generate_db_fade (c1, len, num_steps/2, -1); // start off with a slow fade + generate_db_fade (c2, len, num_steps/2, -80); // end with a fast fade merge_curves (_fade_in.val(), c1, c2); reverse_curve (c3, _fade_in.val()); _fade_in->copy_events (*c3); @@ -1015,8 +1017,8 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len) break; case FadeConstantPower: - for (int i = 0; i < 9; ++i) { - float dist = (float) i / 10.0f; + for (int i = 0; i < num_steps; ++i) { + float dist = (float) i / (num_steps+1.0); _fade_in->fast_simple_add (len*dist, sin (dist*M_PI/2)); } _fade_in->fast_simple_add (len, 1.0); @@ -1029,7 +1031,6 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len) _fade_in->fast_simple_add (0.5*len, 0.6); //now generate a fade-out curve by successively applying a gain drop const float breakpoint = 0.7; //linear for first 70% - const int num_steps = 9; for (int i = 2; i < num_steps; i++) { float coeff = (1.0-breakpoint); for (int j = 0; j < i; j++) {