diff options
author | David Robillard <d@drobilla.net> | 2008-01-17 00:37:46 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-01-17 00:37:46 +0000 |
commit | 48ed9dc2c471caebc6c285c5bd2d47883805e8fa (patch) | |
tree | 7f737e4b5120df5ea44aeafb6862170c839d056d /gtk2_ardour/editor_timefx.cc | |
parent | ac1a2557065726e31a4c9dfaec97b29393e043d8 (diff) |
MIDI region stretching.
git-svn-id: svn://localhost/ardour2/trunk@2927 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_timefx.cc')
-rw-r--r-- | gtk2_ardour/editor_timefx.cc | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc index 2b91c6df28..652973ca26 100644 --- a/gtk2_ardour/editor_timefx.cc +++ b/gtk2_ardour/editor_timefx.cc @@ -42,6 +42,7 @@ #include <ardour/audioregion.h> #include <ardour/audio_diskstream.h> #include <ardour/stretch.h> +#include <ardour/midi_stretch.h> #include <ardour/pitch.h> #ifdef USE_RUBBERBAND @@ -183,7 +184,34 @@ Editor::TimeFXDialog::delete_in_progress (GdkEventAny* ev) int Editor::time_stretch (RegionSelection& regions, float fraction) { - return time_fx (regions, fraction, false); + // FIXME: kludge, implement stretching of selection of both types + + if (regions.front()->region()->data_type() == DataType::AUDIO) { + // Audio, pop up timefx dialog + return time_fx (regions, fraction, false); + } else { + // MIDI, just stretch + RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (®ions.front()->get_time_axis_view()); + if (!rtv) + return -1; + + boost::shared_ptr<Playlist> playlist + = rtv->track()->diskstream()->playlist(); + + ARDOUR::TimeFXRequest request; + request.time_fraction = fraction; + MidiStretch stretch(*session, request); + begin_reversible_command ("midi stretch"); + stretch.run(regions.front()->region()); + XMLNode &before = playlist->get_state(); + playlist->replace_region (regions.front()->region(), stretch.results[0], + regions.front()->region()->position()); + XMLNode &after = playlist->get_state(); + session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after)); + commit_reversible_command (); + } + + return 0; } int |