LMMS / LMMS/lmms

Automation lanes

Open
#7,027 7 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
C++
Stars
10.4k
Forks
1.3k
Avg merge
2d 13h
Merged PRs (30d)
7

Description

Automation lanes

A stricter, opt-in subset of automation tracks which fix several of the problems automation tracks have while also offering some unique benefits.

The Problem(s)

Current automation tracks have some problems and quirks:

  • Automation tracks can have many automation clips that each control something different. This is necessary to reduce the number of automation tracks a project needs, but also makes projects messy and disordered.
  • Multiple parameters (or "controls"), including parameters with incompatible min/max ranges and incompatible types (float/int) can be connected to the same automation clip.
  • Automation clips (whether on the same automation track or on separate ones) can overlap with each other and try to set the same parameter to two different values at once.
  • Removing an instrument or effect leaves any automation clips connected to its parameters in a dangling state.
  • There is no way to statically lookup the value of a parameter at any point in time. At least not any way which works in every situation (since controller connections introduce some nondeterminism) or efficiently. Because of this:
    • Parameter automation is less efficient than it could be
    • The value of a parameter at the start of an automation clip is cannot be displayed to the user
    • The Song's elapsed time counter cannot be implemented in a way that is always 100% accurate
    • VST Sync data involving the tempo cannot always be 100% accurate
A Solution

I'm proposing a new, more restrictive type of automation track which would fix all these problems and encourage better project organization. They could be called automation lanes or "associated automation tracks" (since they have a parent instrument they are associated with). When this idea is combined with the collapsible automation tracks from #735, a lot of visual clutter in the Song Editor can be reduced. The restrictions also allow the value of a parameter controlled by an automation lane to be easily and efficiently looked up at any point in the Song's timeline.

How it works:
  • An instrument track can have automation lanes, and these automation lanes are displayed in a collapsible list directly beneath the instrument they are associated with (See #735). Instruments can be thought of as a track group for their automation tracks/lanes.
  • Automation lanes enforce some restrictions:
    • Each automation lane and their automation clips are dedicated to a single parameter (though maybe this restriction could be relaxed - see "Open questions" section below)
    • Only one automation lane is allowed per parameter
    • Automation tracks and controller connections are prohibited for any parameter with an automation lane
    • Each parameter must originate from the associated instrument or one of its effects
    • Automation clips cannot overlap
    • Automation lanes cannot be enabled/disabled by another automation lane/track or by a controller - only manually
  • All automation lanes are moved with and deleted with their instrument track
  • If an instrument is replaced, any automation lanes associated with parameters specific to that instrument are removed (i.e. an automation lane for a VST instrument's internal parameter would be removed, but an automation lane for the instrument's volume would be kept and so would automation lanes for effects)
  • If an instrument's effect is removed, any automation lanes associated with that effect are also removed
Open questions:
  • Could a single automation lane control multiple parameters as long as all parameters have the same min/max range, same type (int/float/bool), and apply to parameters under the same track? This would offer convenience without sacrificing the benefits of automation lanes.
Additional notes:
  • The default name of each automation lane is the same as the parameter they are dedicated to
  • There are no unconnected automation clips in an automation lane - creating a new clip creates it with its connection already set
  • A new automation lane can be created by <Ctrl> + dragging the control of an instrument or one of its effects onto the instrument itself
  • If a regular automation track meets the restrictions of automation lanes, it can be dragged to its instrument track to convert it into an automation lane
  • If a regular automation track DOESN'T meet the restrictions of automation lanes, there are still ways it can be at least partially converted if desired
  • When each automation clip is dedicated to a single parameter and the min/max range issues are fixed, it will be easier to enable custom y-axis labels in the Automation Editor for CLAP plugins and other plugins that support it.
  • Automation lanes could serve as the foundation for future work on MIDI polyphonic expressions (MPE) in the Piano Roll. Just as automation lanes have a parent track whose controls they are responsible for, note expressions would have a parent note whose controls (volume, panning, pitch, etc.) they are responsible for. When a note is deleted, its associated automations would be deleted, just like instrument tracks.
Design considerations
  • Should be fully backward-compatible
  • Should be opt-in. Regular automation tracks still exist and no project upgrade routines are needed.
  • Should encourage better project organization
  • Should be intuitive and easy to use
  • Track grouping/collapsing under instrument tracks should be implemented with the proposed general-purpose track grouping/collapsing in mind (#735).
Mockup

See #735.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The issue identifies no files, tests, or implementation entry points; start by reading the proposal and the referenced track-grouping issue #735. Done would require an agreed, backward-compatible opt-in automation-lane design and implementation, but the payload does not define concrete acceptance tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
desktop
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.