[ardour-dev] editing ops, especially on automation
gerard van dongen
gml at xs4all.nl
Mon Aug 23 06:32:45 PDT 2004
I have been working on making the automation editing more productive.
Which turns out to be a very complicated subject, so I am posting this
description of what I think should happen, as a discussion item.
I think that the editing of controlpoints in automation tracks should
match the editing of regions as much as possible.
But there are complications.
Two features of ardour make it especially hard to decide what "the Right
Thing" to do is:
a) ardour allows multi-type selections (control points and regions across
multiple tracks)
b)ardour allows discontinuous selections
There are 2 controls that determine editing behavious: slice/slide mode
and object/range mode
I think used in combination the 4 editing modes will cover most cases that
I will describe later on:insert/overwrite object-based/time-based.
A big question is "what does dragging a selection do?".
For regions it is obvious that it is visual cut/past.
But for controlpoints it is not, draggin is constrained by the
neighbouring controlpoints.
(or it would be if you could actually drag a selection of control points)
So what is the RightThing for a selection including both regions and
controlpoints?
Is this constrained necessary for controlpoints?
What if you can drag them like regions, and the "curve" is reordered
afterwards?
A single point would just be cut/pasted. And paste would insert the point
at the new location.
A selection of points would be cut and dragged as a ghosted linesegment.
But then what happens during paste?
In a overwrite mode it would replace the points in the target area. But
what if I made a discontinous selection?
Does that make to multiple segments or a new "curve" made up of the
selected points.
ascii art:
automation:---1--2---3-4---5-------------6---7---8--------
selection a: x-----x---x
or b: x x---x
moving ---1------3-------------------6---7---8--------
to |x----x---x
result a: ---1------3-------------------6-2----4---5-----
result b: ---1------3-------------------6-2-7--4---5-----
So this gets complicated.
I have thought of two ways to deal with this that I like:
The first is to change to automation model completely. :)
Instead of "raw" controlpoints, you have "control regions". That get
created with arecord, or can be drawn into an autotrack.
A controlregion acts just like a region. Cut/paste/slice/copy layerings
etc. But the content is a envelope. That can be drawn/clicked, eventually
it can include other types of curves, predefined envelopes etc. In the
white-space between the controlled-value keeps its value, or it can
interpolate towards the next value, I am not sure :). I see region boxes
tied together with lines, like a chain.
The big advantage is a very consistent user-interface. What you will loose
is the ability to remove horizontal-slices from an automation-curve, like
you can do now iwth rubberband-select.
And it will mean a lot of new code, so I guess this would be post V1.0
The second uses the existing model.
The one editing thing that is really not useful for me right now is slice
mode. That should be changed to shuffle mode really.
so I include the description on how I think it should work with
cut/copy/paste. What this comes down to when you drag a region, is that
you really shuffle the order, _and_ that you take existing white-spaces as
region-like objects that you shuffle with.
in objectmode/slide:
selection as it is now, plus select-from-click
cut: remove selected points and add them to paste buffer as a single set
of controlpoints, regardless if they are consequent or not.
paste: overwrite from editcursor.
f.e. selection a and result a above.
in objectmode/slice
selection: as in objectmode/slide
cut: as in objectmode/slide, but the points not cut move
in the example above: first 3 to the 2 position and all subsequent
points by the same amount.
then all points after by the distance [4-5] if
that makes sense?
for audio region: all subsequent regions move left by the length of
the cut selection.
so if the selection is not continuous, a region moves left by the
length of the cut regions that are before the region
paste: insert at editcursor and move all subsequent points by the length
of the pasted "curve"
for audioregions: paste can only happen on region-edges. But the
entire paste-buffer is inserted as one thing.
in range/slide
select all points inside the ranges
cut :removes all points selected _and_ adds points on the intersection of
the range with the automation-line.
both in the paste-buffer and in the automation track, so that you
don't change the shape outside the range, and the selection matches
the selected curve
paste :overwrite from editcursor. Notice that you really get what was
inside the range-selection,
in range/slice
like range/slide except everything outside the range moves in after cut,
and past is insert.
For audio regions f.i. you seperate region as necessary to insert.
In rangemode you should be able to use "seperate" to seperate the
automation line, this just adds automationpoints at the intersection of
the range-selection with the automation-line.
Clearly, range mode will be much handier for automation editing most of
the time. So I suggest also the following shortcuts:
alt-o and alt-g (with alt-click on the widgets) sets object-mode with
selection from rangemode-range (as if it were a rubberband) and rangemode
with range from objectselection respectively.
That's about it I think.
This second option is easier to implement incrementally on the current
code-base.
What I would really like is to have the money and time to spend a couple
of days in various studios working with protools/sonar/etc/etc
and see how they deal with all this.
Gerard
Gerard
More information about the Ardour-Dev
mailing list