Don't strip suffixes twice from peakfile names, otherwise source names like fred...
[ardour.git] / libs / ardour / audioregion.cc
index 7cc8e00998c89719c3dd9bf7d640b29f83028f7e..1461e1a3a4e3888377dfbaf9e9bdf347a8707b18 100644 (file)
@@ -45,6 +45,7 @@
 #include "ardour/region_factory.h"
 #include "ardour/runtime_functions.h"
 #include "ardour/transient_detector.h"
+#include "ardour/progress.h"
 
 #include "i18n.h"
 #include <locale.h>
@@ -116,8 +117,10 @@ AudioRegion::init ()
 {
        register_properties ();
 
+       suspend_property_changes();
        set_default_fades ();
        set_default_envelope ();
+       resume_property_changes();
 
        listen_to_my_curves ();
        connect_to_analysis_changed ();
@@ -154,7 +157,7 @@ AudioRegion::AudioRegion (const SourceList& srcs)
        assert (_sources.size() == _master_sources.size());
 }
 
-AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, nframes64_t offset, bool offset_relative)
+AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, framecnt_t offset, bool offset_relative)
        : Region (other, offset, offset_relative)
        , AUDIOREGION_COPY_STATE (other)
        , _automatable (other->session())
@@ -736,12 +739,12 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
        _fade_in->clear ();
 
        switch (shape) {
-       case Linear:
+       case FadeLinear:
                _fade_in->fast_simple_add (0.0, 0.0);
                _fade_in->fast_simple_add (len, 1.0);
                break;
 
-       case Fast:
+       case FadeFast:
                _fade_in->fast_simple_add (0, 0);
                _fade_in->fast_simple_add (len * 0.389401, 0.0333333);
                _fade_in->fast_simple_add (len * 0.629032, 0.0861111);
@@ -751,7 +754,7 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
                _fade_in->fast_simple_add (len, 1);
                break;
 
-       case Slow:
+       case FadeSlow:
                _fade_in->fast_simple_add (0, 0);
                _fade_in->fast_simple_add (len * 0.0207373, 0.197222);
                _fade_in->fast_simple_add (len * 0.0645161, 0.525);
@@ -762,7 +765,7 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
                _fade_in->fast_simple_add (len, 1);
                break;
 
-       case LogA:
+       case FadeLogA:
                _fade_in->fast_simple_add (0, 0);
                _fade_in->fast_simple_add (len * 0.0737327, 0.308333);
                _fade_in->fast_simple_add (len * 0.246544, 0.658333);
@@ -772,7 +775,7 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
                _fade_in->fast_simple_add (len, 1);
                break;
 
-       case LogB:
+       case FadeLogB:
                _fade_in->fast_simple_add (0, 0);
                _fade_in->fast_simple_add (len * 0.304147, 0.0694444);
                _fade_in->fast_simple_add (len * 0.529954, 0.152778);
@@ -784,6 +787,7 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
        }
 
         _fade_in->thaw ();
+       send_change (PropertyChange (Properties::fade_in));
 }
 
 void
@@ -803,7 +807,7 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
        _fade_out->clear ();
 
        switch (shape) {
-       case Fast:
+       case FadeFast:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 0.023041, 0.697222);
                _fade_out->fast_simple_add (len * 0.0553,   0.483333);
@@ -813,7 +817,7 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
                _fade_out->fast_simple_add (len * 1, 0);
                break;
 
-       case LogA:
+       case FadeLogA:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 0.228111, 0.988889);
                _fade_out->fast_simple_add (len * 0.347926, 0.972222);
@@ -823,7 +827,7 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
                _fade_out->fast_simple_add (len * 1, 0);
                break;
 
-       case Slow:
+       case FadeSlow:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 0.305556, 1);
                _fade_out->fast_simple_add (len * 0.548611, 0.991736);
@@ -833,7 +837,7 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
                _fade_out->fast_simple_add (len * 1, 0);
                break;
 
-       case LogB:
+       case FadeLogB:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 0.080645, 0.730556);
                _fade_out->fast_simple_add (len * 0.277778, 0.289256);
@@ -842,13 +846,14 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
                _fade_out->fast_simple_add (len * 1, 0);
                break;
 
-       case Linear:
+       case FadeLinear:
                _fade_out->fast_simple_add (len * 0, 1);
                _fade_out->fast_simple_add (len * 1, 0);
                break;
        }
 
         _fade_out->thaw ();
+       send_change (PropertyChange (Properties::fade_in));
 }
 
 void
