1
0
Fork
You've already forked chromaflock
0
A subtractive, polyphonic synthesizer plugin
  • C++ 98%
  • Makefile 1%
  • CMake 1%
2026年07月14日 01:45:51 +02:00
Source cleanup; small changes to PluginEditor 2026年07月14日 01:45:51 +02:00
.gitignore docs: add README screenshot section and proper .gitignore 2026年07月14日 01:15:43 +02:00
AGENTS.md Update AGENTS.md: reflect Linux support 2026年07月13日 22:00:04 +02:00
cf3d02.png ui: swap title logo to cf3d02.png, crop transparent margins, add padding, drop header divider 2026年07月14日 01:16:49 +02:00
cfnew.png init 2026年07月13日 20:57:38 +02:00
chromaflockbg5.png cleanup; small changes to PluginEditor 2026年07月14日 01:45:51 +02:00
chromaflockshotnew.png docs: add README screenshot section and proper .gitignore 2026年07月14日 01:15:43 +02:00
CMakeLists.txt ui: swap title logo to cf3d02.png, crop transparent margins, add padding, drop header divider 2026年07月14日 01:16:49 +02:00
Makefile Fix Makefile for Linux: .app only on macOS, plain executable on Linux 2026年07月13日 22:23:13 +02:00
README.md docs: add README screenshot section and proper .gitignore 2026年07月14日 01:15:43 +02:00
seriouslogo2.png add seriouslogo.png, scale down seriouslogo2.png 2026年07月13日 22:02:54 +02:00

ChromaFlock

ChromaFlock

A subtractive synthesizer plugin built with JUCE. macOS (VST3, AU, Standalone) and Linux (VST3, Standalone).

Overview

ChromaFlock is a fully-featured subtractive synthesizer with dual oscillators, multi-mode filter, dual LFOs, two envelopes, and a complete effects chain. All DSP is custom - no external audio libraries. 55 automatable parameters, 16-voice polyphony, 27 built-in presets, and a real-time visual interface with waveform display, spectrum analyzer, VU meter, and interactive piano keyboard.

Obligatory AI-slop disclaimer

Chromaflock is 99.5% vibe-coded (a.k.a. "ai slop"). If that's a problem for you, please kindly just use a different synthesizer. There is also absolutely NO guarantee this will work reliably, be useful in any way, or even make any sense whatsoever.

Screenshot

ChromaFlock Screenshot

Signal Flow

Osc1 + Osc2 → Amp Envelope ×ばつ Velocity → Filter → Drive → Distortion → Compressor → Auto-Pan → Delay → Reverb → Output

Oscillators

Two independent oscillators per voice, each with:

  • 5 waveforms: Sine, Saw, Square, Triangle, Noise
  • Octave shift: -3 to +3
  • Semitone shift: -12 to +12
  • Fine tune: ±100 cents
  • Level: 0.0 – 1.0
  • Phase offset (OSC 2): 0.0 – 1.0 for detuned/synced phase relationships
  • Stereo panning: Equal-power pan law per oscillator, summed additively

Filter

TPT (Topology-Preserving Transform) SVF - stable, alias-free, modulation-friendly. Two independent filter instances per voice for proper L/R stereo processing.

  • 5 types: Low-Pass 12dB, Low-Pass 24dB, Band-Pass, High-Pass, Notch
  • Cutoff: 25 Hz – 20 kHz (logarithmic)
  • Resonance: 0.0 – 1.0
  • Envelope amount: Modulates cutoff via filter envelope (±4 octave range)
  • Key tracking: Cutoff follows pitch, 0% – 100%

Envelopes

Two independent ADSR envelopes per voice - one for amplitude, one for filter modulation:

Parameter Range
Attack 0.001s – 5.0s (log)
Decay 0.001s – 5.0s (log)
Sustain 0.0 – 1.0
Release 0.001s – 10.0s (log)

Linear ramp shape. Both envelopes reset per-note.

LFOs

Two independent LFOs per voice, each with:

  • 4 shapes: Sine, Triangle, Saw, Square
  • Rate: 0.05 Hz – 20 Hz (log)
  • Depth: 0.0 – 1.0
  • 4 destinations: Filter Cutoff, OSC1 Pitch, OSC2 Pitch, Both OSCs
  • Phase resets on note-on
  • Pitch modulation range: ±12 semitones

Effects Chain

All effects are stereo and processed in series after the synth voice.

Distortion

  • 4 types: Soft Clip (tanh), Hard Clip, Foldback (wave-folding), Overdrive
  • Amount: 0.0 – 1.0 (drives input gain 1x – 10x)
  • Mix (dry/wet): 0.0 – 1.0
  • Bypassed when amount < 0.001

Compressor

  • Threshold: -60 dB – 0 dB
  • Ratio: 1:1 – 20:1
  • Attack: 0.1 ms – 100 ms
  • Release: 10 ms – 1000 ms
  • Makeup gain: 0 – 24 dB
  • Mix (dry/wet): 0.0 – 1.0
  • Feed-forward envelope detector with separate attack/release time constants

Auto-Pan

  • Sinusoidal LFO panning
  • Rate: 0.05 Hz – 20 Hz
  • Depth: 0.0 – 1.0
  • Bypassed when depth < 0.001

