- for (int n = 0; n < sf_info.channels; ++n) {
- try {
- afs = boost::dynamic_pointer_cast<AudioFileSource> (
- SourceFactory::createExternal (DataType::AUDIO, *_session,
- path, n,
- Source::Flag (0), false));
-
- srclist.push_back(afs);
-
- } catch (failed_constructor& err) {
- error << _("Could not access soundfile: ") << path << endmsg;
- AudioSource::set_build_peakfiles (old_sbp);
- return;
+ string rname = region_name_from_path (ms->path(), false);
+
+ PropertyList plist;
+
+ plist.add (ARDOUR::Properties::start, 0);
+ plist.add (ARDOUR::Properties::length, ms->length(ms->timeline_position()));
+ plist.add (ARDOUR::Properties::name, rname);
+ plist.add (ARDOUR::Properties::layer, 0);
+
+ r = boost::dynamic_pointer_cast<MidiRegion> (RegionFactory::create (boost::dynamic_pointer_cast<Source>(ms), plist, false));
+ assert(r);
+
+ } else {
+
+ SourceList srclist;
+ boost::shared_ptr<AudioFileSource> afs;
+ bool old_sbp = AudioSource::get_build_peakfiles ();
+
+ /* don't even think of building peakfiles for these files */
+
+ AudioSource::set_build_peakfiles (false);
+
+ for (int n = 0; n < sf_info.channels; ++n) {
+ try {
+ afs = boost::dynamic_pointer_cast<AudioFileSource> (
+ SourceFactory::createExternal (DataType::AUDIO, *_session,
+ path, n,
+ Source::Flag (ARDOUR::AudioFileSource::NoPeakFile), false));
+ if (afs->sample_rate() != _session->nominal_frame_rate()) {
+ boost::shared_ptr<SrcFileSource> sfs (new SrcFileSource(*_session, afs, _src_quality));
+ srclist.push_back(sfs);
+ } else {
+ srclist.push_back(afs);
+ }
+
+ } catch (failed_constructor& err) {
+ error << _("Could not access soundfile: ") << path << endmsg;
+ AudioSource::set_build_peakfiles (old_sbp);
+ return;
+ }