SpaceAge Synth Architecture - Invader-Inspired VA + CSound-Inspired Drum Engines
SpaceAge Synth Architecture - Invader-Inspired VA + CSound-Inspired Drum Engines
This document captures the next synth direction for SpaceAge by Sample Squad.
The goal is not to clone another product, but to learn from proven workflows and build a synth family that fits SpaceAge: fast, musical, CPU-aware, and useful inside the lane Arranger and Piano Roll.
Reference points:
- E-Phonic Invader feature page: https://www.e-phonic.com/invader.html
- CSound manual index: https://csound.com/docs/manual/index.html
- CSound forum thread requested for C/C++ embedding research: https://forum.csound.com/t/using-csound-as-a-c-c-library/845/4
- CSound source/API reference entry point: https://github.com/csound/csound
- SMS / analysis-resynthesis research direction: spectral modeling synthesis, deterministic sinusoidal modeling, and stochastic residual/noise modeling.
Current State
The app already has these sound engines:
- Internal Engine
- Classic Machines
- Physical Modeling
- Redshift
- Kick Lab
- Snare Lab
- Hat Lab
- Samples, velocity layers, one-shots, and sample/synth blend
Redshift began as the first melodic test engine and still carries some legacy pad-era plumbing, but it is now the core everyday polyphonic synth. For serious Piano Roll and Arranger testing, it needs to keep moving toward a more intentional subtractive-synth architecture.
Product Role
The synth should serve three jobs:
- Give the Piano Roll immediate melodic usefulness without VST hosting.
- Let the Arranger lanes become musically meaningful: Bass, Harmony, Melody, and user-created lanes.
- Give SpaceAge a distinctive sound world: space-age analog, gritty percussion, physical-ish oddities, and quick usable basses/leads/pads.
Architecture Choice
Do not bury the new synth inside the existing drum controls.
Recommended structure:
- Keep
Redshiftas the first implementation target. - Continue evolving it as the dependable SpaceAge VA voice rather than renaming the engine again.
- Add a dedicated parameter family for the VA engine instead of reusing too many drum-engine controls.
- Keep the UI behind the
CREATEpage so it does not clutter Pads, Sequencers, or Arranger. - Continue moving melodic use toward lane-owned Instruments chosen from the Instrument Bay, so Bass/Harmony/Melody lanes can own synth patches independently of pads.
Invader-Inspired Feature Target
The reference synth is attractive because it is direct: knob-per-function, musical defaults, classic subtractive signal flow, and enough modulation to make simple patches feel alive.
Oscillator Section
First pass:
- Osc 1 waveform: saw, square, pulse, triangle, sine
- Osc 2 waveform: saw, square, pulse, triangle, sine
- Osc 2 tune: semitone
- Osc 2 fine tune: cents
- Osc 2 level
- Sub oscillator level
- Noise level
- Pulse width
- Osc mix
Second pass:
- Sync-ish mode
- Ring modulation
- FM amount
- Phase reset / free-run toggle
- Drift
Unison And Stereo
First pass:
- Voice mode: Poly / Mono
- Glide / portamento
- Unison voices: Off, 2, 4
- Detune
- Stereo spread
CPU caution:
- Unison multiplies oscillator work. Keep it capped and obvious.
- Avoid per-pad 8-voice unison across 64 pads as a default.
- Add a quality/voice cap if users push it hard.
Filter Section
First pass:
- Filter type: Low-pass, Band-pass, High-pass
- Cutoff
- Resonance
- Drive
- Key tracking
- Velocity to cutoff
Second pass:
- 12 dB / 24 dB slope
- Dual filter option only if CPU remains calm
- Character choices such as clean, dirty, rubbery
Envelopes
Minimum:
- Amp ADSR
- Filter ADSR
- Filter envelope amount
Nice-to-have:
- Velocity to amp
- Velocity to envelope amount
- Envelope curve control
LFOs
First pass:
- LFO 1 rate
- LFO 1 sync/free toggle
- LFO 1 waveform
- LFO 1 depth
- LFO 1 target: pitch, cutoff, pan, amp, pulse width
Second pass:
- LFO 2
- Sample-and-hold
- Fade-in
- Per-note retrigger
Effects
Keep these toggleable.
- Chorus / width
- Delay send
- Reverb send
- Saturation
CPU caution:
- Reuse global send effects where possible.
- Per-voice effects should be avoided in first pass.
- Per-patch chorus is acceptable if lightweight and bypassed when off.
Arp / Sequencer
Do not build this first. The app already has strong sequencer ambitions.
Later:
- Arp: up, down, up/down, random
- Rate tied to project tempo
- Gate length
- Octave range
- Simple step-gate pattern
This should integrate with the Piano Roll and Arranger rather than becoming a separate competing workflow.
Suggested Parameter List For First Implementation
Oscillators:
- Osc 1 Wave
- Osc 2 Wave
- Osc 2 Semi
- Osc 2 Fine
- Osc 2 Level
- Sub Level
- Noise Level
- Pulse Width
- Drift
Voice:
- Mode
- Glide
- Unison
- Detune
- Stereo Spread
Filter:
- Type
- Cutoff
- Resonance
- Drive
- Key Track
- Velocity Cutoff
Amp:
- Attack
- Decay
- Sustain
- Release
- Velocity Amp
Filter Envelope:
- Attack
- Decay
- Sustain
- Release
- Amount
LFO:
- Wave
- Rate
- Sync
- Depth
- Target
Patch:
- Output Level
- Pan
- Init Patch
UI Strategy
Use tabs or grouped panels inside the existing POLY SYNTH tab:
- OSC
- FILTER
- AMP
- MOD
- FX
- PRESETS
Keep each page readable. The whole synth should not be visible at once.
Immediate presets:
- 16 basses
- 16 plucks
- 16 leads
- 16 pads
- 16 keys/stabs
- 16 weird SpaceAge patches
These should be handcrafted, not random-only.
CPU Strategy
Safe defaults:
- 8 total melodic voices at first
- Unison off by default
- Chorus off by default
- Oversampling off by default
- Filter drive lightweight
- LFO computed per voice only when active
Warn or cap:
- High unison voice counts
- Multiple active synth pads playing long releases
- Heavy per-channel effects stacked with synth voices
CSound-Inspired Drum Synth Direction
The CSound angle should be used as inspiration, not necessarily as an embedded runtime in the first pass.
Why not embed CSound immediately:
- It adds dependency, packaging, licensing, and preset-state complexity.
- It may increase CPU and debugging surface.
- Translating proven synthesis ideas into our JUCE engine keeps the product easier to ship.
What to borrow conceptually:
- Instrument-as-patch mindset: each drum sound is a small signal graph.
- Simple oscillators, envelopes, filters, noise, resonators, and waveshapers arranged in musical recipes.
- Modal/resonant thinking for drums, bells, plates, and metallic percussion.
- Clear separation between transient, body, resonance, and nonlinear output.
Embedding notes:
- The requested Csound forum topic points toward using Csound as a C/C++ library. That route is technically plausible, but it should remain a research/prototyping path until SpaceAge's own engine is stable.
- If we later embed Csound, the likely model is: create an internal Csound instance, compile orchestra/score text or
.csdmaterial, process fixed-size control/audio blocks, then bridge audio/MIDI into JUCE. - Product risk is not raw possibility; it is state management, crash surface, bundled runtime size, preset serialization, dependency licensing, and user support.
- Best near-term value: study Csound examples/opcodes, prototype algorithms externally when useful, then translate the musical behavior into original C++ modules.
CSound-Inspired Kick Engine
This should become a dedicated kick module inside Classic Machines or a new DRUM LAB engine.
Signal layers:
Body oscillator
- Sine or triangle core.
- Fast exponential pitch drop.
- Amp envelope with short attack and adjustable decay.
Sub boom
- Lower sine layer, often less pitch movement.
- Optional longer decay.
- Good for sustained orbit-sub kicks.
Click / beater
- Short impulse or burst of noise.
- High-pass or band-pass filtered.
- Adjustable length, tone, and level.
Knock / shell
- Band-pass resonator around low-mid or mid frequencies.
- Very short decay.
- Adds audibility on small speakers.
Air / dirt
- Short filtered noise or asymmetrical saturation.
- Optional, toggleable.
Output character
- Drive before filtering for thickness.
- Saturation after summing for level and attitude.
- Soft clip final stage.
First parameter list:
- Tune
- Pitch Drop
- Drop Time
- Body Decay
- Sub Level
- Sub Decay
- Click Level
- Click Tone
- Knock Level
- Knock Frequency
- Knock Decay
- Drive
- Saturation
- Output
Second parameter list:
- Pitch Curve
- Body Wave
- Click Type
- Dirt Type
- Stereo Width
- Punch
- Velocity to Pitch
- Velocity to Click
- Velocity to Drive
CPU risk:
- Low. A kick engine made from a few oscillators, envelopes, simple filters, and waveshaping is cheap.
- The expensive path would be high-order modal banks or oversampling every kick by default.
- Keep oversampling optional and per-engine, not always-on.
Unique Drum Synth Opportunities
SpaceAge can stand apart by offering drum synth engines that feel like little laboratories:
- Kick Lab
- Snare Lab
- Hat Lab
- Metal Lab
- Noise Lab
- Impact Lab
Each can use the same mental model:
- Transient
- Body
- Resonance
- Dirt
- Motion
- Output
This is friendlier than exposing raw DSP names and aligns with the app's design goal: simple as possible, not limiting.
Spectral Modeling / Analysis-Resynthesis Direction
Spectral Modeling Synthesis should become a separate research lane rather than being mixed into the first VA or Kick Lab pass.
Core idea:
- Analyze an imported sound offline.
- Track prominent partials over time as deterministic sinusoidal components.
- Model the leftover residual as stochastic/noise energy.
- Resynthesize from a compact model that can be pitched, stretched, blurred, brightened, or made more percussive.
Why it fits SpaceAge:
- It supports the "curiosities" identity: imported recordings can become playable spectral objects instead of static samples.
- It can turn found percussion, short loops, metals, voices, and odd one-shots into new instrument starting points.
- It gives a future synth engine a unique story without requiring VST hosting.
Recommended product shape:
- Engine name candidate:
SPECTRAL CURIOSITIES. - Workflow: choose a sample layer, click
ANALYZE, save a spectral model next to the pad/project, then tweak musical controls. - First musical controls: Tone, Noise, Transient, Smear, Stretch, Pitch, Formant-ish Shift, Metallic, Randomize Partials, Residual Level.
- First preset targets: glass, metal, breathy percussion, robotic vocal grains, bowed/struck hybrids, alien shakers, tuned noise bells.
CPU plan:
- Analysis is offline and can show progress; playback must be bounded and predictable.
- Cap partial count per voice.
- Cache analysis files in the project/archive so collaborators do not need to re-analyze.
- Keep quality modes explicit: Draft, Balanced, High.
- Avoid real-time spectral analysis per voice unless it is a special offline/render feature.
How this relates to the two upcoming synths:
- The Invader-inspired VA stays a classic playable subtractive synth: immediate, light, and useful for songs.
- Kick Lab stays a purpose-built drum module: cheap, punchy, and focused.
- Spectral Curiosities becomes the experimental third lane: sample analysis, resynthesis, hybrid percussion, and SpaceAge identity.
Implementation Sequence
Phase 1 - Design The VA Parameter Model
- Add new VA-specific parameter IDs.
- Preserve existing projects by leaving current shared parameters intact.
- Add migration defaults for old Redshift/legacy Poly Synth patches.
- Keep UI behind the current Redshift tab.
Phase 2 - Upgrade The Audio Engine
- Replace the current simple Redshift voice with a clearer two-oscillator voice path.
- Add filter and amp envelopes.
- Add mono/glide.
- Add unison capped at a safe number.
Phase 3 - Presets
- Create a factory bank that proves the Piano Roll is useful.
- Prioritize basses, plucks, leads, pads, stabs, and strange SpaceAge textures.
Phase 4 - Kick Lab
- Status: first working dedicated engine implemented as
Kick Lab. - Exposed as a starting-point-driven drum synth, not a scary DSP patchbay.
- First bank contains 24 kick starting points: tight, huge, short, long, distorted, soft, clicky, subby, knocky, industrial, cinematic, and vintage-console styles.
- Current parameter surface: sub frequency, pitch drop, drop time, drop curve, sub/body level, body ratio, click amount, click pitch, click length, shell noise, noise decay, noise LPF, drive, punch, saturation, transient, tighten, and body resonance.
- Current render structure: pitch-envelope oscillator core, sub octave body, harmonic body partial, short click generator, filtered shell noise, comb/body resonance, transient accent, asymmetric saturation, soft clipping, and output safety limiting.
- Next refinements: pitch-envelope display, quick macros for
Soft,Punch,Boom, andClick, mini layer meters, and export-to-sample once the engine is musically stable.
Phase 5 - Snare Lab
- Status: first working dedicated engine implemented as
Snare Lab. - Exposed as a starting-point-driven snare designer alongside Kick Lab.
- First bank contains 18 snare starting points: tight studio, fat backbeat, piccolo, nebula-wire, meteor-rim, satellite-paper, brushy, gated, boom-bap, funk, metal-shell, industrial, marching, trap, rim/noise, and SpaceAge styles.
- Current parameter surface: shell frequency, snap pitch, snap time, snap curve, shell body, shell ratio, stick amount, stick pitch, stick length, wires, wire decay, wire LPF, drive, punch, saturation, transient, tighten, and rattle.
- Current render structure: pitch-snapped tuned shell, harmonic shell partial, filtered wire noise, stick transient generator, short rattle/comb path, transient emphasis, asymmetric saturation, soft clipping, and output safety limiting.
- Next refinements: visual shell/wire envelopes, one-knob
Dry,Crack,Body, andRattlemacros, snare-family randomizer, and optional export-to-sample.
Phase 6 - Lane Instruments
- Status: current architecture direction.
- Let Arranger lanes own or reference an instrument patch.
- This prevents melodic composition from depending on a specific drum pad.
- It also makes external MIDI output and future VST hosting cleaner.
Open Questions
- Resolved direction: Redshift and other melodic engines should be lane-owned Instruments chosen from the Instrument Bay. Pads can still load instruments for MPC-style playing, but non-drum lanes should not depend on pad slots.
- Should Kick Lab live under Classic Machines, or become its own engine tab?
- How many melodic voices should be available before CPU warnings appear?
- Should unison be per patch or global quality-limited?
- Should factory melodic presets be saved as Pad Vault items, project presets, or a separate synth-preset format?
Recommendation
Next technical step:
Build the VA parameter model and UI grouping first, then replace the Redshift voice path in a contained way.
Next musical step:
Create 20 strong presets immediately after the first engine pass so testing is musical, not theoretical.
Next drum step:
Build Kick Lab as the first CSound-inspired drum module. It is low CPU, high musical value, and directly supports the product identity.
Physical Bass Guitar Synth
The most promising built-in melodic instrument after the VA synth is a physical bass guitar model. It gives the Piano Roll and Arranger something immediately musical to test, and it supports the "microDAW for actual songs" direction better than another abstract synth.
Recommended model:
- Core: plucked-string waveguide with a fractional delay line.
- Excitation: short filtered noise/impulse shaped by velocity and attack style.
- Pitch: MIDI note to delay length, with optional glide.
- Loss filter: controls damping and brightness decay over time.
- Pickup position: comb/phase coloration derived from where the string is "heard."
- Pluck position: controls harmonic emphasis from where the string is "struck."
- Body: small bank of low-cost resonators for cabinet/wood/body color.
- Output: DC blocker, soft saturation, and limiter protection.
Csound reference direction:
wgpluckis a good conceptual reference because it is explicitly a plucked-string simulation using interpolating delay lines.- Other Csound physical modeling and waveguide examples can guide parameter vocabulary, but the SpaceAge implementation should remain original JUCE/C++ code with bounded CPU cost.
First UI controls:
- Presets
- String / Pickup model
- Attack: Finger, Pick, Thumb
- Pluck Position
- Pickup Position
- Damping
- Body
- Growl
- Velocity Brightness
- Glide
- Reverb Send
First preset targets:
- Round Finger Bass
- Picked Direct
- Muted Thump
- Upright-ish Growl
- Rubber Bass
- Short Staccato Bass
- Dark Dub Bass
- Bright Funk Pick
CPU plan:
- Start monophonic with legato/glide.
- Avoid high voice counts until the model is profiled.
- Keep body resonators optional or very low count.
- Reuse the shared aux reverb/delay architecture rather than embedding expensive time effects inside the synth.
Current Redshift Expansion
The current Redshift pass makes the instrument more useful for Arranger and Piano Roll testing without turning it into a CPU-heavy science project.
Added or exposed controls:
- Velocity Filter, so performance velocity can push the low-pass filter open musically.
- Drift, using slow free-running pitch motion to make static patches feel less frozen.
- Body Comb, reusing the shared comb/body coloration path for more instrument-like resonance.
- Metal Shimmer, a small inharmonic modal partial layer for bells, plucks, struck tones, and space-age color.
- Existing tempo-synced filter LFO remains available as the first reusable motion block concept.
Implementation note:
These changes are CSound-inspired in vocabulary and intent, especially the modal/inharmonic physical-modeling direction, but the implementation remains original native JUCE/C++ code. That keeps licensing clean and CPU behavior predictable while still letting SpaceAge learn from decades of synthesis practice.