along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id$
*/
#include <cerrno>
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.
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 (DataType::AUDIO, 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;
}
try {
- sources.push_back (boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createWritable (*this, path, false, frame_rate())));
+ sources.push_back (boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createWritable (DataType::AUDIO, *this, path, false, frame_rate())));
} catch (failed_constructor& err) {
error << string_compose (_("tempoize: error creating new audio file %1 (%2)"), path, strerror (errno)) << endmsg;
goto out;
}
+
}
try {
nframes_t pos = 0;
nframes_t this_read = 0;
+ boost::shared_ptr<AudioSource> asrc = boost::dynamic_pointer_cast<AudioSource>(sources[i]);
+ if (!asrc) {
+ cerr << "FIXME: TimeFX for non-audio" << endl;
+ continue;
+ }
+
st.clear();
while (tsr.running && pos < tsr.region->length()) {
nframes_t this_time;
st.putSamples (buffer, this_read);
while ((this_read = st.receiveSamples (buffer, bufsize)) > 0 && tsr.running) {
- if (sources[i]->write (buffer, this_read) != this_read) {
+ if (asrc->write (buffer, this_read) != this_read) {
error << string_compose (_("error writing tempo-adjusted data to %1"), sources[i]->name()) << endmsg;
goto out;
}
}
while (tsr.running && (this_read = st.receiveSamples (buffer, bufsize)) > 0) {
- if (sources[i]->write (buffer, this_read) != this_read) {
+ if (asrc->write (buffer, this_read) != this_read) {
error << string_compose (_("error writing tempo-adjusted data to %1"), sources[i]->name()) << endmsg;
goto out;
}
}
}
- 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).c_str());
+
+ 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))));