Harmonic Tension Engine
Feb 25, 2026 · live
Harmonic Tension Engine is a minimalist browser instrument for building rich, beating sine textures out of embarrassingly simple ingredients.
It’s basically:
16 free‑running sine oscillators arranged as 8 detuned pairs, then given just enough structure (scale/key quantization, note distribution, and some modulation) to feel musical while still drifting like it doesn’t respect your plans.
It runs as a single HTML file with no backend. So you can host it anywhere static, or just open it locally and ruin your evening.
Try it
- Demo: https://www.unusable.ai/harmonic-tension-engine/
- GitHub: https://github.com/unusable-ai/Harmonic-Tension-Engine/
What it does
Each “voice” is a pair of sine oscillators tuned slightly apart around the same center note.
That tiny offset creates beating: the pulsing/interference effect you get when close frequencies rub against each other.
Stack 8 pairs across a scale and you get a controllable drone machine that can sound:
- calm and tonal
- alive and breathing
- dissonant and shifting
- weird in the good way
Key features (real ones, not marketing ones)
1) 8 sine pairs (16 oscillators)
- 8 independent voice pairs
- 16 total free‑running oscillators (organic phase interaction)
- per‑pair amplitude slider (main mix control)
2) Global detune / beating control
A global detune control sets how far apart each pair’s two oscillators are (in cents):
- subtle movement: ~1–5 cents
- obvious beating: ~5–15 cents
- chorus-ish weirdness: 15+ cents
3) Scale quantization + key
Each pair’s center note is quantized to a chosen scale + key:
- major/minor modes, pentatonic, chromatic, etc.
- keeps the drone organized while detune adds motion
4) Base note + spread (smart note distribution)
- base note sets the leftmost pair
- spread sets how far the rightmost pair extends
- intermediate pairs are distributed across the selected scale
This makes it easy to go from tight clusters to wide harmonic spreads.
5) Per-pair note offset
A per‑pair semitone offset lets you break symmetry locally:
- introduce tension
- double notes
- shift modal color
- make it “wrong” on purpose
6) Per-pair amplitude modulation (sine LFO)
Each pair has its own AM section:
- AM amount
- AM rate (slow to very slow)
Important detail: AM updates are direct/unslewed.
Randomize/Zero slew does not affect AM behavior, so the LFO stays responsive instead of turning into mush.
7) Hall-ish reverb
Simple built‑in reverb on the master output:
- dry/wet
- size
- decay
It adds space without turning this into a plugin chain.
8) Stereo width
Global width spreads the 8 pairs across the stereo field:
- narrow for centered drones
- wide for immersive textures
9) Headroom-friendly amplitude mapping
Sliders show 0–100%, but internal gain is capped (so stacking sines doesn’t instantly clip):
- easier gain staging
- fewer “why is everything exploding?” moments
10) Randomize / zero amplitudes + slew
Performance tools for the 8 amplitude sliders:
- randomize
- zero
- slew (fade/glide time)
Great for evolving textures and scene changes without clicks.
11) Local presets (browser storage)
Preset management via localStorage:
- save / load / delete
- export/import JSON
So you can reproduce a patch later, instead of trusting your memory (which is a bad system).
12) MIDI input (receive only)
Optional Web MIDI support (browser-dependent):
- Note On can control base note
- CC controls the 8 amplitude sliders
- default CC70–CC77 (configurable start CC)
Technical format
- single HTML file
- Web Audio API
- optional Web MIDI
- no backend
- works on most modern browsers (iPad included, as long as storage isn’t blocked)
Use cases
- ambient drone design
- harmonic beds for composition
- sound meditation / sleep textures
- experimental sound art
- learning detuning + beating + modulation
Notes / caveats
- This is sine-only on purpose. If you want “interesting timbre,” use a synth. If you want pure interference, welcome.
- Web MIDI support depends on browser permissions and support. The engine doesn’t care. Humans do.
Status
Live. Still evolving. Like the beating itself.