Wavetable oscillator: a single-cycle table read by phase, which the spectral tables only approximate #115

Open
opened 2026-10-05 23:35:05 +00:00 by bcox · 0 comments
Owner

bcox asked on 2026-10-05 for a ticket for each engine gap that the third set of instruments in his moregaps.md left without one. Engine claims are from reading the tree at f6aa8eba on main. Instrument claims are from that day's research, read mostly as archive.org OCR of the manuals by research agents and not re-checked; the sources are listed in that document. Nothing here is built, measured or listened to.

Summary

VaShape reserves the slot: "A wavetable shape appends here rather than replacing anything" (dsp/va_oscillator.h:34-36). Nothing is behind it. What the engine has is the FM pair's SpectralTable, a sequence of spectra crossfaded harmonic by harmonic, each harmonic a signed amplitude and a phase (dsp/spectrum.h:1-13), 512 harmonics by 32 waves (plugin/program.h:71, :97). That holds any single cycle's shape up to its harmonic count, band-limited by construction. It is not a table read in time, and six instruments in the third set are built on one. gaps.md lists the family.

What a spectral table cannot do

  • Alias the way the original does. A Prophet VS wave is 12 bits and, by a forum post only, 128 words; an ESQ-1 wave is 8 bits. The aliasing is the sound.
  • Sync, amplitude modulation and cross-modulation between waves. Resetting a table read is one store; a spectral sum is a different machine. Those live in the VA layer's oscillator section, where a table shape would too.
  • Be scanned by an audio-rate phase, or used as a waveshaper.
  • Take a user's wave from a file. The VS holds 32 RAM waves loaded by sample dump.

What the instruments do

  • Prophet VS: four oscillators per voice, each one of 128 waves, no sync between them, mixed as one point on two axes by joystick, two LFOs, key, velocity, pressure, and a five-point mixer envelope.
  • ESQ-1: 32 waves. SQ-80: 75, with transient attacks that play once, inharmonic loops and drum sets.
  • K4: 96 single-cycle waves beside 160 PCM.
  • Pro 2: twelve wavetable shapes per oscillator, with a shape control that crossfades to the neighboring wave.
  • Pro 3: 32 tables of 16 waves, interpolated by shape mod, on the digital oscillator.

The work, as a sketch

  • A VaShape::kWavetable: a bank of single-cycle tables, a wave-position lane that crossfades adjacent waves (the Pro 3) or selects one (the VS), read by the oscillator's Q0.32 phase with linear interpolation. Everything else the oscillator has -- sync, lock, ring, cross-mod, the mix buses, footage -- applies as it does to any phase shape.
  • Band-limiting as a patch choice: none, for the VS's aliasing; or one table per octave with the harmonics above Nyquist removed, chosen by increment, which is what kNyquistIncrement already does for the additive oscillator. A spectrum gives one cycle per octave by one inverse sum offline, so the FM pair's tables could be the source of the band-limited form.
  • Storage: tables are patch data as the sample slot's are (dsp/sample_slot.h), flat and bounded; on the fabric a table is a RAM read per sample per oscillator, and the per-octave form multiplies it by the octaves.
  • Format: a new asset kind in format/, exchangeable as tables and materials are.

Open

  • Where tables are authored: drawn in the editor, imported from VS and ESQ dumps (both formats are documented in moregaps.md), or written by resynth/.
  • Whether the SQ-80's one-shot transients are this or the sample slot (they are what the slot is for).
  • #78, sampling on fabric: a looped single cycle is the degenerate loop.
  • The vector mix (VS) is reachable as five layers today, per moregaps.md; it wants this oscillator to be one.
bcox asked on 2026-10-05 for a ticket for each engine gap that the third set of instruments in his `moregaps.md` left without one. Engine claims are from reading the tree at `f6aa8eba` on `main`. Instrument claims are from that day's research, read mostly as archive.org OCR of the manuals by research agents and not re-checked; the sources are listed in that document. **Nothing here is built, measured or listened to.** ## Summary `VaShape` reserves the slot: "A wavetable shape appends here rather than replacing anything" (`dsp/va_oscillator.h:34-36`). Nothing is behind it. What the engine has is the FM pair's `SpectralTable`, a sequence of spectra crossfaded harmonic by harmonic, each harmonic a signed amplitude and a phase (`dsp/spectrum.h:1-13`), 512 harmonics by 32 waves (`plugin/program.h:71`, `:97`). That holds any single cycle's shape up to its harmonic count, band-limited by construction. It is not a table read in time, and six instruments in the third set are built on one. `gaps.md` lists the family. ## What a spectral table cannot do - Alias the way the original does. A Prophet VS wave is 12 bits and, by a forum post only, 128 words; an ESQ-1 wave is 8 bits. The aliasing is the sound. - Sync, amplitude modulation and cross-modulation between waves. Resetting a table read is one store; a spectral sum is a different machine. Those live in the VA layer's oscillator section, where a table shape would too. - Be scanned by an audio-rate phase, or used as a waveshaper. - Take a user's wave from a file. The VS holds 32 RAM waves loaded by sample dump. ## What the instruments do - Prophet VS: four oscillators per voice, each one of 128 waves, no sync between them, mixed as one point on two axes by joystick, two LFOs, key, velocity, pressure, and a five-point mixer envelope. - ESQ-1: 32 waves. SQ-80: 75, with transient attacks that play once, inharmonic loops and drum sets. - K4: 96 single-cycle waves beside 160 PCM. - Pro 2: twelve wavetable shapes per oscillator, with a shape control that crossfades to the neighboring wave. - Pro 3: 32 tables of 16 waves, interpolated by shape mod, on the digital oscillator. ## The work, as a sketch - A `VaShape::kWavetable`: a bank of single-cycle tables, a wave-position lane that crossfades adjacent waves (the Pro 3) or selects one (the VS), read by the oscillator's Q0.32 phase with linear interpolation. Everything else the oscillator has -- sync, lock, ring, cross-mod, the mix buses, footage -- applies as it does to any phase shape. - Band-limiting as a patch choice: none, for the VS's aliasing; or one table per octave with the harmonics above Nyquist removed, chosen by increment, which is what `kNyquistIncrement` already does for the additive oscillator. A spectrum gives one cycle per octave by one inverse sum offline, so the FM pair's tables could be the source of the band-limited form. - Storage: tables are patch data as the sample slot's are (`dsp/sample_slot.h`), flat and bounded; on the fabric a table is a RAM read per sample per oscillator, and the per-octave form multiplies it by the octaves. - Format: a new asset kind in `format/`, exchangeable as tables and materials are. ## Open - Where tables are authored: drawn in the editor, imported from VS and ESQ dumps (both formats are documented in `moregaps.md`), or written by `resynth/`. - Whether the SQ-80's one-shot transients are this or the sample slot (they are what the slot is for). ## Related - #78, sampling on fabric: a looped single cycle is the degenerate loop. - The vector mix (VS) is reachable as five layers today, per `moregaps.md`; it wants this oscillator to be one.
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#115
No description provided.