Shaper curves: a tube curve for the Leslie's drive, as a follow-up #149

Open
opened 2026-10-06 03:09:12 +00:00 by bcox · 4 comments
Owner

The Leslie layer (branch leslie, design docs/superpowers/specs/2026-10-05-leslie-layer-design.md) is planned with a drive stage on its mono input, ahead of the crossover, so the amplifier's harmonics are split by band and take each rotor's Doppler and tremolo. That stage is planned on dsp/shaper.h's existing soft clip. This ticket is the follow-up: a tube curve, and with it the question of which other curves the shaper should carry.

What is wanted

  • A tube-style transfer curve for the Leslie's drive: asymmetric, soft into the positive rail and harder into the negative, so it makes even harmonics as well as odd. bcox asked for it on 2026-10-05; the soft clip is the stand-in until then.
  • A shape selector on the Leslie's drive once there is more than one curve worth choosing.

Why it was not done in the Leslie branch

ShaperShape lives in dsp/shaper.h, which the VA layer, the VA filter, the ladder and the FM pair all include. The VA layer is what the board's RTL is cosimulated against, and the Leslie branch keeps dsp/va_*.h read-only for that reason. A new curve is an appended enum value with its own MinimumRatio, and it reaches every engine that offers a shape picker, so it wants its own branch and its own look at what the RTL benches assume.

What the tree has, read at de07f37e, nothing tried

  • dsp/shaper.h: three curves (kSoftClip, kHardClip, kFold), a drive from unity to sixteen, an asymmetry and a dry/wet fold. Memoryless on purpose; its header says why.
  • Each curve declares its oversampling ratio in MinimumRatio; the soft clip's is 2, the others' 4. A tube curve's ratio has to be decided and measured, not assumed.
  • The existing asymmetry control may already reach part of this. Whether an asymmetric soft clip is close enough to count as the tube curve is the first thing to find out, by measuring its even harmonics against the curve wanted.

Open questions

  • Is the tube curve a new ShaperShape, appended, or a curve local to the Leslie? Appended serves every engine and touches the shared header; local keeps the VA layer's surface still.
  • A real output stage has memory (bias shift, sag under sustained drive). dsp/shaper.h is memoryless by design, and dsp/va_sag.h is the tree's existing sag follower. Out of scope here unless the curve alone does not sound like one.
  • The format stores a shape by value, so a new one is an appended value and a minor bump with a history entry.
The Leslie layer (branch `leslie`, design `docs/superpowers/specs/2026-10-05-leslie-layer-design.md`) is planned with a drive stage on its mono input, ahead of the crossover, so the amplifier's harmonics are split by band and take each rotor's Doppler and tremolo. That stage is planned on `dsp/shaper.h`'s existing soft clip. This ticket is the follow-up: a tube curve, and with it the question of which other curves the shaper should carry. ## What is wanted - A tube-style transfer curve for the Leslie's drive: asymmetric, soft into the positive rail and harder into the negative, so it makes even harmonics as well as odd. bcox asked for it on 2026-10-05; the soft clip is the stand-in until then. - A `shape` selector on the Leslie's drive once there is more than one curve worth choosing. ## Why it was not done in the Leslie branch `ShaperShape` lives in `dsp/shaper.h`, which the VA layer, the VA filter, the ladder and the FM pair all include. The VA layer is what the board's RTL is cosimulated against, and the Leslie branch keeps `dsp/va_*.h` read-only for that reason. A new curve is an appended enum value with its own `MinimumRatio`, and it reaches every engine that offers a shape picker, so it wants its own branch and its own look at what the RTL benches assume. ## What the tree has, read at `de07f37e`, nothing tried - `dsp/shaper.h`: three curves (`kSoftClip`, `kHardClip`, `kFold`), a drive from unity to sixteen, an asymmetry and a dry/wet fold. Memoryless on purpose; its header says why. - Each curve declares its oversampling ratio in `MinimumRatio`; the soft clip's is 2, the others' 4. A tube curve's ratio has to be decided and measured, not assumed. - The existing asymmetry control may already reach part of this. Whether an asymmetric soft clip is close enough to count as the tube curve is the first thing to find out, by measuring its even harmonics against the curve wanted. ## Open questions - Is the tube curve a new `ShaperShape`, appended, or a curve local to the Leslie? Appended serves every engine and touches the shared header; local keeps the VA layer's surface still. - A real output stage has memory (bias shift, sag under sustained drive). `dsp/shaper.h` is memoryless by design, and `dsp/va_sag.h` is the tree's existing sag follower. Out of scope here unless the curve alone does not sound like one. - The format stores a shape by value, so a new one is an appended value and a minor bump with a history entry.
Author
Owner

2026-10-05, later the same day: bcox asked for the shaper's existing asymmetry (its bias) to be exposed on the Leslie's drive in the leslie branch, as a second field beside drive, with no change to dsp/shaper.h. The design (docs/superpowers/specs/2026-10-05-leslie-layer-design.md, commit 72fbf894) has it. So the first thing under "What the tree has" above -- whether an asymmetric soft clip is close enough -- can be answered by ear once that branch lands, and this ticket's priority waits on that answer. Nothing has been heard or measured yet.

2026-10-05, later the same day: bcox asked for the shaper's existing asymmetry (its `bias`) to be exposed on the Leslie's drive in the `leslie` branch, as a second field beside `drive`, with no change to `dsp/shaper.h`. The design (`docs/superpowers/specs/2026-10-05-leslie-layer-design.md`, commit `72fbf894`) has it. So the first thing under "What the tree has" above -- whether an asymmetric soft clip is close enough -- can be answered by ear once that branch lands, and this ticket's priority waits on that answer. Nothing has been heard or measured yet.
Author
Owner

2026-10-06: bcox has listened to the Leslie's drive with the asymmetry exposed and says it sounds pretty good for now, and that the tube curve can wait. Deferred on that basis; the leslie branch's ledger records it.

2026-10-06: bcox has listened to the Leslie's drive with the asymmetry exposed and says it sounds pretty good for now, and that the tube curve can wait. Deferred on that basis; the `leslie` branch's ledger records it.
Author
Owner

To be clear: I do still want tubelike curves; they're just lower priority.

To be clear: I do still want tubelike curves; they're just lower priority.
Author
Owner

And yes, it should be a new shaper shape.

Bias shift and sag under sustained drive can be done via the mod matrix with a sag source, but shapers with memory is already another ticket, I think.

The current sound is a little crisper and sharper than the tube sound. It gets me closer to the Renegade sound but not all the way there. Needs to be a little rounder and grindier. (he might have a phaser on there too, i'll have to try to listen to the isolated track)

And yes, it should be a new shaper shape. Bias shift and sag under sustained drive can be done via the mod matrix with a sag source, but shapers with memory is already another ticket, I think. The current sound is a little crisper and sharper than the tube sound. It gets me closer to the Renegade sound but not all the way there. Needs to be a little rounder and grindier. (he might have a phaser on there too, i'll have to try to listen to the isolated track)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bcox/tymbal#149
No description provided.