using namespace PBD;
static boost::shared_ptr<ImportableSource>
-open_importable_source (const string& path, nframes_t samplerate, ARDOUR::SrcQuality quality)
+open_importable_source (const string& path, framecnt_t samplerate, ARDOUR::SrcQuality quality)
{
/* try libsndfile first, because it can get BWF info from .wav, which ExtAudioFile cannot.
We don't necessarily need that information in an ImportableSource, but it keeps the
{
char buf[PATH_MAX+1];
bool goodfile = false;
- string base(basename);
+ string base = basename;
string ext = native_header_format_extension (hf, type);
+ uint32_t cnt = 1;
do {
if (type == DataType::AUDIO && channels == 2) {
if (channel == 0) {
- snprintf (buf, sizeof(buf), "%s-L%s", base.c_str(), ext.c_str());
+ if (cnt == 1) {
+ snprintf (buf, sizeof(buf), "%s-L%s", base.c_str(), ext.c_str());
+ } else {
+ snprintf (buf, sizeof(buf), "%s-%d-L%s", base.c_str(), cnt, ext.c_str());
+ }
} else {
- snprintf (buf, sizeof(buf), "%s-R%s", base.c_str(), ext.c_str());
+ if (cnt == 1) {
+ snprintf (buf, sizeof(buf), "%s-R%s", base.c_str(), ext.c_str());
+ } else {
+ snprintf (buf, sizeof(buf), "%s-%d-R%s", base.c_str(), cnt, ext.c_str());
+ }
}
} else if (channels > 1) {
- snprintf (buf, sizeof(buf), "%s-c%d%s", base.c_str(), channel, ext.c_str());
+ if (cnt == 1) {
+ snprintf (buf, sizeof(buf), "%s-c%d%s", base.c_str(), channel, ext.c_str());
+ } else {
+ snprintf (buf, sizeof(buf), "%s-%d-c%d%s", base.c_str(), cnt, channel, ext.c_str());
+ }
} else {
- snprintf (buf, sizeof(buf), "%s%s", base.c_str(), ext.c_str());
+ if (cnt == 1) {
+ snprintf (buf, sizeof(buf), "%s%s", base.c_str(), ext.c_str());
+ } else {
+ snprintf (buf, sizeof(buf), "%s-%d%s", base.c_str(), cnt, ext.c_str());
+ }
}
-
string tempname = destdir + "/" + buf;
+
if (!allow_replacing && Glib::file_test (tempname, Glib::FILE_TEST_EXISTS)) {
-
- /* if the file already exists, we must come up with
- * a new name for it. for now we just keep appending
- * _ to basename
- */
-
- base += "_";
+
+ cnt++;
} else {
goodfile = true;
}
- } while ( !goodfile);
+ } while (!goodfile);
return buf;
}
}
static bool
-create_mono_sources_for_writing (const vector<string>& new_paths, Session& sess,
- uint samplerate, vector<boost::shared_ptr<Source> >& newfiles,
+create_mono_sources_for_writing (const string& origin,
+ const vector<string>& new_paths,
+ Session& sess, uint samplerate,
+ vector<boost::shared_ptr<Source> >& newfiles,
framepos_t timeline_position)
{
- for (vector<string>::const_iterator i = new_paths.begin(); i != new_paths.end(); ++i)
- {
+ for (vector<string>::const_iterator i = new_paths.begin(); i != new_paths.end(); ++i) {
+
boost::shared_ptr<Source> source;
- try
- {
+ try {
const DataType type = SMFSource::safe_midi_file_extension (*i) ? DataType::MIDI : DataType::AUDIO;
source = SourceFactory::createWritable (type, sess,
- i->c_str(),
- false, // destructive
- samplerate);
+ i->c_str(),
+ origin,
+ false, // destructive
+ samplerate);
}
- catch (const failed_constructor& err)
- {
+
+ catch (const failed_constructor& err) {
error << string_compose (_("Unable to create file %1 during import"), *i) << endmsg;
return false;
}
write_audio_data_to_new_files (ImportableSource* source, ImportStatus& status,
vector<boost::shared_ptr<Source> >& newfiles)
{
- const nframes_t nframes = ResampledImportableSource::blocksize;
+ const framecnt_t nframes = ResampledImportableSource::blocksize;
boost::shared_ptr<AudioFileSource> afs;
uint channels = source->channels();
uint read_count = 0;
while (!status.cancel) {
- nframes_t const nread = source->read (data.get(), nframes);
+ framecnt_t const nread = source->read (data.get(), nframes);
if (nread == 0) {
break;
}
while (!status.cancel) {
- nframes_t nread, nfread;
+ framecnt_t nread, nfread;
uint x;
uint chn;
for (chn = 0; chn < channels; ++chn) {
- nframes_t n;
+ framecnt_t n;
for (x = chn, n = 0; n < nfread; x += channels, ++n) {
channel_data[chn][n] = (Sample) data[x];
}
status.progress += 0.01;
}
- const nframes64_t pos = 0;
+ const framepos_t pos = 0;
const double length_beats = ceil(t / (double)source->ppqn());
BeatsFramesConverter converter(smfs->session().tempo_map(), pos);
smfs->update_length(pos, converter.to(length_beats));
fatal << "THIS IS NOT IMPLEMENTED YET, IT SHOULD NEVER GET CALLED!!! DYING!" << endmsg;
status.cancel = !map_existing_mono_sources (new_paths, *this, frame_rate(), newfiles, this);
} else {
- status.cancel = !create_mono_sources_for_writing (new_paths, *this, frame_rate(), newfiles, natural_position);
+ status.cancel = !create_mono_sources_for_writing (*p, new_paths, *this, frame_rate(), newfiles, natural_position);
}
// copy on cancel/failure so that any files that were created will be removed below