ChronoFlow Web-Based Modular Synthesizer & Generative Music Machine

ChronoFlow is a browser-based modular synthesizer with 57 module types, hierarchical patching, send/return effect buses, a real-time audio analysis API for visuals integration, and generative sequencing tools designed for ambient music.

โ–ถ Launch ChronoFlow

Quick Start

  1. Open ChronoFlow in a modern browser (Chrome, Firefox, Edge).
  2. Click anywhere to enable audio (required by browsers).
  3. Load a demo patch from the Patch Manager in the left sidebar โ€” try ๐ŸŒŠ Submerged Cathedral or ๐Ÿ”” Glass Rain.
  4. Add modules by dragging from the Node Palette or right-clicking the canvas.
  5. Connect by dragging from an output port (right side) to an input port (left side).
  6. Tweak knobs by clicking and dragging up/down.

Interface Guide

Layout

Knobs

Click and drag vertically. Hold Shift for fine control. Double-click to reset to default.

Signal Indicators

Each node shows a small LED that glows green (signal present) or orange (loud). Output nodes show a level meter.

Module Reference (57 Types)

๐ŸŽต Sources

Oscillator

Standard audio oscillator with sine, saw, square, triangle waveforms.

Params: frequency, detune, waveform

๐ŸŒŠ Drone Oscillator NEW

Multi-voice pad oscillator with up to 8 stacked voices, organic per-voice drift, sub-oscillator. Modes: unison, harmonics, fifths, octaves.

Params: frequency, voices, spread, drift, driftRate, waveform, mode, subLevel, attack, level

ใ€ฐ๏ธ Wavetable Oscillator NEW

8 morphable wavetables: sine โ†’ warm saw โ†’ soft square โ†’ formant โ†’ organ โ†’ glass โ†’ choir โ†’ digital. Smooth crossfade morphing.

Params: frequency, detune, morph (0โ€“1), level

Noise

White or pink noise generator. Essential for percussion, texture, and as resonator exciter.

Params: type, level

Karplus-Strong

Physical modeling string synthesis. Produces realistic plucked string and bell tones.

Params: frequency, damping, feedback, brightness, pluck

Granular

Granular processor. Records audio input and plays overlapping grains with position, spray, pitch, and reverse controls.

Params: grainSize, density, spray, pitch, position, freeze, reverse, mix

Smooth Random

Random walk generator that wanders smoothly. Perfect for slow ambient modulation.

Params: rate, range, smooth

Audio Input

Microphone or external audio stream input.

๐ŸŽ›๏ธ Modulators

LFO

Low frequency oscillator for modulation. Connect to any modulation input (purple ports on top of nodes).

Params: rate, depth, waveform

ADSR

Attack/Decay/Sustain/Release envelope. Trigger via MIDI, keyboard, or trigger input.

Params: attack, decay, sustain, release

Envelope Follower

Tracks the amplitude of input signal and outputs a CV envelope.

โฑ๏ธ Sequencing

Clock

Master tempo clock. Outputs trigger pulses at the set BPM.

Params: bpm, swing

Clock Divider

Divides clock rate into /1, /2, /4, /8 outputs.

Sequencer

8-step CV sequencer with per-step velocity and probability.

Euclidean

Euclidean rhythm generator. Distributes N pulses across M steps as evenly as possible.

Params: steps, pulses, rotation

๐Ÿ”ง CV / Logic

Sample & Hold

Samples input value on each trigger.

Quantizer

Quantizes CV to musical scales (chromatic, major, minor, pentatonic, etc.).

Slew Limiter

Smooths/portamentos CV changes. Separate rise/fall times.

Attenuverter

Scales and inverts signals. Add offset.

Logic

Boolean logic (AND, OR, XOR) on trigger signals.

Probability Gate

Randomly passes or blocks gate signals.

Macro

Single knob that outputs to 4 mapped parameters.

Comparator

Compares CV to threshold, outputs gate.

Turing Machine

Shift register-based pseudo-random CV generator. Lock probability controls how much it mutates.

๐Ÿ—๏ธ Structure

Counter

Counts triggers, fires output after N pulses.

Scene Chain

Progresses through scenes/sections on clock. Great for long-form composition.

Switch

Routes between up to 4 inputs.

