Here's a Claude-friendly prompt to expand or refine:
I'm designing a next-gen additive/FM synthesizer called Caelux, derived from my existing synth Caelus (based on Pyo) but built for clustered processing and cinematic surround sound.
Here's the architecture:
- The system is a single-controller, multi-worker cluster.
- The controller handles:
- Incoming MIDI and OSC
- GUI (Qt), audio playback, and wave file export
- Distributing OSC commands to the workers and receiving audio buffers in return
- Workers:
- Receive OSC commands
- Render "particles," each consisting of 7 highly optimized FM/additive oscillators
- Each oscillator is structured as:
FM INT > Ramp > ADSR > Oscillator > Delay > Panner > Feedback- Outputs are multichannel surround
Help me document this architecture and evolve it over time. Today, letβs focus only on the oscillator signal flow and how a particle routes its 7 operators to generate 8-channel output.
Caelux is a distributed additive/FM synthesizer designed for immersive surround sound synthesis, particularly for cinematic sound design. It builds upon concepts from Caelus, but with a fundamentally different architecture.
At its core, Caelux uses a clustered controllerβworker model:
- The controller handles:
- MIDI and OSC input/output
- Wave file rendering and live audio output
- A Qt-based local GUI
- Routing and timing of OSC commands to workers
- Receiving rendered audio buffers back from workers
- The workers are responsible for:
- Receiving and parsing OSC messages from the controller
- Rendering audio by processing multiple particles
- Each particle is a self-contained additive+FM structure consisting of 7 tightly interlinked oscillators
Each oscillator is highly optimized for parallelism (multiprocessing, Numba, etc.) and has a dedicated processing pipeline.
Each oscillator in Caelux is a highly optimized, standalone unit responsible for generating and spatializing a single stereo voice. Oscillators are fully parallelizable and leverage multiprocessing, Numba, and vectorized math where possible.
csharp
CopyEdit
[FM Intensity Mod]
β
[Frequency/Amplitude Ramp]
β
[ADSR Envelope]
β
[Harmtable Oscillator]
β
[Stereo Multitap Delay]
β
[Stereo Panner (LFO-Controlled)]
β
[Output Stereo Pair]
| Component | Description |
|---|---|
| FM Intensity Mod | Scalar control of incoming frequency modulation amount from a parent oscillator. |
| Ramp Generator | Independent for frequency and amplitude. Applies linear or exponential transitions (e.g. pitch glides, fade-ins/outs). |
| ADSR Envelope | Extended Attack, Decay, and Sustain stages allow for slow ambient evolutions. |
| Harmtable Oscillator | High-resolution wavetable (default sine), optimized for additive and FM usage. |
| Stereo Delay | Multitap, long delay support with feedback per channel. Can simulate echoes, rhythmic accents, or diffusion. |
| Stereo Panner | Uses a harmonic LFO to animate stereo position across assigned output pair. |
| Feedback Routing | Mono send of output back into FM input, enabling feedback modulation. Configurable per oscillator. |
Each particle is a self-contained 7-operator additive+FM unit. Operators are chained to form a nested FM tree with 4 final audio-producing oscillators.
OP1 β OP2, OP3 (FM modulation only)
OP2 β OP4, OP6
OP3 β OP5, OP7
- OP1βOP3 are modulator-only (not heard directly)
- OP4βOP7 produce the final audio output
Each output oscillator sends audio to a stereo pair with spatial panning. Here's the final surround mapping:
| Oscillator | Output Channels | Panning Behavior | Purpose |
|---|---|---|---|
| OP4 | Out 1β2 | FL β FR | Main stereo anchor |
| OP5 | Out 3β4 | FL β CL | Supports center imaging |
| OP6 | Out 5β6 | FR β CR | Balances left-field with right motion |
| OP7 | Out 7β8 | Rear β Ceiling (mono pan) | Adds Z-axis dimension; shimmer, lift |
π§ Total Outputs: 8 channels (7.1 or 7.0.2 without LFE).
Each particleβs outputs can be positioned in surround space statically, dynamically (via panning), or sequenced over time.