Delay

  • Time: 10 ms – 1000 ms
  • Feedback: 0.0 – 0.95
  • Ping-pong mode: Cross-channel feedback for bouncing stereo echoes
  • Spread: 0.25 – 0.75 (secondary tap time)
  • Mix (dry/wet): 0.0 – 1.0
  • Dual-tap mode when ping-pong is off (wider stereo image)

Reverb

  • Room size: 0.0 – 1.0
  • Damping: 0.0 – 1.0
  • Mix (wet/dry): 0.0 – 1.0
  • Fixed stereo width at 0.8

Master

  • Pan: Full left – Full right
  • Drive: 1x – 5x (tanh soft clipping per-voice, normalized)
  • Master Level: 0.0 – 1.0
  • Pitch Bend Range: 1 – 12 semitones

Voices

  • 16-voice polyphony
  • Velocity-sensitive amplitude
  • Per-sample rendering for smooth modulation
  • Denormal protection (ScopedNoDenormals)
  • All 55 parameters pushed to all voices every block

Presets

73 built-in presets across 15 categories:

Category Presets
Init Init
Bass Sub Bass, Reese Bass, Acid Bass, Pluck Bass, Moog Bass, Gritty Bass, FM Bass, Concrete Jungle, Thunder Bass, Dystopian Bass, 808 Subblast
Lead Sync Lead, Square Lead, Soft Lead, Saw Lead, Neon Rider, Champagne Supernova, Quantum Lead, Electric Sheep
Pad Warm Pad, Glass Pad, Dark Pad, Shimmer Pad, Evolving Pad, Choir Pad, Infinite Horizon, Liquid Gold, Apocalypse Now
Keys Electric Piano, Organ, Clav, Rhodes, Bell Keys, Toy Piano
FX1 Wobble, Distorted Lead, Auto-Pan Spread, Filtered Noise
FX2 Dub Delay, Reverse Reverb, Laser Zap, Space Drone, Ring Mod, Glitch Stutter
FX Pirate Radio, Vapor Trail, Sugar Rush, Fleshlight
Insanity Alien Swarm, Nuclear Siren, Death Ray, Toxic Waste, Broken Radio, Flesh Wound, Junkyard Dog, Pixel Storm, Venom, Screaming Eagle
Textures Frozen Lake, Volcanic Ash, Iron Lung, Ghost Whisper, Cosmic Dust, Neon Dreams, Underwater, Zen Garden, Synthetic Breath
Chiptune Power Up, Boss Fight, Coin Drop, 16-Bit Blast, Game Over
Cinematic Space Station, Tornado Siren, Black Hole, Molten Core, Thunder Roll, Haunted Mansion, Ancient Machine

Preset menu accessible from the PRESET button (top-left). Each preset stores all 55 parameters.

UI

Custom dark theme with gold accents. ~50 knobs across 9 sections.

Sections

Section Controls
OSC 1 Waveform selector, Octave, Semi, Fine, Level knobs
OSC 2 Waveform selector, Octave, Semi, Fine, Level, Phase knobs
Filter Type selector, Cutoff, Resonance, Env Amount, Key Tracking knobs
AMP ENV Attack, Decay, Sustain, Release knobs
FILTER ENV Attack, Decay, Sustain, Release knobs
Master Pan, Drive, Level, PB Range knobs
Distortion Type selector, Amount, Mix knobs
Compressor Threshold, Ratio, Attack, Release, Makeup, Mix knobs
Auto-Pan Rate, Depth knobs
LFO 1/2 Rate, Depth knobs, Shape and Destination selectors
Delay Time, Feedback, Mix knobs, Ping-Pong selector, Spread knob
Reverb Size, Damping, Mix knobs

Visualizers

  • VU meter: RMS + peak level, green-to-red gradient, 30 fps
  • Waveform display: Real-time from 1024-sample ring buffer, green gradient, 30 fps
  • Spectrum analyzer: 2048-point FFT, 48-bar log frequency display, Hamming window, 30 fps
  • Piano keyboard: Interactive C3–C7 (49 keys), click/drag to play, gold highlight on press
  • Pitch bend strip: Vertical drag control on left side of keyboard, resets to center on release

Scaling

UI scaling: 100%, 125%, 150%, 200% via dropdown (top-right). Window resizes proportionally.

Parameters

55 total parameters, all DAW-automatable and saved with session state via APVTS XML serialization.

Building

Requires JUCE (drop the framework into ./JUCE/). Then:

make # Build Release (VST3/Standalone; +AU on macOS)
make debug # Build Debug
make clean # Remove build directory
make rebuild # Clean + build
make run # Build and launch Standalone app
make install # Install VST3 to system dir

Or directly with CMake:

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j$(nproc)

Output: build/ChromaFlock_artefacts/Release/VST3/ChromaFlock.vst3

On macOS, plugins auto-copy to ~/Library/Audio/Plug-Ins/. On Linux, run make install to copy to ~/.vst3/.

Tech

  • Language: C++17
  • Framework: JUCE 8
  • DSP: All custom - no external audio libs
  • Filter: TPT SVF (Topology-Preserving Transform State Variable Filter)
  • Build: CMake + Makefile wrapper
  • Platform: macOS, Linux