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 | |
parent | ac1a2557065726e31a4c9dfaec97b29393e043d8 (diff) |
MIDI region stretching.
git-svn-id: svn://localhost/ardour2/trunk@2927 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/editor_timefx.cc | 30 |
2 files changed, 37 insertions, 5 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 06f0243805..9689cdc64a 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -5331,11 +5331,15 @@ Editor::end_time_fx (ArdourCanvas::Item* item, GdkEvent* event) } nframes_t newlen = drag_info.last_pointer_frame - clicked_regionview->region()->position(); -#ifdef USE_RUBBERBAND - float percentage = (float) ((double) newlen / (double) clicked_regionview->region()->length()); -#else - float percentage = (float) ((double) newlen - (double) clicked_regionview->region()->length()) / ((double) newlen) * 100.0f; + + float percentage = (double) newlen / (double) clicked_regionview->region()->length(); + +#ifndef USE_RUBBERBAND + // Soundtouch uses percentage / 100 instead of normal (/ 1) + if (clicked_regionview->region()->data_type() == DataType::AUDIO) { + percentage = (float) ((double) newlen - (double) clicked_regionview->region()->length()) / ((double) newlen) * 100.0f; #endif + } begin_reversible_command (_("timestretch")); 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 |