diff options
Diffstat (limited to 'libs/ardour/audioregion.cc')
-rw-r--r-- | libs/ardour/audioregion.cc | 147 |
1 files changed, 77 insertions, 70 deletions
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 939f9c02dd..8b533deda3 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -32,6 +32,7 @@ #include <pbd/basename.h> #include <pbd/xml++.h> #include <pbd/stacktrace.h> +#include <pbd/enumwriter.h> #include <ardour/audioregion.h> #include <ardour/session.h> @@ -482,8 +483,8 @@ AudioRegion::state (bool full) char buf2[64]; LocaleGuard lg (X_("POSIX")); - snprintf (buf, sizeof (buf), "0x%x", (int) _flags); - node.add_property ("flags", buf); + node.add_property ("flags", enum_2_string (_flags)); + snprintf (buf, sizeof(buf), "%.12g", _scale_amplitude); node.add_property ("scale-gain", buf); @@ -564,7 +565,9 @@ AudioRegion::set_live_state (const XMLNode& node, Change& what_changed, bool sen uint32_t old_flags = _flags; if ((prop = node.property ("flags")) != 0) { - _flags = Flag (strtol (prop->value().c_str(), (char **) 0, 16)); + _flags = Flag (string_2_enum (prop->value(), _flags)); + + //_flags = Flag (strtol (prop->value().c_str(), (char **) 0, 16)); _flags = Flag (_flags & ~Region::LeftOfSplit); _flags = Flag (_flags & ~Region::RightOfSplit); @@ -662,49 +665,49 @@ AudioRegion::set_fade_in (FadeShape shape, nframes_t len) switch (shape) { case Linear: - _fade_in.add (0.0, 0.0); - _fade_in.add (len, 1.0); + _fade_in.fast_simple_add (0.0, 0.0); + _fade_in.fast_simple_add (len, 1.0); break; case Fast: - _fade_in.add (0, 0); - _fade_in.add (len * 0.389401, 0.0333333); - _fade_in.add (len * 0.629032, 0.0861111); - _fade_in.add (len * 0.829493, 0.233333); - _fade_in.add (len * 0.9447, 0.483333); - _fade_in.add (len * 0.976959, 0.697222); - _fade_in.add (len, 1); + _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); + _fade_in.fast_simple_add (len * 0.829493, 0.233333); + _fade_in.fast_simple_add (len * 0.9447, 0.483333); + _fade_in.fast_simple_add (len * 0.976959, 0.697222); + _fade_in.fast_simple_add (len, 1); break; case Slow: - _fade_in.add (0, 0); - _fade_in.add (len * 0.0207373, 0.197222); - _fade_in.add (len * 0.0645161, 0.525); - _fade_in.add (len * 0.152074, 0.802778); - _fade_in.add (len * 0.276498, 0.919444); - _fade_in.add (len * 0.481567, 0.980556); - _fade_in.add (len * 0.767281, 1); - _fade_in.add (len, 1); + _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); + _fade_in.fast_simple_add (len * 0.152074, 0.802778); + _fade_in.fast_simple_add (len * 0.276498, 0.919444); + _fade_in.fast_simple_add (len * 0.481567, 0.980556); + _fade_in.fast_simple_add (len * 0.767281, 1); + _fade_in.fast_simple_add (len, 1); break; case LogA: - _fade_in.add (0, 0); - _fade_in.add (len * 0.0737327, 0.308333); - _fade_in.add (len * 0.246544, 0.658333); - _fade_in.add (len * 0.470046, 0.886111); - _fade_in.add (len * 0.652074, 0.972222); - _fade_in.add (len * 0.771889, 0.988889); - _fade_in.add (len, 1); + _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); + _fade_in.fast_simple_add (len * 0.470046, 0.886111); + _fade_in.fast_simple_add (len * 0.652074, 0.972222); + _fade_in.fast_simple_add (len * 0.771889, 0.988889); + _fade_in.fast_simple_add (len, 1); break; case LogB: - _fade_in.add (0, 0); - _fade_in.add (len * 0.304147, 0.0694444); - _fade_in.add (len * 0.529954, 0.152778); - _fade_in.add (len * 0.725806, 0.333333); - _fade_in.add (len * 0.847926, 0.558333); - _fade_in.add (len * 0.919355, 0.730556); - _fade_in.add (len, 1); + _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); + _fade_in.fast_simple_add (len * 0.725806, 0.333333); + _fade_in.fast_simple_add (len * 0.847926, 0.558333); + _fade_in.fast_simple_add (len * 0.919355, 0.730556); + _fade_in.fast_simple_add (len, 1); break; } @@ -722,47 +725,47 @@ AudioRegion::set_fade_out (FadeShape shape, nframes_t len) switch (shape) { case Fast: - _fade_out.add (len * 0, 1); - _fade_out.add (len * 0.023041, 0.697222); - _fade_out.add (len * 0.0553, 0.483333); - _fade_out.add (len * 0.170507, 0.233333); - _fade_out.add (len * 0.370968, 0.0861111); - _fade_out.add (len * 0.610599, 0.0333333); - _fade_out.add (len * 1, 0); + _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); + _fade_out.fast_simple_add (len * 0.170507, 0.233333); + _fade_out.fast_simple_add (len * 0.370968, 0.0861111); + _fade_out.fast_simple_add (len * 0.610599, 0.0333333); + _fade_out.fast_simple_add (len * 1, 0); break; case LogA: - _fade_out.add (len * 0, 1); - _fade_out.add (len * 0.228111, 0.988889); - _fade_out.add (len * 0.347926, 0.972222); - _fade_out.add (len * 0.529954, 0.886111); - _fade_out.add (len * 0.753456, 0.658333); - _fade_out.add (len * 0.9262673, 0.308333); - _fade_out.add (len * 1, 0); + _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); + _fade_out.fast_simple_add (len * 0.529954, 0.886111); + _fade_out.fast_simple_add (len * 0.753456, 0.658333); + _fade_out.fast_simple_add (len * 0.9262673, 0.308333); + _fade_out.fast_simple_add (len * 1, 0); break; case Slow: - _fade_out.add (len * 0, 1); - _fade_out.add (len * 0.305556, 1); - _fade_out.add (len * 0.548611, 0.991736); - _fade_out.add (len * 0.759259, 0.931129); - _fade_out.add (len * 0.918981, 0.68595); - _fade_out.add (len * 0.976852, 0.22865); - _fade_out.add (len * 1, 0); + _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); + _fade_out.fast_simple_add (len * 0.759259, 0.931129); + _fade_out.fast_simple_add (len * 0.918981, 0.68595); + _fade_out.fast_simple_add (len * 0.976852, 0.22865); + _fade_out.fast_simple_add (len * 1, 0); break; case LogB: - _fade_out.add (len * 0, 1); - _fade_out.add (len * 0.080645, 0.730556); - _fade_out.add (len * 0.277778, 0.289256); - _fade_out.add (len * 0.470046, 0.152778); - _fade_out.add (len * 0.695853, 0.0694444); - _fade_out.add (len * 1, 0); + _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); + _fade_out.fast_simple_add (len * 0.470046, 0.152778); + _fade_out.fast_simple_add (len * 0.695853, 0.0694444); + _fade_out.fast_simple_add (len * 1, 0); break; case Linear: - _fade_out.add (len * 0, 1); - _fade_out.add (len * 1, 0); + _fade_out.fast_simple_add (len * 0, 1); + _fade_out.fast_simple_add (len * 1, 0); break; } @@ -851,8 +854,8 @@ AudioRegion::set_default_envelope () { _envelope.freeze (); _envelope.clear (); - _envelope.add (0, 1.0f); - _envelope.add (_length, 1.0f); + _envelope.fast_simple_add (0, 1.0f); + _envelope.fast_simple_add (_length, 1.0f); _envelope.thaw (); } @@ -996,12 +999,14 @@ AudioRegion::exportme (Session& session, AudioExportSpecification& spec) void AudioRegion::set_scale_amplitude (gain_t g) { + boost::shared_ptr<Playlist> pl (playlist()); + _scale_amplitude = g; /* tell the diskstream we're in */ - - if (_playlist) { - _playlist->Modified(); + + if (pl) { + pl->Modified(); } /* tell everybody else */ @@ -1068,8 +1073,10 @@ AudioRegion::normalize_to (float target_dB) /* tell the diskstream we're in */ - if (_playlist) { - _playlist->Modified(); + boost::shared_ptr<Playlist> pl (playlist()); + + if (pl) { + pl->Modified(); } /* tell everybody else */ |