Gravity
A touch-first instrument that generates melodies through physics simulation. Fling orbs around a 2D plane — they bounce off walls, triggering notes mapped to musical scales. A draggable central mass attractor creates complex orbital paths and evolving melodic patterns.
Overview
Gravity is a physics sandbox that makes music. It doesn't have steps, keys, or arpeggiators in the conventional sense — it has four coloured balls, gravity, a draggable attractor, and walls that ring like bells when something hits them.
How it works in one paragraph
Four orbs move around a 2D plane under simulated gravity. When an orb strikes a wall, the position along that wall is mapped to a note in the current scale. The note plays — through Gravity's own impact synth, or out over MIDI, or both. You shape the music by shaping the physics: tune gravity, damping, friction, and a central attractor; fling orbs with your finger; turn on a clock-synced pulse to make everything breathe in time.
What's in the box
- 4 physics orbs — each with its own pitch offset, volume, MIDI channel, quantization, and enable switch. All four feed one shared polyphonic instrument.
- Built-in pluck engine — a 16-voice Karplus-Strong string with stiffness (piano-like inharmonicity), brightness, decay, and warmth controls. Pretty on its own, lush with the built-in reverb.
- 16 scales with root and octave, plus a scale sequencer for bar-synced key changes.
- Central mass attractor — a draggable gravitational point that bends orbital paths.
- Gravity pulse — a periodic burst of attraction, locked to 1, 2, 4, or 8 bars, that turns chaos into rhythm.
- MIDI out per orb — each orb can drive an external synth on its own channel, with optional CC output for X/Y position.
- OpenGL visuals — 3D geodesic sphere with bloom, motion trails, collision particles. Every sound has a visual counterpart.
- 8 colour themes, 8 factory presets, full state save/recall.
Quick Start
From plugin load to first melodic orbit in about a minute.
- Load Gravity on an instrument track. In VST3 use, it outputs both audio and MIDI; in standalone, audio only.
- Pick a preset from the top bar —
Orbital Chimesis a gentle starting point. - Press PLAY (or run your DAW transport).
- Fling an orb: click and drag it from one point to another, then release. The drag vector becomes its velocity.
- Drag the central mass — the small circle near the middle. It's a gravity well; moving it changes the orbital paths.
- Try a pulse: set
Pulsein the top bar to2 bars. Every two bars the central mass briefly inhales, pulling orbs toward it and creating a rhythmic swell.
The Interface
A dark top bar, the physics plane in the centre, a left strip for scale and key, a tabbed right panel for everything else, and an optional scale-sequencer timeline along the bottom.
Top Bar
- PLAY / STOP
- Standalone transport; ignored when a DAW transport is running.
- BPM
- Tempo. 60–240 BPM. Follows host when present.
- Reset Orbs
- Puts all four orbs back at rest on the floor. Use when physics has drifted somewhere unusable.
- Pulse
- Gravity-pulse interval:
Off · 1 · 2 · 4 · 8bars. When on, the central mass surges at that interval, locked to transport. - Presets
- Dropdown +
Save/Del. Eight factories ship built-in; saving adds user presets. - Hide Panels
- Collapses the side panels for a full-screen physics view — useful on a touch screen or for performance.
- Theme
- Opens the theme picker. Eight CVD-friendly palettes.
Left Panel — Scale & Key
- Orb Enables
- Four buttons (Red, Blue, Green, Yellow) to enable or mute each orb.
- Scale
- 16-option grid. Chromatic · Major · Minor · Dorian · Phrygian · Lydian · Mixolydian · Locrian · Pentatonic · Blues · Harmonic Minor · Melodic Minor · Whole Tone · Diminished H-W · Diminished W-H · C Major Arp.
- Root
- 12-option grid, C through B.
- Octave
−2 … +2.- Key Range
- How many semitones the wall spans —
6 · 12 · 24 · 36 · 48. Larger ranges = more pitches along each wall. - Quantize (global)
- Grid snap for collisions:
None · 1/32 · 1/16 · 1/8 · 1/4 · 1/2. Per-orb quantize overrides this. - Orb Collisions
- Toggle. When on, orbs collide with each other and generate a note from the midpoint of their last two wall notes, snapped to scale.
- Scale Seq
- Toggles the scale sequencer. While on, Scale/Root pickers dim — the timeline drives the key.
Right Panel — Four Tabs
Covered in detail in § Physics Controls, § Sound Design, § Visuals, and § MIDI & CC Output. The four tabs are:
- PHYSICS — gravity, damping, friction, mass.
- SOUND — global pluck engine + reverb, and per-orb pitch / volume / quantize / mass.
- VISUALS — trails, particles, bloom, 3D intensity.
- MIDI — per-orb MIDI channel, note-output toggle, CC output for X/Y.
The Physics Plane
The centre of the window — a 2D arena where everything happens. Gravity pulls down; walls bound the space; orbs bounce; a central mass attracts.
What you can touch
- Orb
- Click/tap and drag. While held, the orb follows your cursor. Release to fling — the drag vector becomes velocity.
- Central mass
- The small circle in the middle of the plane. Drag to reposition the gravitational attractor. Stronger mass = tighter orbits.
What you'll see
- Coloured trails — each orb leaves a fading tail. Length and opacity are tweakable.
- Wall glow — the wall segment flashes in the orb's colour at the moment of impact. That position along the wall is the note that played.
- Collision particles — a brief burst on impact. Purely cosmetic but a good visual beat marker.
- 3D sphere — an OpenGL geodesic wireframe with bloom floats over the plane. Visual-only; it reacts to activity.
Orbs & the Shared Voice
Four orbs, one instrument. Every orb's wall-collisions feed a single polyphonic pluck engine — so four orbs playing together are four simultaneous voices of the same instrument, the way Gravity sounds when you route all four MIDI channels to a piano in your DAW. The orb selector at the top of the SOUND / MIDI tabs picks which orb's per-orb settings (pitch offset, volume, quantize, mass, MIDI channel, CC) you're editing.
Voice signal chain
Noise burst ─▶ Delay line (fractional) ─▶ Damping LP ─▶ Stiffness (2× allpass) ─▶ Decay gain ─┐
▲ │
└────────────────────────────── feedback ──────────────────────────────────────────────────────────┘
│
▼
16 voices summed ─▶ Reverb ─▶ Output
A Karplus-Strong pluck: the short noise burst exciting the feedback loop sets the attack character; the loop's damping and decay settle the tail; cascaded allpass filters add piano-like inharmonicity when you raise stiffness.
Orb properties
- Enabled
- On the left panel. Disabled orbs still exist in physics but don't trigger notes.
- Colour / ID
- Fixed: 1=Red, 2=Blue, 3=Green, 4=Yellow. These match the left-panel enable buttons.
- Size
- Per-orb visual radius (
0.015–0.08). Larger orbs collide with walls sooner. - Mass
- Global (
0.1–5.0) or per-orb override. Heavier orbs resist deflection and fall faster under gravity. - Pitch / Volume
- Per-orb on the SOUND tab. Pitch offsets this orb's notes by up to ±24 semitones; volume scales its velocity.
Physics Controls
The PHYSICS tab of the right panel. This is where the feel of the world lives.
Physics Feel (XY pad)
- X — Gravity
0–1. How hard everything is pulled down. Low values feel zero-G; high values make orbs slam back to the floor.- Y — Damping
0–1. How much energy an orb loses on bounce. High damping = quick settling; low = infinite bouncing.
Central Mass (XY pad)
- X — Strength
0–1. How strongly the mass attracts orbs. At0it's a free plane; at1it's a black hole.- Y — Size
0.1–1.0. Visual radius of the attractor and the range over which its influence falls off.
Friction
Vertical strip, 0–1. Surface drag — not related to damping. With high friction, orbs rolling along the floor slow quickly; with low friction they slide forever.
Orb Mass
Vertical strip, 0.1–5.0. Global mass shared by all orbs unless overridden per-orb on the SOUND tab.
Orb Size
Four vertical strips, one per orb (0.015–0.08).
Orb-to-orb collisions are toggled from the left panel, just above Scale Seq. When on, an orb hitting another orb plays a note from the midpoint of the two orbs' most recent wall notes (snapped to scale) — a cheap way to create call-and-response harmonies.
Sound Design
The SOUND tab. Four global XY pads up top shape the shared pluck engine and its reverb; below, the orb selector picks which orb's per-orb dynamics you're editing.
Global — Instrument
- Instrument (XY pad)
- X — Brightness
0–1. HF content of the excitation burst — dark and woody at the bottom, bright and glassy at the top. Y — Decay0–1. How long notes sustain. High decay reaches piano-like ring-outs; low is a short pluck. - Character (XY pad)
- X — Warmth
0–1. HF rolloff inside the feedback loop — low is metallic and nasal, high is dark and mellow. Y — Stiffness0–1. Dispersion. Zero is an ideal string; raising it pulls overtones upward into piano-like inharmonicity.
Global — Reverb
- Reverb (XY pad)
- X — Size
0–1. Small room to large hall. Y — Mix0–1. Dry-to-wet crossfade applied to the whole instrument bus. - Reverb Depth (XY pad)
- X — Damping
0–1. How fast high frequencies die in the tail — low is bright/glassy, high is dark/plate-like. Y — Width0–1. Stereo spread of the reverb (0 mono · 1 full stereo).
Per-orb
- Dynamics (XY pad)
- X — Pitch
−24 … +24semitones. Transposes this orb's output. Y — Volume0–1. Scales velocity for this orb. - Quantize
- Per-orb collision grid:
Global · None · 1/32 · 1/16 · 1/8 · 1/4 · 1/2. When set to anything other thanGlobal, this orb ignores the global quantize and uses its own. - Mass
- Toggle
Global / Customplus a strip. Lets this orb have a unique mass without changing the others.
How quantize works
When a collision happens, the note can fire immediately (None) or be held until the next grid boundary (1/16, 1/8, etc.). This turns freeform physics bounces into rhythmically tight patterns. Use per-orb quantize to mix loose and tight rhythms — e.g. one orb on 1/4, another on None.
Scales & Scale Sequencer
Everything Gravity plays is scale-quantized. Pick a key manually, or let the timeline modulate it.
Manual mode
- Set Scale, Root, and Octave on the left panel.
- Adjust Key Range to change how many pitches fit along each wall (wider range = bigger leaps between adjacent collision points).
Scale sequencer
Enable Scale Seq on the left panel. A timeline appears along the bottom of the window:
- Segments — each is a root + scale + bar length. Durations available:
1, 2, 3, 4, 6, 8, 12, 16bars. - Playhead — a vertical cursor that sweeps across. When it enters a new segment, the key changes, synced to transport.
- Add —
+to insert a new segment (up to 16 total). - Edit — click a segment to open a popup with scale / root / bars pickers and a mini-keyboard preview.
DELremoves it (when more than one exists).
C Maj → A Min → F Maj → G Maj and Gravity plays a four-bar progression continuously — your orbs re-harmonize on each bar line without touching anything.
MIDI & CC Output
Each orb can drive an external synth on its own MIDI channel, independent of the internal voice. The internal synth still plays unless you mute it at the DAW level.
Per-orb MIDI controls (MIDI tab)
- Channel
1–16. Defaults: Orb 1 → Ch 1, Orb 2 → Ch 2, Orb 3 → Ch 3, Orb 4 → Ch 4.- Note Output
- Toggle.
Notes Onemits a MIDI note for every collision on this orb.Notes Offkeeps the internal voice audible but sends nothing out. - CC Output
- Toggle plus two CC-number strips. When on, the orb's X and Y positions are transmitted as MIDI CCs. Defaults:
CC 16 / CC 17. Use these to modulate filters, effects, or anything else on a downstream instrument.
Full signal flow
USER INPUT DAW TRANSPORT
Fling orb · Drag central mass · Enables │
│ │
▼ │
Physics Engine (60 fps) ◀─ gravity/damping/friction ─┤
│ │
│ collision detected │
▼ │
CollisionEvent FIFO (lock-free) │
│ │
▼ │
Collision Processing │
· map wall position → scale note │
· apply per-orb quantization ◀──────────────────┘
· trigger internal voice
· optional MIDI note out (per-orb channel)
│
▼
Pluck Engine (16-voice poly) ─▶ Reverb ─▶ Audio Out
+
MIDI Out (notes + CC)
Routing patterns
- Gravity's internal pluck — do nothing. The built-in engine handles all four orbs polyphonically in standalone or in a DAW.
- Route to a piano (or any poly synth) — point all four orb MIDI channels at the same instrument track. You get the "jazz piano being played by four hands" behaviour that motivates the design.
- Four synths in parallel — one instrument track per lane in the DAW, each listening on Ch 1/2/3/4. Full sonic independence, still driven by the same physics.
- Gravity as MIDI-only source — turn down Gravity's track volume; keep
Note Outputon. The internal pluck is silent, external synths respond. - Orbs as expression controllers — enable
CC Outputon one orb, point its X/Y CCs at a filter cutoff and resonance on your main synth. The orb becomes a slow, organic modulation source.
Visuals, Themes & Presets
Visuals tab
- Visuals
- Master on/off for all visual effects. Disable for lower GPU load.
- Particles
- Collision burst particles on impact.
- Trail (XY)
- X length · Y opacity. Long low-opacity trails read as ghosts; short high-opacity trails as comets.
- Glow (XY)
- X bloom intensity on the 3D sphere · Y overall 3D intensity.
Themes
Eight colour themes accessible from the top-bar Theme button. All are tested for colour-vision accessibility — the four orb colours (Red/Blue/Green/Yellow) remain distinguishable under each palette.
Factory presets
| Preset | Scale / Root | Character | Theme |
|---|---|---|---|
| Init | Major / C | Clean starting point | Ember |
| Orbital Chimes | Pentatonic / C | Low gravity, long decays, central-mass orbits | Ocean |
| Chaos Bounce | Chromatic | High gravity, no attractor, short clicky hits | Infrared |
| Ambient Drift | Harmonic Minor / D | Very low gravity, long decays, slow evolution | Arctic |
| Rhythmic Grid | Major / F | Global 1/8 quantize for tight grooves | Neon |
| Dark Orbits | Blues / A | Octave −1, moderate gravity, brooding | Midnight |
| Gamelan Garden | Pentatonic / E | Per-orb masses for layered polyphony | Forest |
| Pulse Machine | Blues / A | 100 BPM, 1/4 quantize, driving pulse | Amethyst |
Use Save in the top bar to add your own; Del removes the current user preset.
Workflows & Recipes
Concrete ways to use Gravity. Each is a few minutes of setup.
Recipe 1 · Hypnotic orbital ostinato
- Load
Orbital Chimes. TurnGravitydown to ~0.2 andCentral Mass Strengthup to ~0.6. - Drag the central mass slightly off-centre — orbits become elliptical.
- Enable
Pulse = 4 bars. Every four bars, the mass inhales and the orbits tighten. - Set
Key Range = 24for wider melodic leaps.
Recipe 2 · Rhythmic machine
- Start from
Rhythmic Grid. - High gravity (≈0.8), high damping (≈0.7) — orbs bounce fast and settle quickly.
- Set global
Quantize = 1/16. Every collision snaps to a 16th. - Per-orb: Orb 3 →
Quantize = 1/4. The "kick" orb now plays only on beats while the others chatter around it. - Enable
Orb Collisionsfor surprise harmonies.
Recipe 3 · External-synth trigger
- In your DAW, create four instrument tracks. Point each at a different synth, listening on channels 1–4 respectively.
- Open Gravity. Under the MIDI tab, set
Note Output = Notes Onon all four orbs. - (Optional) Mute Gravity's audio output so only the external synths are heard.
- Fling orbs — each plays its own synth on its own channel.
Recipe 4 · XY as a modulator
- Pick one orb. Disable its
Note Output. EnableCC Output, setCC X = 1(mod wheel),CC Y = 74(filter). - Drop
Gravityto ~0.05 so the orb drifts slowly. - Drag the orb high into the plane and release with a slow horizontal motion — CC 1 and 74 now lazily modulate your target synth for as long as the orb drifts.
Recipe 5 · Chord changes without editing notes
- Get a pattern playing with any preset.
- Enable
Scale Seqon the left panel. - Add segments:
C Maj · 1 bar,A Min · 1 bar,F Maj · 1 bar,G Maj · 1 bar. - The orbs keep doing their thing; the progression rides over top, bar-synced.
Tips & Troubleshooting
Tips
- Start from a preset, not from Init. Gravity's parameter space is wide; presets are curated into playable zones.
- Low gravity + low damping = long evolution. High gravity + high damping = tight rhythm. Everything else is in between.
- Pulse is the metronome. If a patch feels arrhythmic, turn the pulse on before touching anything else.
- Key Range is a composition tool. Smaller ranges stay close to tonic; larger ranges give you full melodic range but bigger jumps between adjacent wall positions.
- Use per-orb quantize for layered time. One orb on
1/4, one on1/16, one onNone— instant polyrhythm. - Hide Panels for performance. The full-screen physics plane is great on a tablet or in a live rig.
Troubleshooting
- Nothing plays
- Check orb enables on the left panel,
Volumeper orb, and that the transport is running. If you're expecting external MIDI, checkNote Output = Notes On. - Orbs fall off-screen or behave oddly
- Use
Reset Orbsin the top bar. - Can't change scale manually
Scale Seqis enabled — disable it, or edit segments on the timeline.- Collisions feel sloppy
- Raise global or per-orb
Quantize. RaiseDampingso orbs settle rather than micro-bouncing. - Runaway feedback / orbits spiralling in
- Lower
Central Mass Strength. It's the usual culprit when orbs pile up at the centre. - CPU high
- Turn
Visualsoff on the VISUALS tab. The OpenGL sphere and particle system are the heaviest costs. - Orb-orb collisions not triggering
- The
Orb Collisionstoggle on the PHYSICS tab is off, or both orbs haven't recorded a wall note yet (needed to compute the midpoint note).
Control Reference
Alphabetical index. Every top-level control, where it lives, and what it accepts.
| Control | Location | Values | Notes |
|---|---|---|---|
| BPM | Top bar | 60–240 | Follows host when available. |
| CC Output | MIDI tab | toggle + 2 × 0–127 | Per-orb X / Y CCs. |
| Central Mass | Physics tab · XY | Strength 0–1 · Size 0.1–1.0 | Also draggable on the plane. |
| Channel | MIDI tab | 1–16 | Per orb. |
| Damping | Physics tab · XY (Y) | 0–1 | Energy loss on bounce. |
| Decay | Sound tab · XY (X) | 10–2000 ms | Per-orb amp envelope. |
| Dynamics | Sound tab · XY | Pitch ±24 · Volume 0–1 | Per orb. |
| Friction | Physics tab | 0–1 | Surface drag. |
| Glow | Visuals tab · XY | Bloom 0–1 · 3D intensity 0–1 | Affects OpenGL sphere. |
| Gravity | Physics tab · XY (X) | 0–1 | Downward force. |
| Hide Panels | Top bar | toggle | Full-screen physics view. |
| Key Range | Left panel | 6 · 12 · 24 · 36 · 48 | Semitones spanned per wall. |
| Note Output | MIDI tab | toggle | Per-orb MIDI note emission. |
| Octave | Left panel | −2 … +2 | Global octave offset. |
| Orb Collisions | Physics tab | toggle | Midpoint-note generation. |
| Orb Enables | Left panel | 4 toggles | Mutes per orb. |
| Orb Mass | Physics tab | 0.1–5.0 | Global; overridable per orb. |
| Orb Size | Physics tab | 0.015–0.08 | Per orb. |
| Particles | Visuals tab | toggle | Collision burst FX. |
| PLAY / STOP | Top bar | toggle | Standalone transport. |
| Presets | Top bar | dropdown + Save / Del | 8 factory + user. |
| Pulse | Top bar | Off · 1 · 2 · 4 · 8 bars | Gravity-pulse interval. |
| Quantize (global) | Left panel | None · 1/32 … 1/2 | Collision grid snap. |
| Quantize (per orb) | Sound tab | Global · None · 1/32 … 1/2 | Overrides global for that orb. |
| Reset Orbs | Top bar | button | Sends orbs to default rest. |
| Root | Left panel | C–B | Dimmed when Scale Seq active. |
| Scale | Left panel | 16 scales | Dimmed when Scale Seq active. |
| Scale Seq | Left panel | toggle | Enables timeline automation. |
| Theme | Top bar | 8 themes | CVD-friendly palettes. |
| Tone | Sound tab · XY (Y) | 0–1 | Per-orb filter brightness. |
| Trail | Visuals tab · XY | Length 0–1 · Opacity 0–1 | Orb motion trails. |
| Visuals | Visuals tab | toggle | Master switch. |