Crossfader

Blends between two audio sources with CV control.

๐Ÿ”Š Processing

Filter

Resonant lowpass/highpass/bandpass filter.

VCA

Voltage controlled amplifier. Use with ADSR for amplitude envelopes.

๐Ÿ”” Resonator NEW

Bank of up to 12 tuned resonant bandpass filters. 5 modes: harmonic, inharmonic (bell/bar), octaves, chord, free. Trigger input for struck excitation.

Params: frequency, resonance, mode, partials, spread, brightness, decay, mix

Wavefolder

Harmonic waveshaping distortion.

Ring Mod

Ring modulator for metallic/bell tones.

Pitch Shifter

Granular pitch shifting.

Formant Shifter

Shifts vocal formants independently of pitch.

Freq Shifter

Fixed Hz frequency shifting (Bode shifter).

Comb Filter

Resonant metallic comb filter.

Vocoder

Channel vocoder with carrier/modulator inputs.

EQ

3-band parametric equalizer.

Compressor

Dynamics compressor with sidechain input.

Bitcrusher

Bit depth and sample rate reduction.

โœจ Effects

Delay

Clean stereo delay with feedback.

๐Ÿ“ผ Tape Delay NEW

Analog tape echo with wow, flutter, soft-clip saturation, and per-repeat high-frequency degradation. Each repeat gets darker like real tape.

Params: time, feedback, mix, wow, flutter, saturation, degradation, tapeSpeed

Reverb

Convolution reverb.

Shimmer Reverb

Reverb with pitch-shifted feedback for ethereal, infinite textures. Classic ambient effect.

โ„๏ธ Spectral Freeze NEW

FFT-based spectral freeze/blur. Captures the frequency spectrum and resynthesizes with randomized phases for infinite sustain (PaulStretch-style). Spectral shift and feedback for evolution.

Params: freeze, blur, shift, brightness, feedback, mix, grainSize

Chorus

Multi-voice ensemble/chorus effect.

Glitch

Buffer stutter, reverse, and pitch-ramp effects.

๐Ÿ”Š Stereo Field NEW

Pan, stereo width (mono to hyper-wide), mid/side balance, and Haas effect delay for psychoacoustic width.

Params: pan, width, midSide, haasDelay, haasAmount

Mixer

4-channel audio mixer.

๐Ÿ”€ Routing

๐Ÿ“ค Send NEW

Aux send to a named bus. Taps a percentage of signal while passing dry through. Multiple sends can feed one bus.

Params: bus (Aโ€“D, reverb, delay), amount

๐Ÿ“ฅ Return NEW

Receives audio from a named bus. Connect to shared effects (e.g., one shimmer reverb serving multiple sources).

Params: bus, gain

Demo Patches

๐ŸŒŠ Submerged Cathedral

Drone + Resonator + Spectral Freeze + Send/Return Buses

A lush, immersive ambient piece demonstrating parallel effects routing.

๐Ÿ”” Glass Rain

Karplus-Strong + Resonator + Wavetable + Tape Delay

Generative plucked textures raining through shimmer reverb.

๐ŸŒ… Tidal Memories

Dual Drone + Granular + Spectral Freeze + 3 Effect Buses

Deep evolving ambient with multiple layered textures and extensive bus routing.

Connections & Signal Types

Audio โ€” audio-rate signals CV โ€” control voltage (modulation) Trigger โ€” short impulses Gate โ€” on/off signals

Drag from any output port (right side of node) to any input port (left side). Modulation inputs (CV) appear as small purple dots on the top of nodes. All signal types are compatible โ€” ChronoFlow is permissive like real modular synths.

Send/Return Buses

Send/Return enables parallel effects processing โ€” the studio standard for ambient music production.

How It Works

  1. Place a Send node in your signal chain. It passes audio through while tapping a percentage to a named bus.
  2. Place a Return node set to the same bus name. It receives all audio sent to that bus.
  3. Connect the Return to your shared effect (e.g., Shimmer Reverb).
  4. Multiple Sends can feed the same bus โ€” one reverb serves your entire mix.

Bus Names

Available: A, B, C, D, reverb, delay. The name is just a label โ€” any Send and Return with the same name are connected.

Keyboard Shortcuts

