Fractured Wavetable Generator v3.0

Browser wavetable generator: compact chaos engines, morph audition, WAV + JSON export.

Single Engine

VisualiserBase table
Pitch110 Hz
Ready.

START Patch

END Patch

Morph / Export

Pitch / MIDIRoot frequency, note, MIDI
Ready.

Bulk Explorer

Bulk Explorer starts from an independent copy of the initial Morph state. Import From Morph or load an exported JSON sidecar to replace that source, including its effective Pitch, Render Format, Transition / Cleanup, MPC Layout, and workspace-local Phase-Coherent Mode settings, then render repeatable local variations from current scalar values, explicit variation amounts, and checklist choices. Explorer Export leaves the current state unchanged. To hand-edit, audition, or ordinarily export a rendered result, load that result’s JSON sidecar and then use Copy To Morph.

The orange dot and underlined name mark Explorer’s current concrete value. Copy To Morph sends current values; checked variation pools are used only when Explorer renders files. Rendering does not replace the current state. Current and rendered values are recorded separately in Explorer JSON sidecars.

Explorer initialised from the initial Morph state.
Fit draws uniformly inside the allowed result range. Clip draws an offset first, then clips at the floor/ceiling, which can be used intentionally to pile up values at the minimum or maximum.
Current file: –
Ready.

Explorer START

Explorer END

Explorer Morph / Export

Morph VariationMode, FFT anchors, curve
Pitch / MIDIRoot frequency, note, MIDI
Transition / CleanupCycle stepping, DC, normalisation, headroom
Render / File SettingsNaming, directions, format, MPC, download

Bulk Random

Bulk export runs random iterations. Each iteration creates a random START/END pair, then renders the selected direction(s). Preset guidance and guardrails are in the Notes tab.

Current file: –
Ready.
Morph / Sound DesignMorph mode, FFT, START/END, curve, directions
Pitch / MIDIRoot frequency, note, MIDI
Transition / CleanupCycle stepping, DC, normalisation, headroom
Render / File SettingsNaming, format, MPC, download

Calculators

Use these calculators to plan morph exports in terms of Root Frequency, WAV output sample rate, output PCM samples per nominal root cycle, total output PCM samples, seconds, nominal root cycles, tempo, multisample maps, Pitch Offset, and Nominal Frequency. The Set buttons write into the persistent global Pitch / MIDI and Render Format defaults; synced workspaces follow those values. The Pitch Offset & Nominal Frequency calculator is arithmetic-only and does not publish settings.

Glossary

These definitions describe how this tool uses the terms. Other synths and DAWs may use “frame” or “wavetable” differently.

TermMeaning in this tool
SampleIn this export context, one output PCM sample: one stored amplitude value in the mono WAV. At a 96 kHz WAV output sample rate, one second contains 96,000 output PCM samples.
Sample RateHow many output PCM samples are written per second in the exported WAV. The Calculators tab offers the same fixed rate choices as the render tabs. WAV output sample rate affects output PCM sample count and file size, but it does not force a pitch after another synth imports the WAV.
Frequency / HzFrequency is the number of cycles per second; hertz (Hz) is its unit. FWG distinguishes the shared Root Frequency from a patch's Pitch-Offset-adjusted Nominal Frequency. Filter Cutoff morphs logarithmically by frequency ratio rather than linearly in Hz.
Root FrequencyThe shared base oscillator frequency used for audition and render planning. It determines root-cycle duration, Cycles render length, Cycle-stepped boundaries, and Per Cycle cleanup blocks even when Pitch Offset changes the oscillator's Nominal Frequency.
Pitch OffsetA static per-patch frequency offset measured in cents. Positive values raise and negative values lower the patch oscillator relative to Root Frequency; 1200 cents equals one octave.
Nominal FrequencyThe oscillator frequency after applying the patch's static Pitch Offset to Root Frequency, before FM or other time-varying modulation. Root Frequency remains the basis for root-cycle render and cleanup geometry.
CycleIn render-planning contexts, one nominal root cycle at Root Frequency. An audible oscillator period can differ after Pitch Offset or modulation. In Cycles render mode, export length is nominal root cycles ÷ Root Frequency.
Samples per CycleWAV output sample rate ÷ Root Frequency. For example, 96,000 Hz ÷ 187.5 Hz = 512 output PCM samples per nominal root cycle. Higher values make larger files and preserve more rendered cycle detail; lower values make smaller files and preserve less cycle detail.
Internal TableThe generated oscillator table used by the engine. This version stores 512 internal cycle samples before export rendering and interpolation. During WAV export, the oscillator is sampled at the chosen WAV output sample rate and Root Frequency. Low Root Frequencies produce more output PCM samples per nominal root cycle; high Root Frequencies produce fewer. Outputs below 512 PCM samples per nominal root cycle can be useful, but they use fewer output points than the internal cycle point count, so sharp or chaotic detail can be under-represented.
Wavetable FrameOne intended destination wavetable slot or waveform snapshot. The ordinary exported WAV is still linear PCM and does not inherently store wavetable-frame markers.
Morph Construction StateAn intermediate sound state along START→END. It is an internal construction state, not necessarily a destination wavetable frame.
Render Unit / LengthThe Render Format length control used by Morph, Bulk Random, and Explorer. It can mean Cycles, Seconds, or Samples. A workspace follows the persistent global value while synced and uses its own session-local value while detached.
DurationThe actual exported length in seconds. It can be entered directly in Seconds mode and quantised to whole output samples, derived as samples ÷ sample rate in Samples mode, or derived as cycles ÷ frequency in Cycles mode.
Bit DepthThe amplitude precision of the WAV file. It affects quantisation/noise floor and file size, but not pitch or render duration.

