[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  
Is this constrained necessary for controlpoints?
What if you can drag them like regions, and the "curve" is reordered  
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:

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  
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.



More information about the Ardour-Dev mailing list