- a meter can be dragged using the constraint modifier, which
sets the previous tempo accordingly.
This could be added to the bbt ruler to allow direct dragging
of beats and bars, but the exact behavior of that is still
undecided. comments?
- also preliminary work on the necessary tempos locked to
audio-locked meters.
- audio-locked meters retain their 'home' bar position
unless altered by another metric.
this is an alternative to a more strict model
which isn't quite so flexible.
- first tempo is glued to first meter position as they are now
both locked to AudioTime.
- all existing audio-locked tempos to the left of the first meter
are made inactive. all to the right are made active.
- audio locked meters define an offset which is used for all public
TempoMap methods while the internal map remains contiguous.
Probably a few unexpected consequences here, but seems to work mostly.
- this helps where tempo and meter have a somewhat circular
dependency.
MetricSection now has a musical position expressed in beats (a double).
MeterSection still has a bbt, but it really isn't needed as we have
enough information to discover the number of bars at a given beat without it.
TempoSection now has a hack to enable loading of legacy sessions, which will
ultimately be a lot cleaner than the current code.
Removing bars from tempo sections also allows us to place them
at arbitrary frames (implemented here).
Replaces the list of points in TempoMap with TempoSection functions, which
compute tempo-at or tick-at time relative to tempo section start.
TempoMap consults them additively to determine things like bbt_time(),
frame_time() get_grid() etc.
This has a marked effect on scrolling speed along with the code simplification
in the places it has been attempted.
Several things are broken here.
Currently every ramp except the last one is an exponential ramp. this may
be simple to fix :).
Mouse-over midi grid doesn't match mouse click grid. should also be simple.
Many things seem to work, but their accuracy should be in question until
each area has been addressed.
I would have loved to split this apart, but there are just so many interrelated changes,
it makes little sense and would be a huge effort that would break future git bisect
use because so many intermediate commits would not compile