+ try {
+
+ boost::shared_ptr<MidiPlaylist> ap = boost::dynamic_pointer_cast<MidiPlaylist>(p);
+
+ if (ap) {
+
+ if (copy) {
+ ap.reset (new MidiPlaylist (ap, start, len, name, true));
+ start = 0;
+ }
+
+ Source* src = new MidiPlaylistSource (s, orig, name, ap, chn, start, len, Source::Flag (0));
+ boost::shared_ptr<Source> ret (src);
+
+ SourceCreated (ret);
+ return ret;
+ }
+ }
+
+ catch (failed_constructor& err) {
+ /* relax - return at function scope */
+ }
+