Rule of Thumb

For sample-exact wavetable planning, choose the target output PCM samples per nominal root cycle first, then calculate Root Frequency as WAV output sample rate ÷ output PCM samples per nominal root cycle. At 96 kHz, 512 output PCM samples per nominal root cycle gives 187.5 Hz. A count of 512 happens to match the v3 internal-cycle point count numerically; higher output counts oversample the rendered/interpolated result and create larger files, while lower output counts preserve less rendered cycle detail.

Notes

Fractured Wavetable Generator is a browser-native wavetable and sound-design tool. These built-in notes cover the controls and behaviours most useful while the application is open. The project wiki contains the full manual, technical reference, compatibility details, and developer history.

Keyboard shortcuts

  • ESC closes the topmost dialog or import overlay first. Otherwise, on the active Bulk or Explorer tab during a render it cancels that batch; from another FWG tab it stops audition audio without cancelling the batch. With no active batch it is the ordinary panic/stop action.
  • Leaving an FWG workspace mutes the current audition so drones do not continue unnoticed behind another workspace.
  • Transport shortcuts remain active while ordinary controls and numeric fields have focus. True text-entry fields keep their normal typing behaviour.
  • Ctrl/Cmd + Page Up/Page Down is left to the browser for browser-tab navigation; committing a focused FWG control during that shortcut does not auto-start audition audio.
  • Numeric fields: / changes by ±1 field unit; Shift + arrow changes by ±10, preserving any fractional part and clamping to the field bounds.
ContextShortcutAction
GlobalESCClose top dialog/overlay; otherwise stop audio or cancel the active batch on its own tab
PlaygroundPPlay/Pause Playground Drone
MorphSPlay/Pause Drone START
MorphEPlay/Pause Drone END
MorphFPlay/Pause Forward Morph
MorphRToggle Reverse Morph
MorphPPlay/Pause the most recently used Morph sound
Morph & Explorer1 / 2 / 3Toggle START / END / MORPH & EXPORT column when focus is not in an editable control

Workspaces, persistence, Phase-Coherent Mode, and MPC

  • Morph, Bulk Random, and Bulk Explorer own independent sound-design/render settings. Cross-tab copy/import actions change the destination deliberately; ordinary edits in one workspace do not silently change the others.
  • Phase-Coherent Mode is local to Morph, Bulk, or Explorer and persists between browser sessions for that workspace. A fresh workspace defaults Off.
  • Enabling or applying MPC Wavetable Mode turns Phase-Coherent Mode On in that workspace. Turning MPC Mode off does not turn Phase-Coherent Mode off again; it remains an independently editable persistent setting.
  • Phase-Coherent Mode is best effort. FWG registers the completed constructed wavetable to a stable phase reference where a reliable continuation exists. Difficult or ambiguous material may retain an earlier valid orientation. Downstream Morph, FM/PWM/Ring, filtering, and other processing may intentionally change the apparent seam afterward.
  • In Morph, Coherent Preview is a session-only quick fresh-state registered view/audition of the current constructed wavetable. It is dormant outside Morph, does not affect Playground or Bulk/Explorer Phase-Coherent settings, and does not replay a complete path-dependent render history; it is therefore not a promise of the orientation a later deterministic render will choose.

