Fixed-capacity, sample-accurate MIDI arpeggiator. More...
#include <arpeggiator.hpp>
Public Member Functions | |
| constexpr | Arpeggiator (ArpeggiatorSpec spec={}) noexcept |
| constexpr bool | valid () const noexcept |
| constexpr const ArpeggiatorSpec & | spec () const noexcept |
| std::size_t | held_note_count () const noexcept |
| std::size_t | physical_note_count () const noexcept |
| std::size_t | sounding_note_count () const noexcept |
| MidiUtilityProcessReport | process (const MidiBuffer &input, MidiBuffer &output, const ArpeggiatorBlock &block) noexcept |
| MidiUtilityProcessReport | flush_transport (MidiBuffer &output) noexcept |
| Release generated notes and reset their clock while preserving the held input ledger. | |
| MidiUtilityProcessReport | reset (MidiBuffer &output) noexcept |
| Release generated notes and discard every held/latch ownership. | |
| MidiUtilityProcessReport | replace_spec (const ArpeggiatorSpec &spec, MidiBuffer &output) noexcept |
| Flush old generated notes before adopting a new policy. | |
Static Public Member Functions | |
| static constexpr ArpeggiatorCapacityContract | contract () noexcept |
| static constexpr bool | valid_spec (const ArpeggiatorSpec &spec) noexcept |
Static Public Attributes | |
| static constexpr std::size_t | kMaximumPatternNotes = MaximumHeldNotes * MaximumOctaves |
Fixed-capacity, sample-accurate MIDI arpeggiator.
Short-message note input is consumed; non-note short messages, SysEx, and attached UMP packets pass through unchanged. Every accepted attack owns exactly one later release, including repeated attacks of the same key. An attack that cannot enter the fixed ledger is suppressed, and its matching release is consumed before an older accepted ownership can be retired. Generated note releases are retained as debt when the caller's reserved output capacity is exhausted.
|
inlineexplicitconstexprnoexcept |
|
inlinestaticconstexprnoexcept |
|
inlinenoexcept |
Release generated notes and reset their clock while preserving the held input ledger.
Use this for a transport stop, seek, or loop boundary when the caller handles transitions outside process().
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
Flush old generated notes before adopting a new policy.
Held physical notes survive the swap so the next grid boundary can use the new spec; latch-only notes are discarded when latch is disabled.
|
inlinenoexcept |
Release generated notes and discard every held/latch ownership.
|
inlinenoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlinestaticconstexprnoexcept |
|
staticconstexpr |