KeyAction
โŒ˜K / Ctrl+KCommand Palette (search everything)
PToggle piano keyboard
โŒ˜ZUndo
โŒ˜โ‡งZRedo
Delete / BackspaceDelete selected nodes
Aโ€“K (piano row)Play notes on piano keyboard

Visuals Integration API

ChronoFlow includes a real-time Audio Analysis Bus that external JavaScript can subscribe to for driving visuals (Three.js, p5.js, Canvas, WebGL, etc.).

import { audioAnalysisBus } from 'chronoflow/engine';

// Subscribe to full spectrum data at 60fps
audioAnalysisBus.onSpectrum((data) => {
  // data.bands.bass     โ†’ 0-1 bass energy
  // data.bands.treble   โ†’ 0-1 treble energy
  // data.centroid        โ†’ spectral brightness (Hz)
  // data.loudness        โ†’ 0-1 RMS loudness
  // data.beat            โ†’ boolean beat detected
  // data.beatStrength    โ†’ 0-1 beat intensity
  // data.envelope        โ†’ smoothed amplitude
  // data.frequencies     โ†’ Float32Array FFT data
  // data.waveform        โ†’ Float32Array oscilloscope data

  updateVisualization(data);
});

// Or subscribe to specific features:
audioAnalysisBus.onBeat(({ beat, strength }) => {
  if (beat) triggerParticleExplosion(strength);
});

audioAnalysisBus.onBands((bands) => {
  setBackgroundColor(bands.bass, bands.mid, bands.treble);
});

// Configuration
audioAnalysisBus.setFFTSize(4096);        // Higher frequency resolution
audioAnalysisBus.setFrameRate(30);         // Lower rate if 60fps not needed
audioAnalysisBus.setBeatSensitivity(1.3);  // Lower = more sensitive

Headless Engine SDK

Use ChronoFlow's audio engine without the UI โ€” embed it in any web project.

import { ChronoFlowEngine } from 'chronoflow/engine';

const engine = new ChronoFlowEngine({
  masterVolume: 0.7,
  autoConnect: true,  // connects to AudioContext.destination
});

await engine.init();
engine.loadPatch(myPatchJSON);

// Tweak parameters at runtime
engine.setParam('delay-1', 'mix', 0.6);
engine.setParam('shimmer-1', 'shimmer', 0.8);

// Play notes
engine.noteOn(60, 100);  // MIDI note 60, velocity 100
engine.noteOff(60);

// Route to your own audio graph
engine.disconnectFromDestination();
engine.routeTo(myGainNode);

// Event callbacks
engine.on({
  onParamChanged: (nodeId, param, value) => { ... },
  onPatchLoaded: (patch) => { ... },
});

Ambient Music Tips

Building Drones

Start with a Drone Oscillator in fifths or octaves mode. Set drift to 0.3โ€“0.5 and spread to 15โ€“25 cents. Route through a lowpass filter with a very slow LFO (0.03โ€“0.1 Hz) on the cutoff. Send 50โ€“70% to a Shimmer Reverb bus.

Generative Melodies

Use Turing Machine โ†’ Slew Limiter โ†’ Quantizer (pentatonic scale). Feed the quantized CV to a Karplus-Strong or Oscillator's frequency mod input. Clock the Turing Machine from an Euclidean rhythm for irregular timing.

Frozen Textures

Feed any interesting audio into a Spectral Freeze. Enable freeze, set blur to 0.6โ€“0.9, and adjust brightness to taste. The shift parameter moves the frozen spectrum up/down in pitch โ€” try +7 semitones (a fifth) for harmonic interest.

Tape Character

Replace clean delays with Tape Delay. Set degradation to 0.5+ so each repeat gets darker. Increase wow/flutter for pitch instability. Chain into Shimmer Reverb for infinite dissolving echoes.

Parallel Effects with Send/Return

Instead of putting reverb inline (which makes everything wet), use Send/Return. Each sound source gets its own send amount to the reverb bus. This keeps the mix clean while still having deep, shared reverb.

Long-Form Evolution

Use Smooth Random nodes to slowly modulate filter cutoffs, reverb mix, and delay feedback. Set rate to 0.02โ€“0.08 Hz for changes that happen over 15โ€“60 seconds. Use Scene Chain for structural progression over minutes.