Remove unused API
[ardour.git] / libs / ardour / rb_effect.cc
index 32a2d056d671d4786a96ee1aa8e26cba64dcff3a..23ffa944608ae03b458e25b92befb778b1993d1a 100644 (file)
 #include <algorithm>
 #include <cmath>
 
 #include <algorithm>
 #include <cmath>
 
+#include <rubberband/RubberBandStretcher.h>
+
 #include "pbd/error.h"
 #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/pitch.h"
-#include "ardour/audiofilesource.h"
+#include "ardour/progress.h"
 #include "ardour/session.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;
 
 using namespace std;
 using namespace ARDOUR;
@@ -52,7 +54,7 @@ RBEffect::RBEffect (Session& s, TimeFXRequest& req)
        , tsr (req)
 
 {
        , tsr (req)
 
 {
-       tsr.progress = 0.0f;
+
 }
 
 RBEffect::~RBEffect ()
 }
 
 RBEffect::~RBEffect ()
@@ -70,18 +72,15 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
        }
 
        SourceList nsrcs;
        }
 
        SourceList nsrcs;
-       nframes_t done;
        int ret = -1;
        int ret = -1;
-       const nframes_t bufsize = 256;
+       const samplecnt_t bufsize = 256;
        gain_t* gain_buffer = 0;
        Sample** buffers = 0;
        char suffix[32];
        string new_name;
        string::size_type at;
        gain_t* gain_buffer = 0;
        Sample** buffers = 0;
        char suffix[32];
        string new_name;
        string::size_type at;
-       nframes_t pos = 0;
-       int avail = 0;
        boost::shared_ptr<AudioRegion> result;
        boost::shared_ptr<AudioRegion> result;
-       
+
        cerr << "RBEffect: source region: position = " << region->position()
             << ", start = " << region->start()
             << ", length = " << region->length()
        cerr << "RBEffect: source region: position = " << region->position()
             << ", start = " << region->start()
             << ", length = " << region->length()
@@ -95,11 +94,11 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
 
           1. The region has not been stretched before.
 
 
           1. The region has not been stretched before.
 
-          In this case, we just want to read region->length() frames
+          In this case, we just want to read region->length() samples
           from region->start().
 
           We will create a new region of region->length() *
           from region->start().
 
           We will create a new region of region->length() *
