rossedman/deaths-hand

Death's HandTwo oscillators. One will. No mercy.

An evil West-Coast complex oscillator for the Electrosmith patch.Init and VCV Rack: through-zero FM, a wavefolder, ring mod, self-feedback, chaos and a Lorenz heart. One DSP core, measured to the cent.

$ git clone --recurse-submodules https://github.com/rossedman/deaths-hand && cd deaths-hand && make check
make test
$ make test
pitch tracking (1V/oct, 0 V = C4)
worst error: +0.0907 cents
self-feedback: sine -> saw-like -> noise
fb 1.00 H2 -5.7 dB
chaos: cross-FM should break periodicity
chaos 1 non-harmonic -0.0 dB
long-run stability: 60 s of worst-case evil
+0 V peak 5.08 V finite yes
all tests passed
  • 0.09¢worst 1V/oct error, −3 V to +5 V
  • −84 dBalias energy, 4× oversampled
  • 60 sof worst-case evil, still finite
  • 106 KBof the patch.Init's 128 KB flash

The voice

Two voices.
One devours.

A modulator bends the primary through through-zero FM, folds it, and rings it. Then three things make it misbehave: the primary feeds its own phase, it feeds the modulator's pitch, and the modulator can become a strange attractor that never repeats.

  • Linear through-zero FM: the phase runs backwards
  • Self-feedback from pure sine to saw to noise
  • A Lorenz attractor as a modulator, 0.01 Hz to 20 kHz
  • Four drifting voices and a sub, folded together
See the anatomy
host_testspassing make test

Feedback, measured

Harmonic levels as self-feedback rises
self-feedback: sine -> saw-like -> noise fb 0.00 H2 -117.2 dB non-harmonic -69.1 dB fb 0.50 H2 -10.5 dB non-harmonic -67.3 dB fb 0.75 H2 -7.0 dB non-harmonic -51.5 dB fb 1.00 H2 -5.7 dB non-harmonic -43.0 dB
Without the two-sample average, feedback hunts at Nyquist and turns to hiss far too early.docs/how-it-works.md

The macros

Three knobs.
Three sins.

Each macro sweeps several parameters along its own curve, so one knob, or one CV, tells one story. The host tests hold each to it.

Flesh

FM, fold, asymmetry

Sidebands first, then the fold opens from glassy to snarling, then it tips asymmetric and starts to move.

centroid, FLESH 0 → 1 (Hz)
220 314 487 750 1722 2402
3377 4245 5478 6361 6809

Malice

feedback, then chaos

Harmonic to halfway: sine to saw. The edge into chaos runs from about 0.55 to 0.8. Past it, possession.

inharmonic share, MALICE
0.5  0.00   0.7  0.05
0.8  0.97   0.9  1.00

Legion

sub, voices, drift

A sub arrives first, then detuned voices fade in one by one, then a Lorenz attractor pulls them apart.

beating, LEGION 0.4 → 1
2.8x 3.4x 3.7x 4.2x
4.0x 4.0x 4.8x

Hear it

Don't take our word.
Take its voice.

Rendered by the same DSP core the module runs, from knob positions you can dial in. Dry, and rebuilt from the current code every time these docs publish.

Legion, 0 to full

One voice becomes a drifting swarm.
Spectrogram of Legion, 0 to full

Descent

Four and a half octaves down into collapse.
Spectrogram of Descent

All fourteen renders

The Death's Hand panel: sixteen controls marked with sigils over a faint summoning circle, rune columns down both edges, and the two outputs on a red altar.

The panel

No words.
Only sigils.

The top row is the voice: pitch and three character macros. Each sigil repeats on the jack that drives it, so the panel reads in columns. Bone rings are inputs; red rings are outputs, and they sit on the altar.

  • Eyepitch
  • ZigzagFLESH
  • Eight-arrow starMALICE
  • Four ringsLEGION
  • Vesicaratio, modulator pitch
  • Trianglemodulator shape
  • Hourglasssymmetry
  • Crossed ringrouting

The full decoder

Three vessels

One core.
Three bodies.

The DSP lives in dsp/: no heap, no platform headers, volts in and volts out. The firmware, the plugin and the tests include it unchanged.

patch.Init

Eurorack hardware

Pitch and the three macros up front, their CVs on the jacks. Hold the button for ratio, shape, symmetry and fine, with soft takeover so nothing jumps.

make firmware
make -C hw program-dfu

VCV Rack

16 HP, the same panel

Mirrors the hardware knob for knob, through the same panel mapping, so a patch moves between them unchanged.

make vcv RACK_DIR=../Rack-SDK

Host tests

every pull request

Pitch, aliasing, feedback, chaos, Lorenz bounds and minute-long worst-case runs, plus WAV renders of every patch.

make test
make analyze

How it works

Bend. Fold.
Feed it to itself.

Signal flow: V/OCT drives the primary; the modulator feeds it through through-zero FM, sets the wavefolder's timbre and the AM or ring depth, and goes to MOD OUT. The primary runs through the wavefolder, AM or ring, and the 4x decimator to OUT. Red feedback paths: the primary modulates its own phase, and modulates the modulator's frequency.
Tap to open the full-size diagram

Give it your hand.

Free and open source under the MIT license.