A hybrid cinematic synthesizer for 3D function, FM, wavetable, granular, terrain, VA, and physical-string synthesis.
GLIESE 710 is a polyphonic C++20 / JUCE 8 synthesizer plugin. Its original center is the 3D Function Oscillator, where a scan path moves through a mathematical field instead of reading a normal waveform. The current engine expands that idea into a two-page, mix-and-match oscillator system with independent wavetable, granular, wave-terrain, virtual analog, Karplus-Strong, and dual FM engines.
The design goal is direct: every oscillator page should feel playable and modular without the controls leaking across pages. Page 1 and Page 2 can each host a full FM engine, or each page can host four oscillator slots for up to eight independent non-FM oscillators.
| Format | Platform |
|---|---|
| AUv2 / AUv3 | macOS |
| VST3 | macOS / Windows |
| CLAP | macOS / Windows / Linux |
macOS release bundles target macOS 11.0 or newer. AUv3 is shipped as an
extension embedded in the standalone application; install the containing app
in /Applications so macOS can discover and register the Audio Unit.
| LV2 | Linux |
| Standalone | All platforms |
Host/plugin scanner vendor metadata is ECOSYSTEM.
| Tool | Minimum version |
|---|---|
| CMake | 3.22 |
| C++ compiler | C++20 (Clang 13, GCC 11, MSVC 2022) |
| Xcode | 14+ (macOS AU and signed release builds) |
| Git | Any recent version |
JUCE 8 is fetched automatically by CMake via CPM from the pinned release archive. When CLAP support is enabled, the CLAP wrapper, CLAP core, and CLAP helper sources are also fetched from pinned archives.
scripts/cmake.zsh --preset production
scripts/cmake.zsh --build --preset vst3 --parallelThe canonical local build folder is build-productions/. Older local folders named
build/ or build-production/ may contain stale plugin bundles; do not copy VST3s
from them unless you intentionally configured those folders yourself.
For website/distribution release packaging and publishing, see
docs/deployment.md.
macOS signed release packages are built from the Xcode project in build-xcode/
so the AUv3 app extension can be generated and embedded in the Standalone app.
The classic AUv2 bundle remains GLIESE 710.component.
For the normal local loop, use the build script instead of manually copying plugin bundles:
scripts/build-plugin.zshTo build, test, install AUv2/VST3/CLAP into the macOS system plugin folders, ad-hoc sign them, and verify the installed bundles:
scripts/build-plugin.zsh --install-systemUse --install-user to install into ~/Library/Audio/Plug-Ins instead. See docs/build-targets.md.
cmake -S . -B build-productions -DCMAKE_BUILD_TYPE=Release -DGLIESE_BUILD_TESTS=ON -DGLIESE_COPY_PLUGIN_AFTER_BUILD=OFF
scripts/cmake.zsh --build build-productions --target GLIESE_710_VST3 --config Release --parallelSet GLIESE_COPY_PLUGIN_AFTER_BUILD=ON only when you explicitly want build-time plugin copying. JUCE handles AUv2/VST3/LV2 copy steps; the CLAP wrapper uses its own user-scope copy path. The build script is preferred for normal macOS installs because it copies AUv2, VST3, and CLAP consistently and verifies the installed bundles.
The current VST3 bundle path is:
build-productions/GLIESE_710_artefacts/Release/VST3/GLIESE 710.vst3
If a newly added editor page does not appear in the DAW, force a clean wrapper rebuild:
scripts/cmake.zsh --build build-productions --target GLIESE_710_VST3 --config Release --clean-firstscripts/cmake.zsh --preset production
scripts/cmake.zsh --build --preset tests --parallel
scripts/ctest.zsh --preset tests| Engine | Description |
|---|---|
| 3D Function | Eight independent slot instances, 18 scalar fields, five path types, domain warping, coordinate folding, field-frequency control, chaos injection, field morphing, and drive. |
| FM A / FM B | Two fully separate 10-operator FM engines with independent algorithms, operator controls, ADSRs, detune, phase position, algorithm morph, and modulation-index scaling. |
| Wavetable | Eight independent wavetable slots with FFT mipmap bandlimiting, Catmull-Rom interpolation, table morphing, 15 factory tables, 15 warp modes, CZ-style phase distortion, unison, stereo spread, position spread, phase, random phase, and retrigger controls. |
| Granular | Eight independent preallocated grain engines with 96 grains per instance, free-cloud/burst/audio-rate modes, position, size, density, pitch, spray, jitter, pan spread, reverse probability, scan/freeze, seven window shapes, and optional physical body/modal resonator. |
| Wave Terrain | Eight independent 2D terrain oscillators. Terrain slots span two slot units for a heightmap/path viewer, and a phase-driven path scans a procedural or imported heightmap with circle, ellipse, Lissajous, spiral, line, and orbit-noise modes plus mipmapped anti-aliasing quality modes. |
| Virtual Analog | Eight independent VA layers with continuous shape morph, PolyBLEP saw/square/pulse, reverse saw, triangle, sine, 8-voice unison, stereo spread, ring modulation, and wave folding. |
| Karplus-Strong | Eight independent plucked-string slots with circular delay loop, LPF brightness, all-pass stiffness, excitation morphing, pluck position, and per-slot ADSR. |
Each oscillator slot has its own enable state, level, fine tune in cents, octave transpose, and ADSR envelope. Duplicate oscillator types now use separate parameter prefixes, so changing one wavetable, granular, terrain, VA, or KS slot does not change the others.
The oscillator tab is divided into two blocks:
| Page mode | Behavior |
|---|---|
| FM | The whole page becomes one FM engine view. Page 1 controls FM A. Page 2 controls FM B. |
| Oscillators | The page shows four oscillator slots. Each slot can be 3D, wavetable, granular, wave terrain, VA, or Karplus-Strong. |
This gives two intended layouts:
- Dual FM layout: FM A on Page 1 and FM B on Page 2.
- Eight oscillator layout: four mix-and-match oscillator slots per page.
The slot bar supports these type IDs: None, 3D, VA, WT, KS, Granular, and Terrain.
Terrain occupies two slot units when possible, so a page can hold one terrain oscillator plus two compact oscillators, or two terrain oscillators.
Each FM engine exposes large performance controls for:
Master Detune
Fine Tune
Phase Position
Algorithm Morph
Mod Index Scale
These sit above the operator grid in the FM pages. They are designed for real-time movement: fine-tuned layer offsets, detuned cinematic drift, phase-position changes between attacks, crossblended algorithms, and single-knob harmonic intensity swells.
The terrain oscillator reads a 2D height surface instead of a 1D waveform:
phase -> scan path x/y -> heightmap lookup -> output sample
Black maps to -1.0, middle gray to 0.0, and white to +1.0. If no image is loaded, the oscillator uses a procedural default terrain.
Important controls:
Path Mode
Import Map
Center X/Y
Radius X/Y
Path Ratio X/Y
Scan Rate
Phase Offset
Spiral
Drive
Offset
Smoothing
Morph
Gain
See docs/terrain-oscillator.md.
Two filter slots can run in series, parallel, A only, or B only. Each slot has smoothed cutoff, resonance, drive, morph, saturation, bass compensation, gain, mix, envelope depth, LFO depth, and optional Off/2x/4x quality for nonlinear models.
Filter modes:
LP12 LP24 HP12 HP24
Bandpass Notch Peak LowShelf HighShelf
Comb AM+ AM-
Ladder12 Ladder18 Ladder24
SEM Morph MS Dual Formant
Juno-106 Juno-60 Jupiter-4 Jupiter-8
TB-303
P5 Rev2 SSM P5 Rev3 CEM Prophet-600 Prophet-6 Pro-One
GLIESE Prism Alt Ladder Phys Ladder
See docs/filter.md.
The ENGINE FILTERS page adds one per-voice filter for each oscillator family before the master dual filter: 3D, FM, WT, VA, KS, GRAN, and TERRAIN. Each uses the full filter mode list with cutoff, resonance, drive, morph, saturation, bass compensation, mix, quality, envelope depth, and LFO depth.
32 slots. Each slot: Source -> Destination -> Amount (-1 to +1) -> Bipolar toggle.
Sources include LFO1-4, envelope groups, velocity, aftertouch, mod wheel, pitch bend, CC74, channel pressure, and eight macros. Destinations cover 3D controls, FM operator level/ratio controls, wavetable position/warp, granular controls, VA controls, terrain scan/path controls, master filter controls, per-engine filter controls, LFO controls, master volume/pan, and arp rate/gate.
The four-lane mod step sequencer has a performance loop-length knob that can trim playback from the full programmed pattern down to a single step without changing stored step values.
Terrain pre-filter modulation is available through the engine filter destinations, and direct terrain path modulation covers center, radius, ratio, smoothing, morph, and drive.
Seven patterns: Up, Down, Up-Down, Down-Up, As Played, Random, Random Latch. Host-sync rate, gate, swing, latch, and 1-4 octave range are available.
Presets save as human-readable XML in ~/Music/GLIESE_710/Presets/ with the .g710 extension. DAW session recall uses JUCE state serialization through getStateInformation() and setStateInformation().
GLIESE_710/
├── CMakeLists.txt
├── cmake/CPM.cmake
├── docs/
│ ├── architecture.md
│ ├── oscillator-3d.md
│ ├── terrain-oscillator.md
│ ├── fm-engine.md
│ ├── granular-oscillator.md
│ ├── karplus-strong.md
│ ├── modulation-matrix.md
│ ├── filter.md
│ ├── arpeggiator.md
│ ├── mpe.md
│ ├── preset-system.md
│ ├── build-targets.md
│ ├── deployment.md
│ └── contributing.md
├── Source/
│ ├── PluginProcessor.{h,cpp}
│ ├── PluginEditor.{h,cpp}
│ ├── Engine/
│ │ ├── Oscillators/ # Osc3D, FM, WT, Granular, Terrain, VA, KS
│ │ ├── Envelopes/
│ │ ├── LFO/
│ │ ├── Filter/
│ │ ├── Modulation/
│ │ └── Arpeggiator/
│ ├── Presets/
│ └── UI/
├── Assets/Wavetables/
└── Tests/EngineTests.cpp
- Independent two-page oscillator layout
- Independent FM A / FM B engines
- Runtime wavetable import path + FFT-based mipmap generation
- Granular physical body / modal resonator section
- Roland, TB-303, Sequential-style, GLIESE, alternate ladder, and physical ladder filter character modes
- Per-voice oscillator engine filters before the master dual filter
- Wave-terrain oscillator MVP
- Terrain image chooser and waveform/path visualizer in the editor
- Terrain mipmaps / anti-aliasing quality modes
- Imported terrain embedding and shared per-slot terrain assets
- Per-slot terrain and independent FM A / FM B modulation destinations
- Master safety limiter, output meter, DSP load, and voice telemetry
- Live FM A / FM B algorithm graph visualization
- Live per-slot 3D field and scan-path visualizer
- Formal lower/upper-zone MPE support with RPN 6 and master/member expression routing
- GitHub Actions CI
- Embedded, read-only factory preset bank
- Adaptive 3D oscillator oversampling for high field-frequency and nonlinear settings
- Granular drag-and-drop sample loading, background decode/resample, immutable voice handoff, and waveform display
- Granular per-slot source regions, equal slices, slice selection, and waveform markers
- Background granular transient detection and automatic transient-based slicing
- Embedded granular sample assets in plugin state/presets with per-slot root-note metadata
- Granular sample-library browser and four preset-persistent per-slot scenes
- Optional stereo input bus, non-blocking live circular recorder, and per-slot freeze capture
- True stereo granular assets, decoder path, grain reads, and preset payloads
- Host-tempo-synced granular density with straight and triplet divisions
- Scale-quantized granular pitch clouds with selectable key and spread
- Deterministic granular direction modes and eight-step direction patterns
- Lock-free live grain-cloud telemetry and animated waveform overlay
- Dual-layer granular sample loading, preset persistence, and continuous A/B morphing
Personal/indie use under the JUCE Personal License. For commercial distribution, a JUCE commercial license is required.