Operator SDK
Build MIDI processing and UI modes for the Operator device
Loading...
Searching...
No Matches
held_notes.h File Reference

Held-note registry for modes that rewrite note pitch (opt-in, header-only). More...

#include <cstdint>

Classes

struct  op::sdk::NoNotePayload
 The payload of a registry that carries nothing beyond the note itself. More...
class  op::sdk::HeldNotes< Capacity, Payload >
 Remembers the notes a mode is sounding and the pitch each one went out on. More...
struct  op::sdk::HeldNotes< Capacity, Payload >::Entry
 One key that is down, and what the mode sounded for it. More...
struct  op::sdk::HeldNotes< Capacity, Payload >::PressResult
 Whether press recorded the key, and whether the note should sound. More...
struct  op::sdk::HeldNotes< Capacity, Payload >::ReleaseResult
 Whether release found the key, and whether the note should stop. More...

Namespaces

namespace  op
 Root namespace for the Operator SDK.
namespace  op::sdk
 Core SDK helpers for modes (timing, text, MIDI, and math).

Detailed Description

Held-note registry for modes that rewrite note pitch (opt-in, header-only).

A mode that maps incoming notes onto other pitches can send two keys to the same output note. op::sdk::HeldNotes remembers which keys are down and which pitch each one went out on. That lets a mode sound an output note once, keep it ringing while any key mapped to it is still held, and release it at the pitch it was actually emitted on even if the mapping has moved in the meantime.

One instance holds Capacity entries. An entry is four bytes with no payload and eight with a 32-bit one, so the default 64 entries take 256 or 512 bytes of RAM. Both are template parameters, so a mode that holds fewer notes or carries more per note picks its own.

Every scan is bounded by the keys currently down, so a mode pays for the notes it is holding and an instance holding none does no work at all.

Include on demand. This header is deliberately not pulled in by operator_sdk.h.