+ set<boost::shared_ptr<Playlist> > midi_playlists_affected;
+
+ for (RegionList::iterator i = midi.begin(); i != midi.end(); ++i) {
+ boost::shared_ptr<Playlist> playlist = (*i)->playlist();
+
+ if (playlist) {
+ playlist->clear_changes ();
+ }
+
+ }
+
+ ARDOUR::TimeFXRequest request;
+ request.time_fraction = fraction;
+
+ for (RegionList::iterator i = midi.begin(); i != midi.end(); ++i) {
+ boost::shared_ptr<Playlist> playlist = (*i)->playlist();
+
+ if (!playlist) {
+ continue;
+ }
+
+ MidiStretch stretch (*_session, request);
+ stretch.run (*i);
+
+ playlist->replace_region (regions.front()->region(), stretch.results[0],
+ regions.front()->region()->position());
+ midi_playlists_affected.insert (playlist);
+ }
+
+ for (set<boost::shared_ptr<Playlist> >::iterator p = midi_playlists_affected.begin(); p != midi_playlists_affected.end(); ++p) {
+ _session->add_command (new StatefulDiffCommand (*p));
+ }
+
+ commit_reversible_command ();
+