Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions book/src/recipes/minimoog.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,8 @@ patches alone:

All three: `@shape 2` (saw), `@jitter 3 @track 2 @imperfect 0.3`, and
`smooth` per the patch below. Sum through `*~ 0.36` (≈ 1/2.8, headroom for
three voices), then `tap.ladder~` at the chapter's voicing: `@mode 0` (the
lp24 response — the mode attribute is the numeric pole-mix index)
`@resonance 0.35 @drive 9 @asym 0.45 @comp 0.25`. Keeping `comp` low
three voices), then `tap.ladder~` at the chapter's voicing:
`@mode lp24 @resonance 0.35 @drive 9 @asym 0.45 @comp 0.25`. Keeping `comp` low
preserves the authentic passband droop; `drive 9` sits where the ladder
notebook measures the tanh stages just starting to thicken (3.5 % THD at
8 dB). Spend the character budget in the filter first — the chapter's
Expand Down
20 changes: 12 additions & 8 deletions book/src/recipes/moog-classics.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,15 @@ Every patch below is a delta against the wiring and tables of
[Three oscillators into a ladder](minimoog.md) — build that voice first.
Two performance tools recur, so here they are once:

- **Vibrato** goes into each `tap.vco~`'s FM inlet, which is calibrated in
Hz. For vibrato that reads as a constant musical width, scale the LFO by
the note: `cycle~ 5.5` multiplied by 0.006 × the note's frequency is
about ±10 cents. Fade the LFO in with `line~` a beat after note-on — the
delayed vibrato is most of what makes a lead "sing."
- **Vibrato** is the oscillator's own now: `@vibrato` (depth in cents, so
the musical width holds in every register), `@vibrato_rate` (Hz), and
`@vibrato_delay` (ms) — the onset fades in through that time constant
and re-arms on every new note, which is most of what makes a lead
"sing." ±10 cents at 5.5 Hz with a few hundred milliseconds of delay is
the classic setting. (This chapter's first draft had to print a
scaling formula into the Hz-calibrated FM inlet here; that formula
became the improvements plan's §2, and §2 became these attributes —
the audit worked.)
- **Sequenced lines**: `tap.303.seq~` emits pitch as a MIDI-note signal and
a gate at 1.0/2.0 — `mtof~` turns the pitch into Hz for the oscillators'
signal inlets, and the gate drives `tap.adsr~` directly (it opens above
Expand Down Expand Up @@ -96,9 +100,9 @@ Deltas from the lead patch:
| filter contour | `@attack 30 @decay 900 @sustain -10 @release 700`, amount 3000 Hz, base 250 Hz |
| loudness contour | `@attack 8 @decay 300 @sustain -2 @release 500` |

Then spend all your effort on the vibrato: 5.5 Hz, ±10 cents (the intro's
formula), faded in over ~400 ms after each phrase begins, and *not* on
every note. The patch is deliberately close to the ideal oscillator —
Then spend all your effort on the vibrato: `@vibrato 10 @vibrato_rate 5.5
@vibrato_delay 400` — ten cents, arriving late, re-arming on each new
note so held phrase-endings bloom while passing notes stay plain. The patch is deliberately close to the ideal oscillator —
`imperfect 0.2`, drift at the polite end — because the expressive load is
carried by the hands, and everything the analog section adds here it adds
to sustained exposed notes.
Expand Down
11 changes: 6 additions & 5 deletions book/src/recipes/robot-voice.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,12 @@ tap.noise~ (white) ─ *~ 0.1┘
the [Moog recipe's](minimoog.md) stack values; skip the octave-down
voice — vocoded speech reads clearest with the energy above the
fundamental.
- **A tenth of white noise** (`tap.noise~ @mode white` through `*~ 0.1`):
this is the *s* and *t* budget. The object has no unvoiced/sibilance
path of its own, so the noise rides the carrier full-time and the
modulator's high-band envelopes gate it into consonants exactly when
needed.
- **The *s* and *t* budget.** `@sibilance 0.3` is the built-in version —
a seeded noise source in the top bands' carrier, gated by the
modulator's high-band envelopes, arriving exactly when consonants do.
The manual alternative (a tenth of `tap.noise~` summed into the
carrier) remains the craftier option when you want to choose the noise
color yourself.
- **Pitch is the performance.** The vocoder never changes the carrier's
pitch, so the carrier's notes are the melody. Held chords (an `mc.`
stack of carriers) make the robot a choir; a single line makes it a
Expand Down
11 changes: 5 additions & 6 deletions book/src/recipes/sequenced-modular.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,17 +75,16 @@ Then the two moves that carry twenty minutes:
|---|---|
| loudness `tap.adsr~` | `@attack 2 @decay 180 @sustain -12 @release 120` |
| filter `tap.adsr~` | `@attack 2 @decay 160 @sustain -20 @release 160`, amount 1800 Hz, base 150 Hz |
| ladder | `@mode 0 @resonance 0.3 @drive 6` |
| ladder | `@mode lp24 @resonance 0.3 @drive 6` |
| slew (`slide~`) | short; raise it only for deliberate swoops |
| seq | `@swing 0` — the genre is a grid, and the delay does the humanizing |

Two period tricks worth their lines: pan alternate notes (a `length 8` row
of accents driving `tap.pan~` recreates the famous ping-pong doubling), and
put an eighth-note delay after the voice — the echo, not the sequencer, is
where these records' motion lives. Note `tap.delay~` is a plain
integer-sample delay (no feedback, no interpolation), so use it for the
single slap and patch feedback around it, or reach for Max's delay objects
for modulated regeneration.
put an eighth-note `tap.delay~` after the voice (`@feedback 40 @mix 30`) —
the echo, not the sequencer, is where these records' motion lives. Since
its rebuild the delay interpolates (Hermite) and regenerates through a
DC-blocked loop; `@interp 0` remains the bit-faithful legacy mode.

Glue: an 808 closed-hat row in 16ths from the drum scaffold, mixed low.
Accents land in this scaffold too: turn up `tap.adsr~`'s `velocity`
Expand Down
26 changes: 26 additions & 0 deletions book/src/vco.md
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,32 @@ tolerances** so each seed misbehaves in its own direction:
point to in a mix; 1.0 is a unit with a story. At 0, every seed is the same
ideal machine — the analog section never costs you the reference oscillator.

## The performance section

Where the analog section models what the circuit does on its own, these
controls model what a hand does to it — added after the Recipes chapters
had to teach a scaling formula to get constant-width vibrato out of the
Hz-calibrated FM inlet.

- **`vibrato` / `vibrato_rate`** — a sine LFO on the pitch, depth in
**cents** (0–100) and rate in Hz, so ten cents is ten cents in every
register. Measured: at a commanded ±100 cents the peak cycle-to-cycle
deviation reads 90–110 cents, and the modulation crosses its mean at
exactly twice the commanded rate (pinned by test).
- **`vibrato_delay`** — the singing control: the vibrato fades in through
a one-pole with this time constant (ms), **re-armed on every new note**
(every frequency-target change), so held notes bloom and passing notes
stay plain. Pinned: early deviation under 60 % of settled, and shallow
again right after a note change. The signal-rate frequency inlet
deliberately does not re-arm — there, you are the modulation.
- **`bend`** — pitch bend in semitones (±24), riding the standard `smooth`
ramp: the wheel, as an attribute. Pinned within 5 cents of the
commanded interval.

All of it is deterministic with no randomness — and at depth 0 the output
is **bit-identical** to the ideal oscillator (pinned), so the reference
instrument is still free.

## The Moog recipe, honestly

The sound everyone wants from this object is three oscillators into a ladder.
Expand Down
18 changes: 18 additions & 0 deletions book/src/vocoder.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,24 @@ pads — the "choir" setting. This knob is the vocoder's attack *and* release;
Makeup level, since a band-multiplied signal usually lands quieter than
either input. Linear, boring, necessary.

### `sibilance` — the built-in *s* and *t* budget

The classic channel-vocoder unvoiced path (Dudley's lineage): a seeded
internal noise source blended into the **carrier** of the bands above
~4 kHz, still gated by the modulator's envelopes — so consonants articulate
even over a dull carrier, and only when the modulator actually has
high-band energy (pinned: a silent carrier with an HF-rich modulator
speaks at `sibilance 1`; a low-only modulator stays quiet). At the default
0 the original silent-carrier contract holds exactly, bit-identical —
turning it up deliberately relaxes that contract for the top bands. The
noise is deterministic per `seed`, family doctrine.

### `mix` — the synth under its own robot voice

Equal-power blend of the dry **carrier** against the vocoded output — the
classic parallel move (the pad fades in under itself talking). Endpoints
are exact: 100 is bit-identical wet, 0 returns the carrier untouched.

## Choosing the two signals (the actual craft)

- **The carrier must have energy where the modulator has bands.** The eternal
Expand Down
Loading
Loading