+ if (!found) {
+ uniquetr.push_back (midipair (a->index, a->name));
+ //printf(" : %d : %s\n", a->index, a->name.c_str());
+ }
+ }
+
+ std::map <int, boost::shared_ptr<MidiTrack> > midi_tracks;
+ /* MIDI - Create unique midi tracks and a lookup table for used tracks */
+ for (vector<midipair>::iterator a = uniquetr.begin (); a != uniquetr.end (); ++a) {
+ ptflookup_t miditr;
+ list<boost::shared_ptr<MidiTrack> > mt (_session->new_midi_track (
+ ChanCount (DataType::MIDI, 1),
+ ChanCount (DataType::MIDI, 1),
+ true,
+ instrument, (Plugin::PresetRecord*) 0,
+ (RouteGroup*) 0,
+ 1,
+ a->trname,
+ PresentationInfo::max_order,
+ Normal));
+ assert (mt.size () == 1);
+ midi_tracks[a->ptfindex] = mt.front ();
+ }
+
+ /* MIDI - Add midi regions one-by-one to corresponding midi tracks */
+ for (vector<PTFFormat::track_t>::iterator a = ptf.miditracks.begin (); a != ptf.miditracks.end (); ++a) {
+
+ boost::shared_ptr<MidiTrack> midi_track = midi_tracks[a->index];
+ assert (midi_track);
+ boost::shared_ptr<Playlist> playlist = midi_track->playlist ();
+ samplepos_t f = (samplepos_t)a->reg.startpos * srate / 1920000.;
+ samplecnt_t length = (samplecnt_t)a->reg.length * srate / 1920000.;
+ MusicSample pos (f, 0);
+ boost::shared_ptr<Source> src = _session->create_midi_source_by_stealing_name (midi_track);
+ PropertyList plist;
+ plist.add (ARDOUR::Properties::start, 0);
+ plist.add (ARDOUR::Properties::length, length);
+ plist.add (ARDOUR::Properties::name, PBD::basename_nosuffix (src->name ()));
+ //printf(" : %d - trackname: (%s)\n", a->index, src->name ().c_str ());
+ boost::shared_ptr<Region> region = (RegionFactory::create (src, plist));
+ /* sets beat position */
+ region->set_position (pos.sample, pos.division);
+ midi_track->playlist ()->add_region (region, pos.sample, 1.0, false, pos.division);
+
+ boost::shared_ptr<MidiRegion> mr = boost::dynamic_pointer_cast<MidiRegion>(region);
+ boost::shared_ptr<MidiModel> mm = mr->midi_source (0)->model ();
+ MidiModel::NoteDiffCommand *midicmd;
+ midicmd = mm->new_note_diff_command ("Import ProTools MIDI");
+
+ for (vector<PTFFormat::midi_ev_t>::iterator j = a->reg.midi.begin (); j != a->reg.midi.end (); ++j) {
+ //printf(" : MIDI : pos=%f len=%f\n", (float)j->pos / 960000., (float)j->length / 960000.);
+ Temporal::Beats start = (Temporal::Beats)(j->pos / 960000.);
+ Temporal::Beats len = (Temporal::Beats)(j->length / 960000.);
+ /* PT C-2 = 0, Ardour C-1 = 0, subtract twelve to convert ? */
+ midicmd->add (boost::shared_ptr<Evoral::Note<Temporal::Beats> > (new Evoral::Note<Temporal::Beats> ((uint8_t)1, start, len, j->note, j->velocity)));
+ }
+ mm->apply_command (_session, midicmd);
+ boost::shared_ptr<Region> copy (RegionFactory::create (mr, true));
+ playlist->clear_changes ();
+ playlist->add_region (copy, f);