diff options
author | David Robillard <d@drobilla.net> | 2007-03-18 06:07:08 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-03-18 06:07:08 +0000 |
commit | 99904735e066804358f1d0bd138a84f1e9ecda91 (patch) | |
tree | 71a924cf1660b5b00231275bd481bbd27094dd9b /libs/ardour/session_timefx.cc | |
parent | eb270e70a12c410cdd98585ad25bb6d8e384a4f5 (diff) |
Merged with trunk R1612.
git-svn-id: svn://localhost/ardour2/branches/midi@1614 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/session_timefx.cc')
-rw-r--r-- | libs/ardour/session_timefx.cc | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/libs/ardour/session_timefx.cc b/libs/ardour/session_timefx.cc index 69a42ec8b8..4061b2ccd0 100644 --- a/libs/ardour/session_timefx.cc +++ b/libs/ardour/session_timefx.cc @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include <cerrno> @@ -50,6 +49,9 @@ Session::tempoize_region (TimeStretchRequest& tsr) float percentage; nframes_t total_frames; nframes_t done; + int c; + char buf[64]; + string::size_type len; /* the soundtouch code wants a *tempo* change percentage, which is of opposite sign to the length change. @@ -73,8 +75,18 @@ Session::tempoize_region (TimeStretchRequest& tsr) done = 0; for (uint32_t i = 0; i < tsr.region->n_channels(); ++i) { - string path = path_from_region_name (PBD::basename_nosuffix (names[i]), ident); + string rstr; + string::size_type existing_ident; + + if ((existing_ident = names[i].find (ident)) != string::npos) { + rstr = names[i].substr (0, existing_ident); + } else { + rstr = names[i]; + } + + string path = path_from_region_name (PBD::basename_nosuffix (rstr), ident); + if (path.length() == 0) { error << string_compose (_("tempoize: error creating name for new audio file based on %1"), tsr.region->name()) << endmsg; @@ -88,6 +100,7 @@ Session::tempoize_region (TimeStretchRequest& tsr) error << string_compose (_("tempoize: error creating new audio file %1 (%2)"), path, strerror (errno)) << endmsg; goto out; } + } try { @@ -164,7 +177,34 @@ Session::tempoize_region (TimeStretchRequest& tsr) } } - region_name = tsr.region->name() + X_(".t"); + len = tsr.region->name().length(); + + while (--len) { + if (!isdigit (tsr.region->name()[len])) { + break; + } + } + + if (len == 0) { + + region_name = tsr.region->name() + ".t000"; + + } else { + + if (tsr.region->name()[len] == 't') { + c = atoi (tsr.region->name().substr(len+1)); + + snprintf (buf, sizeof (buf), "t%03d", ++c); + region_name = tsr.region->name().substr (0, len) + buf; + + } else { + + /* not sure what this is, just tack the suffix on to it */ + + region_name = tsr.region->name() + ".t000"; + } + + } r = (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (sources, 0, sources.front()->length(), region_name, 0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile)))); |