This page documents how controller-specific integrations are wired around the shared sequencing/audio core.
TheNonagonSquiggleBoyWrldBldrDefined in private/src/TheNonagonSquiggleBoyWrldBldr.hpp.
GridsMode (ComuteAndTheory, TheoryOfTimeRhythm, Matrix, Intervals, SubSequencer, Config),DisplayMode (Controller/Visualizer),Route IDs:
45678Message flow:
MessageInBus route conversion,Apply(msg) routes message to encoder/analog or one of the three grids,ProcessFrame() publishes m_leftGrid/m_rightGrid/m_auxGrid colors into UIState::m_colorBus[3].In the normal aux grid view, pad (1, 1) selects TheoryOfTimeRhythm mode. Route 6 shows the rhythm page and route 7 the reset page. Mode selection also chooses the Controller display. Aux mode ordinals are ComuteAndTheory 0, TheoryOfTimeRhythm 1, Matrix 2, Intervals 3, SubSequencer 4, and Config 5; these ordinals are runtime state, not saved patch values.
On the left, each column selects one of six loops and each of eight rows a rhythm step. Press toggles a gate; Shift-press sets the active length to that row plus one. Pads beyond the active size are dark. The current step is bright Purple when on and Pink when off; other active steps are dim Purple or Grey. The display reflects the configured pattern immediately, while the sounding gate accepts gate/size/reset edits at that loop’s next modulated tick.
On the right, column i, row j selects loop j as the reset for loop i. The reset contract enables any other loop whose accepted period is divisible by the selected clock period, including inferred ancestors on separate parent paths and equal-period loops. The selected reset is Blue, other eligible resets dim Blue, and self/non-divisible pads are dark and inert. Pressing the selected reset clears it to -1. Row 7 displays each loop’s live gate. A reset that loses divisibility remains stored and works again when that period relationship returns. The picker and time queries share the core period-divisibility calculation.
Both pages share StateSaver registrations: TheoryOfTimeRhythm stores loop/step slots 0-7, TheoryOfTimeRhythmSize stores each loop’s size, and TheoryOfTimeRhythmReset stores each reset. The engine has 16 slots, but this UI exposes and persists eight. Missing keys in older patches preserve current values under the ordinary StateSaver policy; fresh instances default to size 2, [true, false], and no reset. See Theory of Time.
TheNonagonSquiggleBoyQuadLaunchpadTwisterDefined in private/src/TheNonagonSquiggleBoyQuadLaunchpadTwister.hpp.
UIState::m_colorBus[4].WrldBLDRMidi)Defined in private/src/WrldBLDRMidi.hpp.
WrldBLDRMidi::FromMidi() maps channels to routed MessageIn:
WrldBLDRMidiWriter emits:
In JUCE/SmartGridOne/Source/NonagonWrapper.hpp:
MidiLaunchpadOutputHandler uses LPSysexWriter for Launchpad LEDs.MidiEncoderOutputHandler uses EncoderMidiWriter for encoder ring/value output.BasicMidi to integration owners.NonagonWrapper as top-level aggregatorNonagonWrapper owns:
NonagonWrapperQuadLaunchpadTwisterNonagonWrapperWrldBldrMidiSenderTheNonagonSquiggleBoyInternal corePer-sample/frame orchestration: