Redshift Motion System Integration Plan
Redshift Motion System Integration Plan
Created: 2026-08-26
Product Goal
Make Redshift's motion system unusually readable and musical without turning the Tone page into a modulation matrix. A user should be able to describe movement as a range and a journey:
A: 420 Hz -> B: 4.8 kHz | Ping-Pong | Exponential | 1/4 | Note Retrigger
The current A/B/Depth/Sync implementation is the foundation, not throwaway work.
Vocabulary
Keep these concepts separate in both DSP and UI:
A / B: explicit destination values in the destination's native units.Depth: blends the manual knob toward the complete A-to-B trajectory.Shape: curvature or waveform used while traveling.Cycle: whether the route loops, reverses, runs once, or holds its end.Trigger: free-running, every note, or legato-group retriggering.Rate: free Hz or musical duration, including straight, dotted, triplet, and selected odd lengths.Fade In: time before the route reaches its selected Depth.Offset: musical delay before the route begins.Phase: starting position in the journey.Skew: relative time spent on the outward and return portions.
Free Run belongs under Trigger, not Cycle. Ping-Pong belongs under Cycle,
not Shape. Keeping those distinctions prevents contradictory combinations.
Phase 0 - Stabilize Current Build
- Collect hands-on feedback for all eight Redshift Tone destinations.
- Confirm A/B values are understandable in Hz, seconds, bits, and reduction rate.
- Verify patch save/load, lane isolation, automation, and active
Mindication. - Measure an eight-voice patch with zero, one, four, and eight active routes.
- Do not add controls until the present A/B/Depth behavior feels dependable.
Phase 1 - Complete Musical Motion
Extend each route with a compact advanced row:
- Cycle:
Loop,Ping-Pong,One Shot,One Shot Return,Hold End. - Trigger:
Free,Note,Legato. - Shape:
Sine,Triangle,Ramp,Square,Pulse,Exponential,Logarithmic,Sample & Hold,Smooth Random. - Phase: 0-100%.
- Skew: 0-100%, with 50% symmetrical.
- Fade In:
Off, beat divisions, and 1-16 bars. - Offset:
Off, beat divisions, and 1-16 bars. - Pulse Width appears only for Pulse.
Shape and trigger should become route-local. The current shared Shape and Key
Reset values migrate into every route when an older patch is loaded. A new
Copy Motion / Paste Motion action provides fast reuse without hidden coupling.
Long cycles are part of Phase 1, not a deferred MSEG feature. The initial tempo-synced duration list must include:
- Existing straight, dotted, and triplet note divisions.
1 bar,2 bars,4 bars,8 bars, and16 bars.- Odd/polymetric lengths:
3,5,6,7,9, and12 bars.
The UI label becomes DURATION while tempo sync is active and RATE in free-Hz
mode. Independent odd lengths are intentional: a seven-bar Cutoff route against
an eight-bar Resonance route repeats their complete relationship after 56 bars.
Trigger options should include Transport in addition to Free, Note, and
Legato. Transport mode starts at the selected Phase when playback begins;
Offset can defer that launch by a precise musical duration. Stopping and
restarting transport restarts the route deterministically.
Implemented 2026-08-28 for SpaceAge's internal sequencer: Transport now owns a sample-oriented clock that resets on sequencer start, advances only during playback, and freezes while stopped. Free and Note retain their independent clock sources. Host-timeline seek and loop-wrap synchronization remain separate future work and are not implied by the current label.
Phase 1.5 - Portamento And Performance Pitch
Expand Redshift's existing Glide rather than adding a second pitch-slide path:
- Mode:
Off,Always,Legato,Fingered. - Timing:
Time(fixed journey duration) orRate(fixed pitch-travel speed). - Sync: free seconds/rate or tempo divisions through 16 bars.
- Curve:
Linear,Exponential,Logarithmic,S-Curve. - Direction:
Both,Up Only,Down Only. - Envelope behavior:
RetriggerorContinueduring legato transitions. - Poly handling:
Off,Match Voices,Lead Voice Only.
The common default should remain Legato + Rate, with detached notes clean and
overlapping notes gliding. Portamento receives a compact P editor beside
Glide and stays conceptually separate from Tone motion routes.
2026-08-28 Portamento Checkpoint
The compact P editor and the audio path now provide Mode, Time/Rate timing,
tempo Sync, Legacy/Linear/Exponential/Logarithmic/S-Curve travel, and directional
gating. Finite curves reach the target exactly; Rate scales duration by interval;
sync uses the shared musical-duration list. Existing mode indices and the Legacy
curve remain the defaults so older patches retain their established glide.
The settings persist in projects and Redshift patch files. The focused contract covers fixed-time arrival, interval-scaled Rate, tempo-derived duration, direction, Off, and the retained legacy trajectory. Specialized poly handling remains deferred rather than being implied by this checkpoint.
Fingered mode is now distinct from Legato Only: both glide into an overlapping note, but only Fingered applies the selected timing, sync, curve, and direction when key release returns the voice to the previously held note. The same return rule is used after sustain-pedal reconciliation.
Envelope transition behavior is also complete. Retrigger restarts the amp
envelope on overlap, Continue preserves phrase amplitude, and Legacy retains
the previous Mono-retrigger/Legato-continue convention. The choice is independent
of glide curve and persists with the Redshift patch.
Phase 2 - Endpoint Holds And Better Timing
- Completed 2026-08-28:
Hold AandHold Breserve endpoint dwell as percentages of the route cycle. Loop, Ping-Pong, One Shot, One Shot Return, and Hold End have explicit verified behavior; zero holds preserve Skew timing. - Completed 2026-08-28: the popup now names the synchronized control
Cycle Lengthand explains that A/B holds reserve dwell while the remaining cycle is transition time. - Completed 2026-08-28: the shared sync list was audited and expanded with dotted, triplet, 3/16, 5/16, and dotted/triplet bar choices. Existing indices remain unchanged so saved patches and motion blocks retain exact timing.
- Completed 2026-08-28: shared Note Launch provides Immediate, Next Beat, and Next Bar for Note and Legato routes. Note retriggers re-quantize; Legato waits only at phrase start. Transport remains an explicit Trigger rather than a duplicate launch choice.
- Completed 2026-08-28: each popup shows one live journey summary containing Hold A, derived travel share, Hold B, Cycle mode, Trigger, and Cycle Length. The summary is UI-only and does not duplicate trajectory arithmetic in DSP.
This phase covers cyclic envelope behavior without requiring a graph editor.
Phase 3 - Step Motion
Core checkpoint completed 2026-08-28: an allocation-free normalized evaluator supports 2-16 values, rotation, forward/reverse/ping-pong direction, and optional smooth interpolation. Exact traversal and interpolation contracts pass.
State checkpoint completed 2026-08-28: each instrument slot and Tone destination can publish one immutable, bounded Step Motion pattern. Sparse project save and restore, clear, destination isolation, and lane snapshot copy/undo ownership are verified.
Preset checkpoint completed 2026-08-28: Redshift .sspoly patches now serialize
validated sparse Step Motion routes and old patches clear stale route state.
Tone Motion Block schema version 4 carries the same routes transactionally;
versions 1-3 load with Step Motion disabled. Exact current-block round-trip,
legacy clearing, malformed-data refusal, and ordinary-parameter isolation pass.
At that checkpoint, UI editing and audio-route activation remained pending.
Audio checkpoint completed 2026-08-28: enabled Step Motion replaces only the continuous Shape trajectory. It retains the route's A/B range, Depth, Cycle Length, Trigger, Offset, Fade, Note Launch, and one-shot lifetime. Each active route acquires one immutable pattern snapshot per block; the per-sample evaluator uses bounded array/index arithmetic. A four-step cutoff route produces a distinct, finite, isolated audio signature and the paired CPU reference remains equivalent.
UI checkpoint completed 2026-08-28: every Tone destination's M popup exposes
Enable, 2-16 numbered value bars, direction, rotation, smoothing, and probability.
Controls publish one complete immutable pattern only when edited. Inactive bars
are visibly dimmed, disabling a route preserves its work, and each gesture creates
a scoped instrument-patch Undo checkpoint. Release compilation and the complete
focused Redshift contract passed after integration.
Factory-shape checkpoint completed 2026-08-28: the editor offers seven musical
starting patterns covering ramps, alternating movement, quarter pulses, offbeats,
Euclidean 5/8 accents, and a rise/fall contour. The generator is deterministic and
UI-independent; editing a result truthfully returns the selector to Custom.
Exact shape/count/accent tests and the complete focused Redshift gate pass.
Implemented Step Motion behavior:
- Per-step value constrained between A and B.
- Step count, direction, smoothing, probability, and rotation.
- Tempo divisions use the same timing source as ordinary motion.
- Editing remains inside the destination's
Mpopup.
This is ideal for Bit Depth, Rate Reduction, filter sequences, and rhythmic Drive movement. The editor reuses the app's compact bar-editing conventions.
Phase 4 - Shared MSEG Component
Build a reusable app-wide modulation component only after Redshift proves the control language:
- Multi-point curves with per-segment duration and curve.
- Loop region, one-shot, release segment, and endpoint holds.
- Preset library for ramps, pulses, sidechain-like shapes, Euclidean accents, and common rhythmic phrases.
- Copy/paste between Redshift, Prismatic Temple, 80s FM, effects, and Mixer.
The shared component owns timing and trajectory generation. Instruments own destination ranges, labels, limits, smoothing, and modulation application.
Core checkpoint completed 2026-08-28: SpaceAgeMotionCurve.h provides an
engine-neutral fixed-capacity curve with 2-16 normalized points, independent
point positions and values, and signed curvature per segment. Validation rejects
non-finite, out-of-range, unordered, or incomplete curves. A separate prepared
evaluator avoids repeating validation in a future audio path. Exact endpoint,
uneven-duration, interpolation, curvature, hostile-phase, and malformed-curve
contracts pass. This checkpoint adds no route state, persistence, UI, or audio
activation yet.
Playback checkpoint completed 2026-08-28: the shared core now validates indexed loop and release regions, resolves Forward and Ping-Pong held-note loops, clamps non-looped curves as one shots, and evaluates a release tail from the exact value captured at note-off. This avoids a discontinuity when the release-point value differs from the currently sounding loop value. Playback helpers remain stateless; the owning voice will retain elapsed time, note state, and the captured release value. Exact loop repetition, reflection, completion, release continuity, and invalid-region contracts pass. No Redshift route is active yet.
State checkpoint completed 2026-08-28: each Redshift instrument slot and Tone destination can publish one immutable validated MSEG route. Untouched routes stay null; edited disabled routes remain available for later re-enabling. Sparse project save/restore carries points, segment curves, loop mode and indices, release point, and enabled state. Scoped lane snapshots copy the same immutable ownership without sharing mutable data. Exact round-trip, disabled-state retention, destination isolation, clear, invalid publication, and bounds contracts pass. Patch and Motion Block persistence, audio activation, and UI remain pending.
Preset checkpoint completed 2026-08-28: Redshift .sspoly patches now carry
validated sparse MSEG routes, and Tone Motion Block schema version 5 stores the
same route set transactionally. Versions 1-4 and older Redshift patches remain
loadable and explicitly clear all MSEG routes so no curve leaks from the previously
edited sound. Current block round-trip preserves points, curvature, loop/release
settings, and enabled state. Malformed MSEG data rejects the entire block before
any parameter or route changes. UI remains pending.
Audio checkpoint completed 2026-08-28: an enabled MSEG replaces only the destination's normalized trajectory and takes precedence over Step Motion on that same route. A/B, Depth, Cycle Length, Trigger, Phase, Offset, Fade In, Note Launch, and outer one-shot lifetime remain owned by Tone Motion. Held voices use the MSEG's Forward, Ping-Pong, or one-shot playback settings. On the first release sample, each voice captures its exact sounding route value and traverses the configured release tail over one selected Cycle Length. Route snapshots are acquired once per block; voice clocks, capture flags, and release values remain fixed per-voice state. A curved four-point cutoff route with an internal loop and release tail is finite, bounded, isolated, and audibly distinct from continuous and Step Motion.
Editor checkpoint completed 2026-08-28: every Tone M popup now exposes a
compact STEP / MSEG page selector in the existing advanced-editor area. The
MSEG page edits point count, point position/value/outgoing curvature, loop mode
and bounds, and release point. Point-count changes resample the prior curve rather
than discarding its shape. Step Motion and MSEG are mutually exclusive per route,
and each user gesture publishes one validated immutable snapshot.
Factory-shape checkpoint completed 2026-08-28: the MSEG page now offers Ramp Up,
Ramp Down, Triangle, Pulse, Sidechain Duck, Swell + Release, and Syncopated
starting shapes. Factories produce ordinary validated route data rather than an
audio-path preset mode, and manual edits return the browser to Custom. The
focused contract proves all seven routes valid and musically distinct by their
defining point, loop, and release properties.
Route-reuse checkpoint completed 2026-08-28: every Tone M popup now provides
COPY ROUTE and PASTE ROUTE. The in-memory clipboard owns one destination's 13
journey parameters plus optional Step Motion and MSEG snapshots. Paste validates
all parameter ranges before creating one instrument-scoped undo checkpoint and
does not touch base Tone knobs, other routes, or shared legacy controls.
Durable-route checkpoint completed 2026-08-28: SAVE ROUTE and LOAD ROUTE
store the same narrow clipboard payload as a versioned .sstroute file. The
format is destination-neutral so a route may move between Tone controls and
projects. Parsing prepares and validates the complete payload before paste. A
focused contract proves exact round-trip and malformed-version refusal without
overwriting the previously prepared route.
Route-library checkpoint completed 2026-08-28: the popup discovers .sstroute
files in its dedicated Routes folder, presents them with natural name sorting,
and requires explicit APPLY SAVED. Merely selecting a route cannot alter the
patch. Successful saves refresh and select the new entry, while LOAD ROUTE
remains available for files outside the managed folder.
Library-management checkpoint completed 2026-08-28: the saved-route row now offers guarded deletion. Confirmation identifies the selected route and states that the sounding patch remains unchanged. Success refreshes the library; file permission or in-use failures are reported without modifying route state.
Drag-and-drop checkpoint completed 2026-08-28: an open Tone M popup is a narrow
file-drop target for exactly one .sstroute. Valid drags receive a visible border
highlight and apply through the same transactional parser/paste path. Invalid
files report rejection inside the popup. The app-level MIDI/package drop handler
remains unchanged and cannot accidentally interpret route assets.
DSP Architecture
- Implement one normalized
MotionRouteevaluator producing 0-1 output. - Map normalized output into native A/B units at the destination boundary.
- Keep parameter storage per instrument instance and per destination.
- Use the transport's monotonic musical clock for Free mode.
- Track note groups explicitly for Legato trigger behavior.
- Use deterministic per-route random state so projects render identically.
- Allocate no memory and take no locks in the audio callback.
- Bypass inactive routes before waveform, random, curve, or coefficient work.
- Smooth continuous destinations; intentionally quantize Bits and Rate Reduction.
- Recalculate expensive filter coefficients only when their smoothed value changes.
UI Direction
Keep the existing M button beside each Tone knob. The popup should progress
from common to advanced controls:
- A, B, Depth, Rate/Duration
- Cycle, Shape, Trigger
- Phase, Skew, Fade In, Offset, conditional Pulse Width, Hold A, Hold B
- Step or MSEG editor only when that route type is selected
The M button remains orange when active. Completed 2026-08-28: active buttons
show a compact authoritative Cycle Length badge (M 1/4, M 8B, M 1BT) while
inactive routes retain the familiar M. The badges reuse the shared rate-choice
mapping and occupy reserved header space rather than covering rotary controls.
Truthful Main Knobs
The main knob remains an anchor while Depth is below 100%, so merely opening or
enabling an M panel must not disable it. Show authority progressively:
- Depth 0%: normal knob appearance and full manual authority.
- Depth 1-99%: progressively dim the rotary body while keeping its label and anchor value readable; dragging remains enabled.
- Depth 100%: clearly ghost and disable dragging because motion has complete
authority. Tooltip:
Controlled entirely by Motion. Reduce Motion Depth to use this knob. - Show the live modulated value as an orange arc around the stationary anchor knob. The arc is display-only and must not feed values back into automation.
Ghosting follows effective Depth, not whether the popup is open. Closing the popup therefore never disguises or changes the route's authority.
Verification Gates
- Every route is audible, finite, bounded, and neutral at zero Depth.
- A and B are reached within tolerance for every shape and direction.
- Note, Legato, and Free triggers begin at the documented phase.
- Transport trigger and musical Offset remain aligned after stop/restart, seeking, loop wrap, block-size changes, and offline rendering.
- 8-bar and 16-bar routes complete at the exact documented musical position.
- Independent 7-bar and 8-bar routes retain their expected 56-bar relationship.
- Fade In reaches the selected Depth without stepping or overshoot.
- One-shot modes stop exactly once and hold the documented final value.
- Tempo-sync remains sample-consistent across block sizes and tempo changes.
- Random modes are deterministic across save/reload and offline rendering.
- Loading or editing one lane cannot alter another lane's routes or timbre.
- Older Redshift patches migrate without changing their current sound.
- CPU profiles cover neutral, typical, and worst-case eight-route patches.
- Knob ghosting exactly matches authority at 0%, intermediate, and 100% Depth; the live arc never writes parameters or creates Undo events.
- Portamento covers detached, overlapping, ascending, descending, chord, and tempo-change cases without stuck pitch or cross-lane state.
Recommended Order
Finish Phase 0 from user testing, then implement Phase 1, truthful knob display, and Phase 1.5 portamento as the next Redshift performance release. Phase 2 is a high-value refinement. Step Motion and MSEG should wait until the route evaluator and UI vocabulary have proven stable enough to become shared infrastructure.
2026-08-27 Implementation And Documentation Checkpoint
- Per-destination A/B/Depth/Duration routes now expose route Shape, Cycle, Trigger, Phase, Skew, Fade In, and Offset.
- Duration vocabulary now includes 3, 5, 6, 7, 8, 9, 12, and 16 bars while retaining previous parameter indices for patch compatibility.
- Main Tone knobs now communicate Motion authority by progressive ghosting and become non-editable only at full Depth.
- Low-pass and high-pass filters now expose 6, 12, 18, and 24 dB/oct slopes; existing patches retain the original 12 dB/oct default.
- Focused Redshift audio regression passes filter bypass, filter modes, waveform distinction, lane isolation, motion audibility, and zero-Depth neutrality.
docs/Redshift_User_Manual.mdis the living user-facing explanation and must be updated in the same change whenever public Redshift behavior changes.
Still required before this phase is called mature: human slope-switch listening, representative-host transport listening, and optimization of the measured dense 32-voice Tone Motion case. Representative-polyphony profiling, host-timeline alignment, exhaustive project save/reload coverage, automated slope-switch continuity, expanded portamento, and reusable full Tone Scene files are complete.
2026-08-28 Filter Slope Transition Checkpoint
- Each voice now interpolates continuously between adjacent 6, 12, 18, and 24 dB/oct responses instead of selecting a pole output abruptly.
- The shared auxiliary state changes its 6 dB/18 dB role at the neutral 12 dB coordinate, where its interpolation contribution is zero.
- The focused gate passes
slopeSwitch=1, proving distinct static slopes, bounded output, and a held-note 6-to-24 dB transition below the discontinuity limit.
2026-08-27 Oscillator Pitch Motion Checkpoint
- OSC 1 and OSC 2 now have independent specialized Pitch Motion popups.
- Each route provides A/B endpoints in cents, Depth, synchronized Duration through 16 bars, Phase, seven route shapes, and Key Reset/free-running behavior.
- Off Duration and zero Depth are strict neutral bypasses.
- The focused Redshift gate proves neutral bypass and independent audible routes.
- Follow-up candidates include reusable Motion Block files after the specialized workflow has received listening feedback.
- Specialized Pitch Motion
.ssmotionSave/Load is now implemented. Its schema owns only A/B/Depth/Duration/Phase/Shape/Key Reset and applies to the oscillator whose popup is open. It does not carry patch, lane, Mixer, or asset state. - The
.ssmotioncontract now has an automated roundtrip and isolation gate. Unsupported versions, incomplete values, out-of-range values, and invalid oscillator destinations are rejected before any parameter is changed.
2026-08-28 Note And Legato Trigger Checkpoint
- Note and Legato no longer share the voice envelope's general age.
- Note restarts on every note-on, including overlapping notes in Legato play mode.
- Legato owns a phrase clock that continues across overlapping note changes and resets only when a new detached phrase begins.
- Block preparation enables each clock only when an active route requires it; patches without Note or Legato Tone Motion pay no per-sample clock cost.
- The focused gate holds one note, overlaps another, and proves exact Note reset with uninterrupted Legato phrase time.
2026-08-28 Live Tone Motion Feedback Checkpoint
- Every active Tone destination can now show a read-only orange marker outside its knob for the currently rendered value. The regular thumb remains the base anchor and is never moved by feedback.
- Polyphonic display follows the newest active Redshift voice. A generation-based publication contract prevents stale values from appearing after a voice or editor is gone.
- The editor timer updates the marker at 20 Hz and repaints only after a visible position change. It never writes parameters, automation, or Undo history.
- Audio publication is demand-gated by editor lifetime and occurs once per block. Closed editors, headless tests, and export rendering perform no voice scan or feedback stores.
- The focused gate proves finite active values, invalid-index rejection, and immediate publication invalidation when feedback is disabled.
2026-08-28 Complete Tone Motion Block Checkpoint
- Every
Mpopup now providesSAVE ALLandLOAD ALLfor one complete.sstmotionblock containing all eight routes and both legacy shared controls. - The block intentionally excludes base Tone knobs and every non-motion patch, Mixer, automation, lane, and asset field.
- The loader validates format version, structure, numeric type, finiteness, and each destination parameter range before making any change.
- The focused contract round-trips all 106 owned fields, preserves base Cutoff and another instrument slot, and proves malformed files cannot partially apply.
- The
.sssceneTone Scene format now combines the 12 base Tone choices/anchors with this complete Motion Block while remaining distinct from motion-only reuse.
2026-08-28 Tone Scene Checkpoint
SAVE SCENEandLOAD SCENEare available from every Tone Motion popup.- The versioned
.sssceneformat owns 12 base Tone values plus the complete validated Motion Block, including Step Motion and MSEG routes. - Oscillators, envelopes, play mode, portamento, Mixer state, automation, patch identity, and other instrument slots remain outside the scene boundary.
- The focused gate passes
toneScene=1, proving round-trip, isolation, and malformed-file transaction behavior.
2026-08-28 Host Timeline Alignment Checkpoint
- Transport-triggered Tone Motion now captures one immutable transport position at the start of each audio block when host-follow is enabled.
- Absolute host sample position is authoritative. PPQ and BPM provide a bounded fallback for hosts that do not publish sample position; absent host data falls back to SpaceAge's existing internal sequencer clock.
- Host play state controls within-block advancement. Seeking or returning to a host loop boundary therefore repositions every Transport route without per-voice playhead calls or accumulated-clock drift.
- Standalone behavior is unchanged. Internal elapsed samples advance only while the internal sequencer runs.
- The complete focused Redshift gate passes, including
transportClock=1and hot-path equivalence. A plug-in listening pass across representative DAWs remains required because hosts differ in playhead metadata quality.
2026-08-28 Complete Project-State Persistence Checkpoint
- The ordinary SpaceAge project-state path now has an exhaustive automated round trip for all 107 Tone Motion parameters: three shared controls plus 13 fields for each of eight destinations.
- The gate writes non-default values across A, B, Depth, Sync, Shape, Cycle, Trigger, Phase, Skew, Hold A/B, Fade, and Offset, restores a fresh processor, and compares every actual parameter value.
- A neighboring instrument slot is configured independently and verified after restore. This proves the project serializer preserves slot ownership rather than merely proving that values exist somewhere in the state tree.
- Step Motion and MSEG project-state contracts remain separate and continue to
pass. Together with
toneBlock=1andtoneScene=1,toneProjectState=1closes the automated save/reload coverage gap for the current Tone system.
2026-08-28 Representative Polyphony CPU Checkpoint
- A dedicated Release benchmark now measures neutral, typical, and deliberately dense flagship-motion Redshift patches at 1, 8, 16, and 32 sustained voices.
- Every row verifies exact retained voice count after warm-up and measurement, finite output, and audible signal. Five runs produce the reported median at 48 kHz with 512-sample blocks.
- Measured callback loads were:
| Profile | 1 voice | 8 voices | 16 voices | 32 voices |
|---|---|---|---|---|
| Neutral | 4.40% | 8.14% | 12.40% | 22.06% |
| Typical | 5.19% | 12.81% | 21.47% | 38.78% |
| Flagship Motion | 6.53% | 25.05% | 46.77% | 90.52% |
- The neutral and typical rows have useful headroom. The dense 32-voice row is technically real-time in this isolated run but too close to the deadline for a production comfort claim, especially before Mixer and effects cost.
- The older custom-cycle microbenchmark used repeated coalescing public triggers and therefore did not guarantee its intended 16 voices. It now uses the immediate test allocator, explicit Poly/Gate mode, and indefinite held voices.
- The corrected full gate passes with exact optimized/reference output. Its true
16-voice optimized loads are
40.28 / 44.75 / 46.02%for procedural, one-custom-cycle, and two-custom-cycle routes. Corresponding median paired ratios of0.788 / 0.867 / 0.871validate a 13-21% optimized-path advantage.
2026-08-28 Motion Interpolation Safety Foundation
- A self-test-only wrapper now exposes the exact production Tone Motion trajectory evaluator to a numerical interpolation harness; no curve formula is duplicated.
- The first safe candidate set contains only legacy sine loops and eased
ping-pong curves at 1/16 note or slower. Eight-sample linear interpolation has
a measured worst normalized error of
0.00000900over two complete fastest cycles, including wrap/turn boundaries. - Four samples measured
0.00000250; sixteen measured0.00003541. The initial production experiment must use eight or fewer and then pass rendered-audio, transition, aliasing, exact bypass, CPU, and listening checks. - Square, random, Step Motion, MSEG, one-shot modes, discontinuous loop ramps, and sharper turning shapes are ineligible and remain audio-rate.
2026-08-28 Tone Motion Interpolation Checkpoint
- Eight-sample interpolation is now active only for the two numerically proven route families: legacy sine loop and centered eased ping-pong without endpoint holds, each at 1/16 note or slower.
- Exact anchors are evaluated on fixed global eight-sample boundaries. A new voice uses exact evaluation until the next boundary, preventing a partial segment from inheriting stale state.
- Fades, launch offsets, transport triggers, Step Motion, MSEG, one-shot and discontinuous or sharper shapes remain sample-accurate by construction.
- End-to-end rendered validation passed at 32 voices with maximum sample error
0.00000593, relative RMS error0.00000133, and about 9.9% lower callback cost in the paired stress fixture.
2026-08-28 Filter Coefficient Experiment Result
- Lookup-table replacements for dynamic cutoff and resonance were tested and rejected. Repeated median timing showed both were slower than the exact math.
- Production therefore retains exact coefficient conversion. The successful eight-sample motion interpolation remains independent and unchanged.
2026-08-28 Shared Route Evaluation Checkpoint
- Free-running and transport-triggered routes now evaluate once per instrument slot and render sample when they have no MSEG release state.
- Note and legato triggers remain per voice. MSEG remains per voice because release position and captured release value belong to the voice lifecycle.
- Deterministic Step Motion may use the shared path; the same destination and global clock produce the same probability gate and step value for every voice.
- The focused 32-voice A/B is bit-exact and records about 22.2% lower callback cost. The independent note-triggered interpolation A/B also passes.
2026-08-28 Shared Oscillator Motion Checkpoint
- Pitch Motion and Morph Motion use one slot-owned value per oscillator and sample while Key Reset is off. Key-reset routes continue to follow each voice's age.
- Deterministic random and sample-and-hold shapes are safe to share because their hash includes cycle, slot, and oscillator rather than voice identity.
- With global Tone, dual Pitch Motion, and Morph Motion active, the 32-voice A/B remains bit-exact and measures about 26.4% lower callback cost.
Single-Cycle Oscillator Direction
Single-cycle waveforms should become oscillator sources for Oscillator 1 and 2, not an additional sample layer. This preserves Redshift's tuning, glide, phase, spread, modulation, filter, and patch model. Reuse the app's indexed waveform library and asset-repair vocabulary, but maintain Redshift-owned selection state.
The first implementation should use normalized, DC-corrected, phase-consistent tables with offline mipmap generation for anti-aliased playback. Arbitrary user files require root/period validation, deterministic resampling, missing-asset repair, project archive support, and bounded preview/background indexing. Do not perform file I/O, analysis, allocation, or table generation in the audio callback.
Initial foundation now implemented: eight precomputed mipmapped cycle families are independently selectable on both Redshift oscillators. The existing Width control scans prepared frames, and pitch selects an appropriate harmonic budget. The focused gate proves all twenty total waveform choices are finite, audible, distinct under its render signature, and isolated between oscillator controls. User-file import and catalog browsing remain separate follow-up work.
The preparation layer is now implemented in RedshiftCycleLibrary: bounded
file decoding, deterministic resampling, DC removal, harmonic analysis, nine
mipmapped tables, normalization, and finite pitch-dependent lookup. Its focused
gate rejects malformed sources and proves deterministic output. Publication into
per-slot/per-oscillator immutable publication, direct LOAD controls, and
project/patch path persistence, missing-file repair, portable archive packaging,
and background job dispatch are now implemented. The ownership gate restores
opposite oscillators on separate slots and proves clearing one does not touch the
other. The project-archive gate packages an imported User Cycle, redacts its local
path, remaps it under the imported archive, renders it, resaves the project, reopens
it, and renders it again. Full watched user-folder catalog selection remains a
follow-up.
2026-08-28 Oscillator Source Morph Motion Checkpoint
- OSC 1 and OSC 2 now have independent
MORPH Mpanels using the established A/B, Depth, Duration, Phase, Shape, and Key Reset timing language. - Depth blends the route target with the static Morph value rather than replacing it, preserving the intended A-to-B journey at partial strength.
- Zero Depth or an Off duration takes an exact neutral path. Active routes reuse the prepared block reciprocal and existing deterministic shape evaluator.
- Patch and project state include all fourteen new parameters. The focused sonic gate proves neutral-depth equivalence, audible OSC 1 and OSC 2 routes, finite bounded output, oscillator isolation, and the existing hot-path contract.
2026-08-28 Morph Motion Block Checkpoint
- Each Morph Motion panel now saves and loads narrowly owned
.ssmorphblocks. - Five factory starting points cover slow, triangular, rhythmic, reverse, and deterministic wandering source journeys.
- Loading is transactional: format, version, structure, numeric type, finiteness, target oscillator, and parameter ranges are validated before any value changes.
- The focused
morphBlock=1contract proves exact round-trip, opposite-oscillator isolation, and rejection without partial application.
2026-08-28 Morph Block Library Checkpoint
- The Morph panel now indexes factory and saved blocks in one
BLOCK LIBRARY. - Saved
.ssmorphfiles are discovered from the dedicated Redshift Motion Blocks folder, sorted case-insensitively, and refreshed immediately after saving. - External files remain available through
LOAD BLOCK; library selection reuses the same transactional parser as direct loading. - Discovery occurs only when the popup opens or a save succeeds. No watcher, polling timer, or audio-thread filesystem work was introduced.
2026-08-28 Morph Block Deletion Checkpoint
DELETE SAVEDis enabled only for an indexed user.ssmorphfile; factory entries and the library placeholder remain immutable.- Explicit confirmation names the file and states that the sounding patch will not change. Success refreshes the library; failure remains visible in-panel.
- Deletion never publishes parameters, resets motion, or touches another file.
2026-08-28 Morph Block Drag-And-Drop Checkpoint
- An open Morph Motion popup accepts exactly one
.ssmorphfile and gives a thicker orange border plus restrained fill feedback while the drag is valid. - Drop delegates to the same transactional block parser used by Load and the library. Success names the applied block; malformed input remains unchanged and reports rejection in-panel.
- The target is popup-local. The editor's global MIDI and package drop boundary was not widened or reinterpreted.
Cycle Library Status Correction
The watched user-folder workflow is implemented. Redshift shares the indexed single-cycle catalog, with explicit folder opening and rescanning, category and text search, favorites, recents, missing-file pruning, direct import, and portable project ownership. Scanning remains user-triggered rather than continuously polling the filesystem.
2026-08-28 Dynamic Filter Coefficient Experiment
- Sharing exact cutoff coefficients across voices was evaluated for global Tone Motion with all voice-dependent cutoff sources disabled.
- Audio remained bit-exact, but five-pass median timing measured the shared path about 0.6% slower. The experiment was removed from production.
- Existing shared trajectory evaluation remains valuable; coefficient conversion stays per voice for dynamic cutoff and block-cached for genuinely static cutoff.
2026-08-28 Drift Recurrence Experiment
- A stateful oscillator recurrence was evaluated for Drift's two voice-aged sine terms. It preserved rendered output in the focused fixture but measured about 1.3% slower by five-pass median.
- The experiment was removed. Drift remains deliberately voice-owned and uses the existing direct expression; the performance fixture now exercises it routinely.
2026-08-28 Feature-Cost Breakdown
- A dedicated 32-voice, five-pass-median profile now isolates the tonal base, cross-modulation, drift/vibrato, Tone Motion, and their combined flagship case.
- Tone Motion produced the largest incremental cost in the initial run. A shared exact cache for resonance, drive, bit depth, and crush-rate conversion was then tested, but improved the paired row by only about 0.14% and was removed.
- The profiler remains available for the next architectural Tone Motion pass.
2026-08-28 Tone Destination Split
- The feature-cost gate now isolates cutoff, resonance, drive, and bit-depth motion using default key-reset, voice-owned routes.
- Cutoff, resonance, and drive have similar incremental cost; bit depth is only somewhat cheaper. All four together remain the largest flagship increment.
- This points toward carefully bounded control-rate interpolation for smooth, slow per-note routes, not another exact shared cache. Discontinuous, Step, MSEG, held, faded, offset, and fast routes must remain on their exact paths.
2026-08-28 Destination Conversion Checkpoint
- Resonance conversion interpolation was removed after its repeat median weakened
from
0.982to0.996and failed the 1% retention guard. - Drive gain conversion interpolation also failed its clean repeat: its apparent
0.975ratio weakened to0.997, below the required 1% improvement. - Both experiments were removed. Drive and resonance retain exact audio-rate conversion; the established trajectory interpolation remains intact.
2026-08-28 Tonal-Base Profile
- A focused profile now separates oscillator core, OSC 2, Spread, Fold, basic filtering, styled filtering, and their combined tonal base.
- Styled filtering is the largest isolated increment, followed by basic filtering and Spread. This establishes the evidence-based order for the next optimization passes without reducing polyphony, oversimplifying filters, or changing tone.
- A floor-based Spread phase wrap produced no repeatable gain and was removed. Spread already caches side frequencies and cycle mip choices; future work must reduce oscillator-rendering structure itself or leave the feature unchanged.
2026-08-28 Filter Cost Split
- The retained tonal profiler now distinguishes clean pole depth from Silk and Bite model character instead of grouping slope and style in one row.
- Clean 18 dB adds about 1.1 callback-load points over the basic 12 dB filter; Silk 12 dB adds 2.9, Silk 18 dB adds 3.9, and Bite 12 dB adds 9.6.
- Settled integer model/slope branches were tested and removed after worsening the relative result. The next filter experiment should focus narrowly on Bite's two nonlinear stages and must preserve its established regression signatures.
2026-08-29 Bite Specialization Result
- A Bite-only exact specialization of the two unit-depth blend expressions made the focused result worse and was removed.
- Bite's remaining cost is concentrated in the pre-filter and post-filter rational saturation divisions. Approximate reciprocal math is deferred because it would change the model's transfer curve; a future SIMD voice architecture could reduce this cost without redefining the sound.
2026-08-29 Filter Benchmark Follow-Up
- A shared clamp for the two parked cascade states reduced source operations but worsened the measured basic-filter result and was removed.
- The expanded profiler remains useful for ranking large costs. Small experiments should now use an adjacent or interleaved oscillator-core baseline to control scheduler and thermal drift across the several-minute filter matrix.
2026-08-29 Paired Tonal Benchmark
- The tonal profiler now provides the required adjacent baseline automatically and alternates whether the baseline or feature runs first.
- The first paired result confirms Bite as the largest isolated tonal feature at
+29.94points, followed by Silk 18 dB at+24.04, Silk 12 dB at+23.26, the basic filter at+22.23, Spread at+15.87, OSC 2 at+14.39, and Fold at+10.22. The full tonal combination adds+52.21points. - Future small optimization claims must use these paired deltas rather than subtracting independently timed rows from a distant oscillator baseline.
2026-08-29 Basic Filter Focus Gate
- Static Clean filtering was tested with a prepared normalization reciprocal;
its paired increment worsened from the prior
+22.23to+40.22points, so the production experiment was removed. - The two-row basic-filter/core gate is retained for fast paired validation via
SPACEAGE_REDSHIFT_BASIC_FILTER_COST_ONLY. It alternates consistently with the full profiler's feature-first basic-filter pair and retains five-pass medians. - A post-revert run passed at
+19.25points, confirming restoration of the original production filter path.
2026-08-29 Simple Oscillator Early Paths
- Sine, Triangle, and Saw now return before oscillator setup they cannot use. Their formulas and anti-aliasing behavior are unchanged.
- Three separately compiled, alternating original/optimized comparisons all favored the new path; median oscillator-core reduction was about 2.0%.
SPACEAGE_REDSHIFT_OSCILLATOR_CORE_COST_ONLYretains the one-row five-pass fixture for future waveform-rendering experiments.
2026-08-29 Pulse Early-Path Result
- Square/Pulse early returns were slower in three alternating compiled-binary comparisons and were removed. The current switch layout remains preferable.
- A dedicated
SPACEAGE_REDSHIFT_PULSE_CORE_COST_ONLYfixture remains available so future Pulse work can be measured without rerunning the full tonal matrix.
2026-08-29 Rectified Oscillator Result
- Explicit reuse of the rectified waveform's first sine result produced no gain in three separately compiled comparisons and was removed.
- Release compilation already appears to consolidate the expression. The focused
SPACEAGE_REDSHIFT_RECTIFIED_CORE_COST_ONLYfixture remains available.
2026-08-29 Per-Oscillator Motion Activity
- Pitch and Morph route activity is now prepared separately for OSC 1 and OSC 2. When only one route is active, the neutral companion evaluator is skipped.
- Custom-cycle mip preparation follows the corresponding oscillator's Morph route rather than a synth-wide activity flag, removing unreachable target work.
- The focused gate retained negligible interpolation error and bit-exact shared output. Silent OSC 2 phase advancement remains intentional for automation continuity.
2026-08-29 Silent OSC 2 Derived Work
- Silent OSC 2 no longer evaluates Morph Motion or resolves a custom-cycle mip. Both are stateless derived values and resume at the correct current clock position.
- Pitch Motion, frequency, and phase continue advancing while silent. The focused motion gate passed with negligible error and bit-exact shared output.
2026-08-29 Neutral Pitch Helper Result
- An all-neutral Drift/Cross Mod/Vibrato early return was flat once and slower in two alternating compiled comparisons, so it was removed.
- The existing helper remains preferable; no temporary comparison executable remains.
2026-08-29 MIDI Expression Lookup
- Pitch bend and mod-wheel vibrato now share one MIDI source/channel lookup per rendered sample, retaining sample-accurate response while reducing duplicate work.
- The focused 32-voice oscillator fixture showed an approximately 0.7% median load reduction across three compiled pairs, with identical output peaks.
2026-08-29 Full-Morph Endpoint
- Oscillator morph at exactly 100% now renders only its audible target waveform.
- Two focused compiled comparisons reduced 32-voice load by about 2.0% and 3.7%, with identical output peaks; the dedicated endpoint fixture remains available.
2026-08-29 Full-Noise Sleep Result
- Sleeping discarded oscillator work at 100% noise mix was tested and removed.
- Three compiled pairs produced mixed results and only about 0.14% median change; the focused fixture remains, but production keeps the simpler path.
2026-08-29 Filter Smoothing Guard Result
- Equality branches around settled filter-model and pole-slope smoothing were slower in both focused compiled comparisons and were removed.
- The original straight-line interpolation remains the measured production path.
2026-08-29 Shared Filter Preparation Result
- Skipping shared post-filter preparation for Redshift-only slots produced mixed results in the voice-heavy fixture and was removed.
- A dedicated silent-slot block-preparation benchmark is required before revisiting it.
2026-08-29 Silent Block Preparation Fixture
- The dedicated fixture now measures all 80 configured Redshift slots without
active voices. The original path is approximately
2.4 ms/blockin this extreme case, or about30 usper slot. - It confirmed that the proposed shared-filter ownership gate regresses the filter-on case, so the original preparation path remains in production.
2026-08-29 Static Filter Coefficient Cache
- Static filter coefficients are now retained per Redshift slot until cutoff or
sample-rate state changes. This removes repeated
tanandexpevaluation from settled blocks without changing modulation, smoothing, or voice state. - The all-slot wall-clock fixture could not resolve the small saving above system noise, so no percentage is assigned. The retained justification is the exact operation-count reduction and explicit invalidation behavior.
2026-08-29 Dynamic-Cutoff Cache Result
- A generic exact-cutoff cache was rejected because it made smooth 32-voice
cutoff motion about 1.25% slower (
144.41%to146.22%). - Reuse for stepped and held motion remains viable only with block-prepared route classification that leaves continuous sweeps on the current branchless path.
2026-08-29 Step-Cutoff Cache Result
- Explicitly limiting reuse to unsmoothed Step Motion still regressed the focused 32-voice workload by roughly 10% in both execution orders.
- The stateful cache was removed. The retained step-cutoff fixture should next be used to evaluate chunked coefficient interpolation rather than equality caches.
2026-08-29 Shared Drive-Motion Gain
- Free-running and transport Drive Motion now share one exact dB-to-gain conversion per source and sample instead of repeating it for every voice.
- Two compiled comparison orders reduced the focused 32-voice load by about 2.3% and 3.9%, with identical output peaks. Per-voice triggers remain independent.
2026-08-29 Shared Bit-Depth Result
- Sharing rounded Bit Depth Motion values was effectively flat in one order and slower in reverse order, so the experiment was removed.
- The focused fixture remains; production keeps the simpler per-voice bit cache.
2026-08-29 Shared Crush-Rate Result
- Sharing free-running Crush Rate rounding was slightly slower in both execution orders, so production retains direct per-voice rounding.
2026-08-29 Shared Resonance-Motion Conversion
- Free-running and transport resonance now share one exact damping conversion per
source and sample instead of repeating
powfor every voice. - Two compiled orders improved the focused 32-voice workload by about 4.0% and 2.4%, with identical output peaks. Per-voice trigger modes are unchanged.
2026-08-29 Shared Cutoff-Motion Coefficients
- Shared free-running and transport cutoff routes now calculate their exact filter coefficients once per source/sample when all voice-specific cutoff modifiers are inactive.
- Both compiled orders improved the 32-voice fixture by about 1.4%. Filter locks, envelopes, velocity routing, cross-modulation, and per-voice triggers retain their independent paths.
2026-08-29 Shared Band-Pass Gain
- Shared Resonance Motion now carries its exact band-pass gain in the existing source/sample cache, removing repeated per-voice square roots.
- The focused improvement is small, about 0.2% to 0.5%, but both compiled orders favored it and no additional cache-key branch was introduced.
2026-08-29 Combined Shared-Motion Validation
- Simultaneous shared cutoff, resonance, and drive motion matched the independent per-voice reference bit-for-bit in the combined render gate.
- Interpolation remained below
7.45e-06maximum error and9.88e-07relative RMS error. This closes the current exact shared-transform pass.
Rejected Full-Fold Endpoint Bypass (2026-08-29)
- A literal 100% Fold shortcut preserved the measured output peak but increased
load from baseline runs of
91.95%and91.26%to92.71%and92.62%. - The production shortcut was removed. The focused
SPACEAGE_REDSHIFT_FOLD_ENDPOINT_COST_ONLYbenchmark remains as regression evidence and prevents this branch-shaped micro-optimization from being repeated.
Rejected Shared Fold-Drive Intermediate (2026-08-29)
- Reusing one explicit Fold driven-signal local was fractionally slower in both
compiled comparison orders:
92.29%/92.63%and90.86%/90.93%for original/explicit respectively. - Production retains the compact original expression. Future Fold optimization must address the nonlinear functions or architecture, not multiplication that the Release compiler already handles.
Prepared Oscillator Audibility Gates (2026-08-29)
- Oscillator 2 and harmonic/sub levels are already clamped to nonnegative values during Redshift block preparation. Their audio-rate gates now use direct positive comparisons instead of redundant absolute values.
- Alternating compiled oscillator-core comparisons improved by about 1.3% and 1.1%, with identical output peaks. The exact cleanup is retained.
Rejected Main Phase-Increment Cache (2026-08-29)
- Exact frequency-keyed caching of the two main oscillator phase increments was
slower even on static notes: baseline/cached pairs were
81.45%/82.15%and80.45%/83.49%in reverse order. - The cache and its added voice state were removed. Main phase advancement should remain straight-line arithmetic unless a future design can prepare increments without audio-rate cache-key branches.
Rejected Prepared OSC 2 Tuning Product (2026-08-29)
- Preparing the fixed OSC 2 ratio/tuning product once per block appeared faster
in one order (
81.77%/80.49%) but was flat and fractionally worse in reverse order (80.25%/80.26%). - The additional block-control field was removed because the saving did not repeat. Production retains the direct multiplication chain.