X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ffilter.cc;h=96e7cfa3d7664de29035daf2e5dac73111feeb04;hb=5fa05b403ca21a6573d07b921dc14f0769dc9fc7;hp=b723de1e56508af42ada0c7c7932e477bf0d4d32;hpb=e5e12acc5698090f2c0c614385e457cc0b46fbb0;p=ardour.git diff --git a/libs/ardour/filter.cc b/libs/ardour/filter.cc index b723de1e56..96e7cfa3d7 100644 --- a/libs/ardour/filter.cc +++ b/libs/ardour/filter.cc @@ -32,14 +32,14 @@ #include "ardour/smf_source.h" #include "ardour/source_factory.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; using namespace PBD; int -Filter::make_new_sources (boost::shared_ptr region, SourceList& nsrcs, string suffix) +Filter::make_new_sources (boost::shared_ptr region, SourceList& nsrcs, std::string suffix, bool use_session_sample_rate) { vector names = region->master_source_names(); assert (region->n_channels() <= names.size()); @@ -59,7 +59,9 @@ Filter::make_new_sources (boost::shared_ptr region, SourceList& nsrcs, s } } - string path = session.new_audio_source_path (name, region->n_channels(), i, false, false); + const string path = (region->data_type() == DataType::MIDI) + ? session.new_midi_source_path (name) + : session.new_audio_source_path (name, region->n_channels(), i, false, false); if (path.empty()) { error << string_compose (_("filter: error creating name for new file based on %1"), region->name()) @@ -68,9 +70,22 @@ Filter::make_new_sources (boost::shared_ptr region, SourceList& nsrcs, s } try { + samplecnt_t sample_rate; + if (use_session_sample_rate) { + sample_rate = session.sample_rate(); + } else { + boost::shared_ptr aregion = boost::dynamic_pointer_cast(region); + + if (aregion) { + sample_rate = aregion->audio_source()->sample_rate(); + } else { + return -1; + } + } + nsrcs.push_back (boost::dynamic_pointer_cast ( - SourceFactory::createWritable (region->data_type(), session, - path, false, session.frame_rate()))); + SourceFactory::createWritable (region->data_type(), session, + path, false, sample_rate))); } catch (failed_constructor& err) {