@@ -918,14 +923,14 @@ void
 AudioRegion::set_default_fade_in ()
 {
        _fade_in_suspended = 0;
-       set_fade_in (Linear, 64);
+       set_fade_in (FadeLinear, 64);
 }
 
 void
 AudioRegion::set_default_fade_out ()
 {
        _fade_out_suspended = 0;
-       set_fade_out (Linear, 64);
+       set_fade_out (FadeLinear, 64);
 }
 
 void
@@ -956,6 +961,8 @@ AudioRegion::recompute_at_end ()
        _envelope->truncate_end (_length);
        _envelope->set_max_xval (_length);
         _envelope->thaw ();
+       
+       suspend_property_changes();
 
         if (_left_of_split) {
                 set_default_fade_out ();
@@ -969,6 +976,8 @@ AudioRegion::recompute_at_end ()
                _fade_in->extend_to (_length);
                send_change (PropertyChange (Properties::fade_in));
        }
+       
+       resume_property_changes();
 }
 
 void
@@ -977,6 +986,8 @@ AudioRegion::recompute_at_start ()
        /* as above, but the shift was from the front */
 
        _envelope->truncate_start (_length);
+       
+       suspend_property_changes();
 
         if (_right_of_split) {
                 set_default_fade_in ();
@@ -990,6 +1001,8 @@ AudioRegion::recompute_at_start ()
                _fade_out->extend_to (_length);
                send_change (PropertyChange (Properties::fade_out));
        }
+       
+       resume_property_changes();
 }
 
 int
@@ -1132,7 +1145,7 @@ AudioRegion::set_scale_amplitude (gain_t g)
 
 /** @return the maximum (linear) amplitude of the region */
 double
-AudioRegion::maximum_amplitude () const
+AudioRegion::maximum_amplitude (Progress* p) const
 {
        framepos_t fpos = _start;
        framepos_t const fend = _start + _length;
@@ -1159,6 +1172,7 @@ AudioRegion::maximum_amplitude () const
                }
 
                fpos += to_read;
+               p->set_progress (float (fpos - _start) / _length);
        }
 
        return maxamp;
@@ -1287,7 +1301,7 @@ AudioRegion::audio_source (uint32_t n) const
 }
 
 int 
-AudioRegion::adjust_transients (nframes64_t delta)
+AudioRegion::adjust_transients (frameoffset_t delta)
 {
        for (AnalysisFeatureList::iterator x = _transients.begin(); x != _transients.end(); ++x) {
                (*x) = (*x) + delta;
@@ -1299,7 +1313,7 @@ AudioRegion::adjust_transients (nframes64_t delta)
 } 
 
 int
-AudioRegion::update_transient (nframes64_t old_position, nframes64_t new_position)
+AudioRegion::update_transient (framepos_t old_position, framepos_t new_position)
 {
        for (AnalysisFeatureList::iterator x = _transients.begin(); x != _transients.end(); ++x) {
                if ((*x) == old_position) {
@@ -1314,7 +1328,7 @@ AudioRegion::update_transient (nframes64_t old_position, nframes64_t new_positio
 }
 
 void
-AudioRegion::add_transient (nframes64_t where)
+AudioRegion::add_transient (framepos_t where)
 {
        _transients.push_back(where);
        _valid_transients = true;
@@ -1323,7 +1337,7 @@ AudioRegion::add_transient (nframes64_t where)
 }
 
 void
-AudioRegion::remove_transient (nframes64_t where)
+AudioRegion::remove_transient (framepos_t where)
 {
        _transients.remove(where);
        _valid_transients = true;
@@ -1408,15 +1422,15 @@ AudioRegion::get_transients (AnalysisFeatureList& results, bool force_new)
        if (!Config->get_auto_analyse_audio()) {
                 if (!analyse_dialog_shown) {
                         pl->session().Dialog (_("\
-You have requested an operation that requires audio analysis.\n\n       \
-You currently have \"auto-analyse-audio\" disabled, which means\n\
+You have requested an operation that requires audio analysis.\n\n\
+You currently have \"auto-analyse-audio\" disabled, which means \
 that transient data must be generated every time it is required.\n\n\
-If you are doing work that will require transient data on a\n\
-regular basis, you should probably enable \"auto-analyse-audio\"\n\
-+then quit ardour and restart.\n\n\
-+This dialog will not display again.  But you may notice a slight delay\n\
-+in this and future transient-detection operations.\n\
-+"));
+If you are doing work that will require transient data on a \
+regular basis, you should probably enable \"auto-analyse-audio\" \
+then quit ardour and restart.\n\n\
+This dialog will not display again.  But you may notice a slight delay \
+in this and future transient-detection operations.\n\
+"));
                         analyse_dialog_shown = true;
                 }
        }