Skip to content

Version 3 Release Notes

atom edited this page Sep 3, 2026 · 1 revision

Version 3 Release Notes

v3.0 is the first public FWG release after v2.9c. It expands the instrument, search workflows, wavetable tooling, and JSON/reproducibility model while moving the internal oscillator/Drawn core to 512 internal cycle samples.

Major additions

512-sample core

🔧 FWG's internal source/wavetable core now uses 512 internal cycle samples. Source/Result Window controls use inclusive 1–512 positions. Public v2.9c schema-12 0–256 windows are migrated on import. For the design trade-offs behind that fixed v3 point count, see Meditations on the 512-Sample Core.

Bulk Explorer

🎹 Bulk Explorer provides deterministic local variation around a known START/END/Morph design, with explicit scalar ranges and categorical pools.

Deterministic named randomisation

🔧 Playground, Morph, Bulk Random and Explorer use named SHA-256 random decisions. Bulk Random and Explorer expose their seeds directly; Playground and Morph randomisation use hidden next-action seeds. Independent named addresses prevent unrelated later decisions from shifting merely because another branch consumes a different number of draws.

Scanning generators and recipes

🎹 Scanning generators animate ordinary generator controls along declarative trajectories. v3.0 includes a curated built-in catalogue plus session-only custom recipes that can be imported, collected, concatenated, used in Explorer and embedded into exported Morph/Explorer JSON when needed for reconstruction.

Phase-Coherent Mode

🎹 Optional best-effort completed-wavetable phase registration can improve wavetable-frame orientation for wavetable-oriented work. It defaults Off, persists separately in Morph/Bulk/Explorer, and MPC setup enables it in the active workspace. Shipping registration is exact integer circular rotation.

Expanded Morph/modulation

🎹 The START-mod-END family now covers moving/fixed Phase, AM, FM, PWM and Ring Modulation modes with dedicated depth/rate behaviour.

JSON.GZ, Drawn construction and transforms

🔧 Current JSON exports use schema 13 and deterministic .json.gz sidecars. Plain .json remains importable. Numeric Drawn data is human-readable after decompression; historical Base64 Drawn remains importable. Numeric-array format labels no longer decide current numeric semantics and new numeric examples/exports omit the redundant label.

Drawn now has an explicit two-stage construction model. data + resample_mode + stage-1 wrap first materialise the ordinary bounded 512-internal-cycle-sample Float32 Drawn waveform. An optional transform then operates on exactly that completed waveform, followed by optional final normalise:true. Full sidecars may retain the pristine pipeline; ordinary Drawn editing clears it; standalone Export Drawn always flattens the result to 512 literal editable internal cycle samples.

The v3 transform collection is Fourier, Haar and Walsh-Hadamard. Fourier remains usable both directly as resample_mode and as a stage-2 transform. Haar and Walsh are transform-only. Their shared selector grammar supports exact components, open/inclusive ranges, comma unions and negative singleton coefficient inversion. Fourier exposes real orders 0…256, Haar exposes mean/detail bands 0…9, and Walsh exposes sequency 0…511.

Fourier treats a circular shift as harmonic-phase rotation without redistributing harmonic magnitude. Haar is alignment-sensitive because its fixed dyadic half/quarter/eighth/etc. boundaries can redistribute energy between Haar bands when the completed waveform is shifted. FWG does not add hidden Haar phase correction; phase/orientation remains upstream in the constructed waveform.

normalise:true is independent of transforms. It applies one final uniform gain around zero, preserving DC and amplitude ratios, and leaves silence/numerical dust at or below the Drawn 1e-9 peak floor alone.

Support diagnostics

🔧 Render Diagnostics, enabled through the ?render_diagnostics=a URL query parameter, adds optional troubleshooting evidence to exported JSON without changing sound or random decisions.

Window range and Table Safety continuity

🔧 Source and Result Windows use one consistent ordinary-table range policy whether fully open or truncated: after the selected/remapped geometry is built, its current minimum maps to −1 and maximum to +1. This extrema-to-rails mapping is not arithmetic-mean DC removal; the later DC Removal control remains a separate render choice, and literal Drawn/literal-level Wavetable Types retain their own literal contracts.

Live continuous endpoint edits keep one bounded previous-valid Table Safety standby so a slider — or a hand-drawn gesture — crossing a collapsed coordinate can hold the last meaningful table. Structural replacements clear that standby and fall back to the deterministic safety square if the new structure is invalid; whole-Drawn Copy/Reset/Clear/Undo/Import actions are structural replacements. Scanning/Morph audition and rendering retain the existing bounded per-traversal START/END/Morph last-good behavior. Public Table-Safety notes/JSON/batch counts report each final structural substitution once rather than double-counting internal helper failure detection.

Continuity and interpolation corrections

🔧 v3.0 also freezes several pre-release continuity corrections:

  • Source/Result Window Morph interpolates each Window as cyclic Start + forward inclusive Length, preserving width when appropriate and retracing Forward/Reverse; an exact half-cycle Start tie preserves the sign of the endpoint displacement.
  • Filter Cutoff Morph uses logarithmic frequency-ratio interpolation, matching the logarithmic Cutoff control and cents/ratio variation model.
  • Warm Wavetable Morph and Softened Morph interpolate continuously between adjacent integer smoothing landmarks rather than stepping the smoothing-pass count.
  • Drawn Scanning LFO-shape Morph uses exact continuous Morph position. Its 512-point spectral inverse reconstruction uses a radix-2 inverse FFT, preserving the accepted Float32 output while avoiding the former O(N²) accumulation cost.
  • Table-Safety standby invalidation follows effective structure. In the direct literal Drawn fast paths, changing an inaudible generator/Scanning identity does not clear the previous-valid standby; genuinely consumed structure still does.

Compatibility

The supported public JSON boundary is v2.9c schema 12 plus current schema 13. Development-only v3 candidate schemas/field names are not public compatibility requirements.

Reliability and qualification

🔧 The v3 release line added broad regression coverage across all public generator families, loadable Wavetable Types, every current Morph mode, Scanning/gangpot trajectories, phase registration, seeded randomisation, JSON/gzip import/export, WAV/ZIP/MPC artifacts, resource limits, cancellation, cache identity and UI rebuild/repaint behavior.

First-run and workflow clarity

🎹 v3.0 also tightens several user-facing workflow details:

  • fresh Playground/Morph endpoint states use simple Classic-family sources through Wavetable Type 0 – Input 1 rather than beginning from a complex two-input chaotic patch;
  • the shared pitch control is labelled Root Frequency;
  • Drawn status distinguishes audio routing from use as a Scanning LFO shape;
  • Swap START/END is silent; endpoint Copy actions retain their destination audition behaviour;
  • Explorer uses Import From Morph / Copy To Morph and separates Base Generators from Scanning Generators into independently collapsible groups;
  • Calculator publishing actions are grouped beneath Set Globally…;
  • a standalone Scanning recipe import presents Playground / Morph START / Morph END, with the chosen recipe also registered in the shared session custom-recipe library.

Fractured Wavetable Generator

Start here

🎹 Workspaces

🎹 Build and shape sounds

🎹 Make and keep results

🎹 Scanning and custom trajectories

Help and reference

🔧 Advanced / technical reference

Clone this wiki locally