-          tsr.time_fraction frames.  The new region will have its
+          tsr.time_fraction samples.  The new region will have its
           start set to 0 (because it has a new audio file that begins
           at the start of the stretched area) and its ancestral_start
           set to region->start() (so that we know where to begin
           start set to 0 (because it has a new audio file that begins
           at the start of the stretched area) and its ancestral_start
           set to region->start() (so that we know where to begin
@@ -107,25 +106,25 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
 
           2. The region has been stretched before.
 
 
           2. The region has been stretched before.
 
-          The region starts at region->start() frames into its
+          The region starts at region->start() samples into its
           (possibly previously stretched) source file.  But we don't
           want to read from its source file; we want to read from the
           file it was originally stretched from.
 
           The region's source begins at region->ancestral_start()
           (possibly previously stretched) source file.  But we don't
           want to read from its source file; we want to read from the
           file it was originally stretched from.
 
           The region's source begins at region->ancestral_start()
-          frames into its master source file.  Thus, we need to start
+          samples into its master source file.  Thus, we need to start
           reading at region->ancestral_start() + (region->start() /
           reading at region->ancestral_start() + (region->start() /
-          region->stretch()) frames into the master source.  This
+          region->stretch()) samples into the master source.  This
           value will also become the ancestral_start for the new
           region.
 
           We cannot use region->ancestral_length() to establish how
           value will also become the ancestral_start for the new
           region.
 
           We cannot use region->ancestral_length() to establish how
-          many frames to read, because it won't be up to date if the
+          many samples to read, because it won't be up to date if the
           region has been trimmed since it was last stretched.  We
           region has been trimmed since it was last stretched.  We
-          must read region->length() / region->stretch() frames and
+          must read region->length() / region->stretch() samples and
           stretch them by tsr.time_fraction * region->stretch(), for
           a new region of region->length() * tsr.time_fraction
           stretch them by tsr.time_fraction * region->stretch(), for
           a new region of region->length() * tsr.time_fraction
-          frames.
+          samples.
 
           Case 1 is of course a special case of 2, where
           region->ancestral_start() == 0 and region->stretch() == 1.
 
           Case 1 is of course a special case of 2, where
           region->ancestral_start() == 0 and region->stretch() == 1.
@@ -136,7 +135,7 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
           region->start().  This calculation is used regardless of
           whether we are reading from a master or
           previously-stretched region.  In order to read from a point
           region->start().  This calculation is used regardless of
           whether we are reading from a master or
           previously-stretched region.  In order to read from a point
-          n frames into the master source, we need to provide n -
+          n samples into the master source, we need to provide n -
           region->start() + region->position() as our position
           argument to master_read_at().
 
           region->start() + region->position() as our position
           argument to master_read_at().
 
@@ -148,19 +147,19 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
        double stretch = region->stretch() * tsr.time_fraction;
        double shift = region->shift() * tsr.pitch_fraction;
 
        double stretch = region->stretch() * tsr.time_fraction;
        double shift = region->shift() * tsr.pitch_fraction;
 
-       nframes_t read_start = region->ancestral_start() +
-               nframes_t(region->start() / (double)region->stretch());
+       samplecnt_t read_start = region->ancestral_start() +
+               samplecnt_t(region->start() / (double)region->stretch());
 
 
-       nframes_t read_duration =
-               nframes_t(region->length() / (double)region->stretch());
+       samplecnt_t read_duration =
+               samplecnt_t(region->length() / (double)region->stretch());
 
        uint32_t channels = region->n_channels();
 
        RubberBandStretcher stretcher
 
        uint32_t channels = region->n_channels();
 
        RubberBandStretcher stretcher
-               (session.frame_rate(), channels,
+               (session.sample_rate(), channels,
                 (RubberBandStretcher::Options) tsr.opts, stretch, shift);
 
                 (RubberBandStretcher::Options) tsr.opts, stretch, shift);
 
-       tsr.progress = 0.0f;
+       progress->set_progress (0);
        tsr.done = false;
 
        stretcher.setExpectedInputDuration(read_duration);
        tsr.done = false;
 
        stretcher.setExpectedInputDuration(read_duration);
@@ -182,6 +181,10 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
 
        /* create new sources */
 
 
        /* create new sources */
 
+       samplepos_t pos   = 0;
+       samplecnt_t avail = 0;
+       samplecnt_t done  = 0;
+
        if (make_new_sources (region, nsrcs, suffix)) {
                goto out;
        }
        if (make_new_sources (region, nsrcs, suffix)) {
                goto out;
        }
@@ -199,23 +202,17 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
 
        /* study first, process afterwards. */
 
 
        /* study first, process afterwards. */
 
-       pos = 0;
-       avail = 0;
-       done = 0;
-
        try {
                while (pos < read_duration && !tsr.cancel) {
 
        try {
                while (pos < read_duration && !tsr.cancel) {
 
-                       nframes_t this_read = 0;
+                       samplecnt_t this_read = 0;
 
                        for (uint32_t i = 0; i < channels; ++i) {
 
 
                        for (uint32_t i = 0; i < channels; ++i) {
 
-                               this_read = 0;
-
-                               nframes_t this_time;
+                               samplepos_t this_time;
                                this_time = min(bufsize, read_duration - pos);
 
                                this_time = min(bufsize, read_duration - pos);
 
-                               nframes_t this_position;
+                               samplepos_t this_position;
                                this_position = read_start + pos -
                                        region->start() + region->position();
 
                                this_position = read_start + pos -
                                        region->start() + region->position();
 
@@ -238,7 +235,7 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
                        pos += this_read;
                        done += this_read;
 
                        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);
                }
 
                        stretcher.study(buffers, this_read, pos == read_duration);
                }
@@ -248,15 +245,14 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
 
                while (pos < read_duration && !tsr.cancel) {
 
 
                while (pos < read_duration && !tsr.cancel) {
 
-                       nframes_t this_read = 0;
+                       samplecnt_t this_read = 0;
 
                        for (uint32_t i = 0; i < channels; ++i) {
 
 
                        for (uint32_t i = 0; i < channels; ++i) {
 
-                               this_read = 0;
-                               nframes_t this_time;
+                               samplepos_t this_time;
                                this_time = min(bufsize, read_duration - pos);
 
                                this_time = min(bufsize, read_duration - pos);
 
-                               nframes_t this_position;
+                               samplepos_t this_position;
                                this_position = read_start + pos -
                                        region->start() + region->position();
 
                                this_position = read_start + pos -
                                        region->start() + region->position();
 
@@ -279,15 +275,15 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
                        pos += this_read;
                        done += this_read;
 
                        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);
 
 
                        stretcher.process(buffers, this_read, pos == read_duration);
 
-                       int avail = 0;
+                       samplecnt_t avail = 0;
 
                        while ((avail = stretcher.available()) > 0) {
 
 
                        while ((avail = stretcher.available()) > 0) {
 
-                               this_read = min(bufsize, uint32_t(avail));
+                               this_read = min (bufsize, avail);
 
                                stretcher.retrieve(buffers, this_read);
 
 
                                stretcher.retrieve(buffers, this_read);
 
@@ -308,7 +304,7 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
 
                while ((avail = stretcher.available()) >= 0) {
 
 
                while ((avail = stretcher.available()) >= 0) {
 
-                       uint32_t this_read = min(bufsize, uint32_t(avail));
+                       samplecnt_t this_read = min (bufsize, avail);
 
                        stretcher.retrieve(buffers, this_read);
 
 
                        stretcher.retrieve(buffers, this_read);
 
@@ -328,7 +324,7 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
                }
 
        } catch (runtime_error& err) {
                }
 
        } 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;
        }
                error << err.what() << endmsg;
                goto out;
        }
@@ -355,7 +351,10 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
                                          stretch,
                                          shift);
                (*x)->set_master_sources (region->master_sources());
                                          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 */
        }
 
        /* stretch region gain envelope */
@@ -373,7 +372,7 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
 
        if (buffers) {
                for (uint32_t i = 0; i < channels; ++i) {
 
        if (buffers) {
                for (uint32_t i = 0; i < channels; ++i) {
-                       delete buffers[i];
+                       delete [] buffers[i];
                }
                delete [] buffers;
        }
                }
                delete [] buffers;
        }
@@ -384,8 +383,6 @@ RBEffect::run (boost::shared_ptr<Region> r, Progress* progress)
                }
        }
 
                }
        }
 
-       tsr.done = true;
-
        return ret;
 }
 
        return ret;
 }