Scanning recipes, Drawn, and visualisers

  • A Scanning generator is a declarative path through one ordinary base generator. A standalone Scanning recipe stores its name, base generator, and Pot 1/2/3 paths; it is independent of Smooth/Crunchy and does not contain Drawn waveform data.
  • Imported custom Scanning recipes live only for the current page session. Reloading clears them. Exact duplicate recipes are listed once; same-name/different recipes are numbered as (Custom 1), (Custom 2), and so on; different names may describe the same trajectory.
  • Recipe collections and concatenated complete recipe JSON documents can be imported together. Custom recipes become available to Playground, Morph START, Morph END, and Explorer. Full Morph/Explorer JSON embeds any custom recipe definitions it needs so exported work remains self-contained.
  • Drawn is the patch's editable 512-internal-cycle-sample waveform. It can be drawn by hand, populated from browser-decodable audio, or imported from standalone Drawn JSON; Export Drawn writes the current table as editable .json.gz. Schema 13 accepts literal Drawn tables and sparse mathematical constructions. Parameterised steps=N accepts any finite value from −1 through +1: zero is exact held Steps, ±1 is wrapped linear, and nonzero values use the complementary wrapped signed-Power curves. Other sparse modes include linear, pow, pow-symmetric, superellipse, cardinal/cardinal-limit/cardinal-clip, and fourier/fourier-clip, with wrap where applicable. Imported authored amplitudes and completed Drawn state are bounded to ±1. Exactly 512 authored values remain literal for ordinary/local modes; fourier/fourier-clip deliberately analyse exact-512 numeric input as global transforms. Fourier selectors address the 257 unique orders of a 512-sample real waveform: DC 0, harmonics 1…255, and Nyquist 256. The shared selector language uses N for exactly component N, -N for exactly component N with inverted coefficient polarity (a 180° phase reversal for Fourier), :B for 0 through B, A: for A upward, A:B for an inclusive range, and comma for unions; negative terms are singleton inversions only. Direct sparse Fourier may contain fewer actual orders, but a valid requested order through 256 that is unavailable simply contributes zero. Schema 13 may also add one optional transform string: stage 1 first becomes the ordinary bounded 512-sample Float32 Drawn waveform, then stage 2 analyses exactly that complete waveform. Fourier/Fourier-clip remain available here and as normal resample_mode choices for direct sparse Fourier construction. haar/haar-clip are transform-only: band 0 is mean/DC and bands 1–9 run coarsest→finest detail. Haar uses the same selectors, so haar=3 selects only band 3, haar=-3 selects only band 3 inverted, haar=:3 selects bands 0–3, and haar=3: selects bands 3–9. Haar's dyadic basis is alignment-sensitive: moving the same completed waveform around the cycle can redistribute energy between bands when features cross fixed half/quarter/eighth/etc. boundaries; unlike Fourier shift behavior, this is more than a change of coefficient phase. Haar does not secretly rotate or phase-align its input. walsh/walsh-clip are likewise transform-only and use all 512 real Walsh-Hadamard basis components in sequency order 0…511; sequency N means N sign changes between adjacent samples across the 512-point interval; the loop seam is not counted as an additional change. The same selector grammar applies, including negative singleton inversion. Walsh is global across the cycle but uses rectangular ±1 basis functions rather than Fourier's sinusoids or Haar's localized dyadic detail functions. Fourier, Haar, and Walsh are the v3 Drawn transform collection. Optional normalise:true is independent of transform and applies once to the final Drawn waveform: one uniform gain around zero raises a meaningful sub-full-scale peak to one rail while preserving DC and waveform proportions; it does not stretch both polarities separately. Morph/Explorer/result JSON preserves custom Drawn state, and Explorer START/END can copy Drawn snapshots from Playground or Morph. See the Drawn wiki for formulas, parameter domains, topology rules, and worked examples.
  • Current schema-13 imports are strict about Drawn dependencies: if the effective route or a Scanning wrapper uses Drawn, the JSON must supply a valid drawn_waveform. Missing or malformed authoritative data fails visibly rather than silently becoming the default sine.
  • Mathematical Drawn construction and Table Safety are separate contracts. An unusual finite recipe may be a valid materialized Drawn waveform or useful Scanning contour yet still be replaced for direct audible table use if the completed table is structurally flat, impulse-like, rail-like, or otherwise invalid under the existing Table-Safety rules. Mathematical-mode legality does not bypass Table Safety.
  • Visualisers are previews. Collapsed visualisers avoid unnecessary painting; reopening one repaints the current state. Animated previews may visually strobe when waveform motion is faster than the selected Animation FPS.

