From 997e4b1f9cd7ccfc704b7c035051da7f60d831e7 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 17 Mar 2008 20:54:03 +0000 Subject: merge with 2.0-ongoing @ rev 3147 git-svn-id: svn://localhost/ardour2/branches/3.0@3152 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/rb_effect.cc | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) (limited to 'libs/ardour/rb_effect.cc') diff --git a/libs/ardour/rb_effect.cc b/libs/ardour/rb_effect.cc index 9711e5e4dc..4daf5cb33a 100644 --- a/libs/ardour/rb_effect.cc +++ b/libs/ardour/rb_effect.cc @@ -74,6 +74,9 @@ RBEffect::run (boost::shared_ptr region) nframes_t pos = 0; int avail = 0; + // note: this_time_fraction is a ratio of original length. 1.0 = no change, + // 0.5 is half as long, 2.0 is twice as long, etc. + double this_time_fraction = tsr.time_fraction * region->stretch (); double this_pitch_fraction = tsr.pitch_fraction * region->shift (); @@ -81,14 +84,14 @@ RBEffect::run (boost::shared_ptr region) (RubberBandStretcher::Options) tsr.opts, this_time_fraction, this_pitch_fraction); - stretcher.setExpectedInputDuration(region->length()); - stretcher.setDebugLevel(1); - tsr.progress = 0.0f; tsr.done = false; uint32_t channels = region->n_channels(); - nframes_t duration = region->length(); + nframes_t duration = region->ancestral_length(); + + stretcher.setExpectedInputDuration(duration); + stretcher.setDebugLevel(1); /* the name doesn't need to be super-precise, but allow for 2 fractional digits just to disambiguate close but not identical FX @@ -149,8 +152,8 @@ RBEffect::run (boost::shared_ptr region) if (this_read != this_time) { error << string_compose - (_("tempoize: error reading data from %1"), - nsrcs[i]->name()) << endmsg; + (_("tempoize: error reading data from %1 at %2 (wanted %3, got %4)"), + region->name(), pos + region->position(), this_time, this_read) << endmsg; goto out; } } @@ -187,8 +190,8 @@ RBEffect::run (boost::shared_ptr region) if (this_read != this_time) { error << string_compose - (_("tempoize: error reading data from %1"), - nsrcs[i]->name()) << endmsg; + (_("tempoize: error reading data from %1 at %2 (wanted %3, got %4)"), + region->name(), pos + region->position(), this_time, this_read) << endmsg; goto out; } } @@ -257,21 +260,12 @@ RBEffect::run (boost::shared_ptr region) /* now reset ancestral data for each new region */ for (vector >::iterator x = results.begin(); x != results.end(); ++x) { - nframes64_t astart = (*x)->ancestral_start(); - nframes64_t alength = (*x)->ancestral_length(); - nframes_t start; - nframes_t length; - - // note: this_time_fraction is a ratio of original length. 1.0 = no change, - // 0.5 is half as long, 2.0 is twice as long, etc. - - float stretch = (*x)->stretch() * (tsr.time_fraction/100.0); - float shift = (*x)->shift() * tsr.pitch_fraction; - - start = (nframes_t) floor (astart + ((astart - (*x)->start()) / stretch)); - length = (nframes_t) floor (alength / stretch); - (*x)->set_ancestral_data (start, length, stretch, shift); + (*x)->set_ancestral_data (region->ancestral_start(), + region->ancestral_length(), + this_time_fraction, + this_pitch_fraction ); + (*x)->set_master_sources (region->get_master_sources()); } out: -- cgit v1.2.3