X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Frb_effect.cc;h=cd597c6f5661c6f6d499a52813ea2adc0bc91c25;hb=7ba9223f9f43e1624f6d9b86534519a5f30f976c;hp=805782807ae37198c1c7279efad4f5d7f2949227;hpb=73192bc1a7ea55fa1864dc3826845b15c00dd2ec;p=ardour.git diff --git a/libs/ardour/rb_effect.cc b/libs/ardour/rb_effect.cc index 805782807a..cd597c6f56 100644 --- a/libs/ardour/rb_effect.cc +++ b/libs/ardour/rb_effect.cc @@ -20,17 +20,19 @@ #include #include +#include + #include "pbd/error.h" -#include "rubberband/RubberBandStretcher.h" -#include "ardour/types.h" -#include "ardour/stretch.h" +#include "ardour/audioregion.h" +#include "ardour/audiosource.h" #include "ardour/pitch.h" -#include "ardour/audiofilesource.h" +#include "ardour/progress.h" #include "ardour/session.h" -#include "ardour/audioregion.h" +#include "ardour/stretch.h" +#include "ardour/types.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -52,7 +54,7 @@ RBEffect::RBEffect (Session& s, TimeFXRequest& req) , tsr (req) { - tsr.progress = 0.0f; + } RBEffect::~RBEffect () @@ -60,7 +62,7 @@ RBEffect::~RBEffect () } int -RBEffect::run (boost::shared_ptr r, Progress*) +RBEffect::run (boost::shared_ptr r, Progress* progress) { boost::shared_ptr region = boost::dynamic_pointer_cast (r); @@ -70,7 +72,6 @@ RBEffect::run (boost::shared_ptr r, Progress*) } SourceList nsrcs; - framecnt_t done; int ret = -1; const framecnt_t bufsize = 256; gain_t* gain_buffer = 0; @@ -78,10 +79,8 @@ RBEffect::run (boost::shared_ptr r, Progress*) char suffix[32]; string new_name; string::size_type at; - framepos_t pos = 0; - framecnt_t avail = 0; boost::shared_ptr result; - + cerr << "RBEffect: source region: position = " << region->position() << ", start = " << region->start() << ", length = " << region->length() @@ -160,7 +159,7 @@ RBEffect::run (boost::shared_ptr r, Progress*) (session.frame_rate(), channels, (RubberBandStretcher::Options) tsr.opts, stretch, shift); - tsr.progress = 0.0f; + progress->set_progress (0); tsr.done = false; stretcher.setExpectedInputDuration(read_duration); @@ -182,6 +181,10 @@ RBEffect::run (boost::shared_ptr r, Progress*) /* create new sources */ + framepos_t pos = 0; + framecnt_t avail = 0; + framecnt_t done = 0; + if (make_new_sources (region, nsrcs, suffix)) { goto out; } @@ -199,10 +202,6 @@ RBEffect::run (boost::shared_ptr r, Progress*) /* study first, process afterwards. */ - pos = 0; - avail = 0; - done = 0; - try { while (pos < read_duration && !tsr.cancel) { @@ -210,8 +209,6 @@ RBEffect::run (boost::shared_ptr r, Progress*) for (uint32_t i = 0; i < channels; ++i) { - this_read = 0; - framepos_t this_time; this_time = min(bufsize, read_duration - pos); @@ -238,7 +235,7 @@ RBEffect::run (boost::shared_ptr r, Progress*) pos += this_read; done += this_read; - tsr.progress = ((float) done / read_duration) * 0.25; + progress->set_progress (((float) done / read_duration) * 0.25); stretcher.study(buffers, this_read, pos == read_duration); } @@ -252,7 +249,6 @@ RBEffect::run (boost::shared_ptr r, Progress*) for (uint32_t i = 0; i < channels; ++i) { - this_read = 0; framepos_t this_time; this_time = min(bufsize, read_duration - pos); @@ -279,7 +275,7 @@ RBEffect::run (boost::shared_ptr r, Progress*) pos += this_read; done += this_read; - tsr.progress = 0.25 + ((float) done / read_duration) * 0.75; + progress->set_progress (0.25 + ((float) done / read_duration) * 0.75); stretcher.process(buffers, this_read, pos == read_duration); @@ -328,7 +324,7 @@ RBEffect::run (boost::shared_ptr r, Progress*) } } catch (runtime_error& err) { - error << _("timefx code failure. please notify ardour-developers.") << endmsg; + error << string_compose (_("programming error: %1"), X_("timefx code failure")) << endmsg; error << err.what() << endmsg; goto out; } @@ -355,7 +351,10 @@ RBEffect::run (boost::shared_ptr r, Progress*) stretch, shift); (*x)->set_master_sources (region->master_sources()); - (*x)->set_length( (*x)->length() * stretch, this); + /* multiply the old (possibly previously stretched) region length by the extra + stretch this time around to get its new length. this is a non-music based edit atm. + */ + (*x)->set_length ((*x)->length() * tsr.time_fraction, 0); } /* stretch region gain envelope */ @@ -373,7 +372,7 @@ RBEffect::run (boost::shared_ptr r, Progress*) if (buffers) { for (uint32_t i = 0; i < channels; ++i) { - delete buffers[i]; + delete [] buffers[i]; } delete [] buffers; } @@ -384,8 +383,6 @@ RBEffect::run (boost::shared_ptr r, Progress*) } } - tsr.done = true; - return ret; }