Patch from colinf to add tape-style region stretching via rubberband. Fixes #3075.

git-svn-id: svn://localhost/ardour2/branches/3.0@7620 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2010-08-13 16:50:29 +00:00
parent 5524e377a2
commit d62f7e1c72
4 changed files with 39 additions and 15 deletions

View file

@ -171,21 +171,42 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
txt = current_timefx->stretch_opts_selector.get_active_text ();
if (txt == rb_opt_strings[0]) {
transients = NoTransients; peaklock = false; longwin = true; shortwin = false;
} else if (txt == rb_opt_strings[1]) {
transients = NoTransients; peaklock = false; longwin = false; shortwin = false;
} else if (txt == rb_opt_strings[2]) {
transients = NoTransients; peaklock = true; longwin = false; shortwin = false;
} else if (txt == rb_opt_strings[3]) {
transients = BandLimitedTransients; peaklock = true; longwin = false; shortwin = false;
} else if (txt == rb_opt_strings[5]) {
transients = Transients; peaklock = false; longwin = false; shortwin = true;
} else {
/* default/4 */
transients = Transients; peaklock = true; longwin = false; shortwin = false;
for (int i = 0; i <= 6; i++) {
if (txt == rb_opt_strings[i]) {
rb_current_opt = i;
break;
}
}
switch (rb_current_opt) {
case 0:
transients = NoTransients; peaklock = false; longwin = true; shortwin = false;
break;
case 1:
transients = NoTransients; peaklock = false; longwin = false; shortwin = false;
break;
case 2:
transients = NoTransients; peaklock = true; longwin = false; shortwin = false;
break;
case 3:
transients = BandLimitedTransients; peaklock = true; longwin = false; shortwin = false;
break;
case 5:
transients = Transients; peaklock = false; longwin = false; shortwin = true;
break;
case 6:
transients = NoTransients;
precise = true;
preserve_formants = false;
current_timefx->request.pitch_fraction = 1/val;
shortwin = true;
// peaklock = false;
break;
default:
/* default/4 */
transients = Transients; peaklock = true; longwin = false; shortwin = false;
break;
};
if (realtime) options |= RubberBandStretcher::OptionProcessRealTime;
if (precise) options |= RubberBandStretcher::OptionStretchPrecise;