|
| std::span< const DynamicsEvent > | events () const noexcept |
| | Returns events in strictly increasing position order.
|
| bool | empty () const noexcept |
| | Returns whether no intensity context is authored.
|
| const DynamicsEvent * | at (timebase::TickPosition position) const noexcept |
| | Returns the last event starting at or before position.
|
| std::optional< float > | value_at (timebase::TickPosition position) const noexcept |
| | Returns the interpolated intensity at position.
|
| bool | shares_storage_with (const DynamicsLane &other) const noexcept |
| | Returns whether both lanes share the same immutable event storage.
|
| bool | operator== (const DynamicsLane &other) const noexcept |
| | Compares authored event values.
|
Immutable intensity context lane owned by a sequence.
Events are strictly ordered by position with no duplicates, mirroring ChordScaleLane. The lane is sequence-owned context read through the compile-context subscription contract described in compile_context.hpp.
This reuses AutomationInterpolation as a shared vocabulary rather than inventing a parallel one; it is deliberately not an AutomationCurve. An automation curve targets a parameter and is consumed by the modulation system, while this lane is compile-time musical context with no target and no consumer. Sharing the enum costs nothing and keeps two notions of "hold versus ramp" from drifting apart.