+ if (strcmp(a->wave.filename.c_str(), "") == 0) {
+ /* Empty wave - assume MIDI region */
+ boost::shared_ptr<MidiTrack> midi_track = mt.back();
+ boost::shared_ptr<Playlist> playlist = midi_track->playlist();
+ framepos_t f = (framepos_t)a->startpos;
+ framecnt_t length = (framecnt_t)a->length;
+ MusicFrame 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()));
+ boost::shared_ptr<Region> region = (RegionFactory::create (src, plist));
+ /* sets beat position */
+ region->set_position (pos.frame, pos.division);
+ midi_track->playlist()->add_region (region, pos.frame, 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->midi.begin();
+ j != a->midi.end(); ++j) {
+ Evoral::Beats start = (Evoral::Beats)(j->pos/960000.);
+ Evoral::Beats len = (Evoral::Beats)(j->length/960000.);
+ // PT C-2 = 0, Ardour C-1 = 0, subtract twelve to convert...
+ midicmd->add(boost::shared_ptr<Evoral::Note<Evoral::Beats> >
+ (new Evoral::Note<Evoral::Beats>( (uint8_t)1, start, len, j->note - 12, j->velocity )));
+ }
+ mm->apply_command (_session, midicmd);
+ boost::shared_ptr<Region> copy (RegionFactory::create (mr, true));
+ playlist->clear_changes ();
+ playlist->add_region (copy, a->startpos);
+ }