Randomisation and Explorer

  • Playground, Morph, Bulk Random, and Explorer use deterministic named SHA-256 draws where seeded randomisation applies. The same domain, seed, planner version, and inputs reproduce the same addressed decisions; different randomisation domains remain independent.
  • Bulk Random searches broadly using its selected preset/profile. Bulk Explorer instead starts from explicit current START/END/Morph state and varies only the ranges and checkbox pools you allow.
  • Explorer's current values and its allowed variation pools are separate concepts. Loading a numbered Explorer result makes that result current; loading an Explorer recipe restores the source/rules captured for that batch.
  • Custom Scanning recipes are available as individual Explorer generator choices but importing a recipe does not automatically add it to Explorer's random variation pool.

JSON.GZ, import, and compatibility

  • Current FWG exports use JSON schema 13. The supported public compatibility boundary is schema 12 from v2.9c plus current schema 13.
  • JSON sidecars export as deterministic .json.gz by default. They contain ordinary UTF-8 JSON wrapped in gzip. Plain .json remains importable, and gzip is recognised by content rather than filename alone.
  • Drawn uses one saved waveform authority at a time. While a numeric construction pipeline remains pristine, full sidecars save that authored construction; schema 13 may also retain one optional whole-waveform transform stage and/or final normalise:true gate. FWG materializes stage 1 to the current bounded 512-internal-cycle-sample Float32 table before applying an optional transform, then normalises only the final waveform when requested. Numeric data[] semantics come from data length, resample_mode, and topology; an optional numeric-array format property is ignored like any unrelated extra metadata. After Drawn is edited or otherwise flattened, the literal Float32 numeric table becomes the saved authority; an exact canonical sine with no retained construction may use default_sine_v1. Standalone Export Drawn always writes literal editable points. Historical supported Drawn records remain importable through the documented compatibility paths.
  • Public v2.9c 0–256 window coordinates migrate to the current inclusive 1–512 controls. Historical JSON that predates Phase-Coherent Mode imports that setting as Off; current schema-13 JSON restores its explicit value.
  • FWG JSON is designed primarily for reconstruction and troubleshooting, not as a claim that every historical implementation detail is emulated forever. Imported source/version information is shown when compatibility translation is relevant.

Browser requirements and limits

  • The primary target is a current desktop Brave/Chromium-family browser. Web Audio is required for auditioning; Web MIDI and decoding of non-WAV audio depend on browser support.
  • FWG blocks renders above 24,000,000 samples or above its conservative 768 MiB projected working-memory limit. Browser/OS suspension can still pause work even when FWG's own limits are satisfied.
  • Ordinary JSON import is limited to 512 KiB after decompression; compressed input also has a 1 MiB compressed-file guard. These limits are intentionally bypassed when Render Diagnostics is enabled because diagnostic sidecars can be much larger.
  • MPC Wavetable Mode validates its own frame/layout requirements. Keep format.json with the wavetable WAV files; FWG JSON sidecars belong outside the MPC wavetable library folder.

Render Diagnostics and support

  • Launch FWG with ?render_diagnostics=a to add FWG-render-diagnostics-v1 troubleshooting data to exported JSON and show the diagnostics banner. Diagnostics are observational: they do not change audio, DSP, or random decisions.
  • Diagnostic JSON can be large, so the normal JSON import byte-size limits are disabled while diagnostics mode is active. Schema and content validation still apply.
  • For a GitHub support report, include the FWG version, browser/platform, steps to reproduce, and—where useful—a diagnostic JSON sidecar. The wiki explains how to remove optional runtime/provenance fields manually with jq before sharing a sidecar.

License and provenance

License: This browser implementation is free software under the GNU General Public License version 2 only (GPL-2.0-only). It comes with no warranty.

Provenance: This browser implementation is inspired by Carl Hudson's Fractal Wavetable Generator concept. Carl Hudson's original C implementation is separately copyrighted and is not relicensed here.

Outputs: Audio, WAV, and JSON files generated by this tool are user-created sound-design outputs. FWG claims no ownership of those outputs. The program's GPL notice applies to the program itself; it does not, by itself, impose GPL licensing on generated outputs. Separate rights or obligations may apply to imported, user-supplied, deliberately incorporated, or later-added material.

Full manual, compatibility notes, troubleshooting, developer documentation, and project history: FWG Wiki. Source repository: Fractured-Wavetable-Generator.