Single Engine
VisualiserBase table
Pitch110 Hz
START Patch
END Patch
Morph / Export
Bulk Random Export
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: —
Calculator
Use this tab to plan morph exports in terms of frequency, sample rate, samples per cycle, total samples, seconds, cycles, tempo, and multisample maps. The Set buttons write into the shared Morph/Bulk pitch and render settings.
Glossary
These definitions describe how this tool uses the terms. Other synths and DAWs may use “frame” or “wavetable” differently.
| Term | Meaning in this tool |
|---|---|
| Sample | One stored audio value in the exported WAV file. At 96 kHz, one second contains 96,000 samples. |
| Sample rate | How many audio samples are written per second in the exported WAV. The Calculator offers the same fixed rate choices as the render tabs. Sample rate affects exported sample count and file size, but it does not force a pitch after another synth imports the WAV. |
| Frequency / Hz | Oscillator pitch during audition and render. Frequency determines how many cycles fit into a second, and therefore how many exported samples represent each cycle at a given sample rate. |
| Cycle | One complete oscillator period at the current frequency. In Cycles render mode, export length is calculated as cycles ÷ frequency. Example: 128 cycles at 64 Hz = 2 seconds; 128 cycles at 128 Hz = 1 second. |
| Samples per cycle | Export sample rate ÷ render frequency. For example, 96,000 Hz ÷ 375 Hz = 256 exported samples per cycle. Higher values make larger files and preserve more rendered cycle detail; lower values make smaller files and preserve less cycle detail. |
| Internal table | The generated oscillator table used by the engine. This version uses a fixed 256-sample internal table before export rendering and interpolation. During WAV export, the oscillator is sampled at the chosen WAV sample rate and render frequency. Low notes produce many exported samples per cycle; high notes produce fewer. Exports below 256 samples per cycle can be useful, but they use fewer exported samples than internal table points, so sharp or chaotic detail can be under-represented. |
| Frame | Planning term for one intended wavetable slot or snapshot. The exported WAV itself is still just ordinary audio samples; it does not store frame markers. |
| Morph frame | An intermediate sound state along START→END. The renderer may calculate many internal states while writing a continuous WAV. |
| Render unit / length | The shared Morph/Bulk length control. It can mean Cycles, Seconds, or Samples, depending on the selected unit. |
| Duration | The actual exported length in seconds. It can be entered directly in Seconds mode, derived as samples ÷ sample rate in Samples mode, or derived as cycles ÷ frequency in Cycles mode. |
| Bit depth | The amplitude resolution 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 samples per cycle first, then calculate frequency as sample rate ÷ samples per cycle. At 96 kHz, 256 samples per cycle gives 375 Hz. As a rule of thumb, 256 samples per cycle is the native internal table match; higher values oversample the rendered/interpolated result and create larger files; lower values create smaller files but preserve less cycle detail.
Notes
Fractured Wavetable Generator is a browser-native wavetable and sound-design tool. It can make single-cycle oscillator material, evolving WAV files, drones, noisy transitions, morphs, and raw source material for further editing in samplers, synths, or DAWs.
Keyboard Shortcuts
ESCcloses the topmost open dialog or import overlay. If no overlay is open, it stops audition audio; during Bulk rendering it leaves the active batch running.- Leaving a tab mutes the current audition so drones do not continue unnoticed behind another workspace.
- Keyboard shortcuts still work while ordinary controls such as buttons, sliders, checkboxes, dropdowns, and numeric fields have focus.
- Keyboard shortcuts are ignored while typing into true text fields, such as filename prefixes, or editable text areas.
- Browser-level shortcuts such as
Ctrl/Cmd+Page Up/Page Downare left to the browser. Space is also left to the browser.
| Context | Shortcut | Action |
|---|---|---|
| Global | ESC | Close top dialog/overlay; otherwise stop audition audio. During Bulk rendering, the batch continues. |
| Playground & Morph | Media Play/Pause | Same action as P, where supported by the browser |
| Playground | P | Play/Pause Playground Drone |
| Morph | S | Play/Pause Drone START |
| Morph | E | Play/Pause Drone END |
| Morph | F | Play/Pause Play Forward Morph |
| Morph | R | Toggle Play Reverse |
| Morph | P | Play/Pause the most recently used Morph sound |
Pitch, visualisers, and shared Morph settings
- Pitch is shared across Playground, Morph, and Bulk.
- The frequency slider covers the normal audio range; typed frequency and note/octave controls can go down to 1 Hz for long-cycle and sub-audio exports.
- MIDI note input, when available, sets the same shared pitch.
- The visualisers are previews of the generated sound path. Base table shows the generated wavetable; the modulation and spectrum views help show how FM, PWM, Ring Mod, filtering, and morphing affect the result.
- In Morph and Bulk, unchecked
Different START/END Wavetable TypesorDifferent START/END FM Pitch Rangemeans START supplies the effective value used for both endpoints. - The disabled END control is ignored for rendering, but its stored value is not overwritten, so it is still available when the option is checked again.
Cycle-stepped transitionis shared by Morph and Bulk. It makes the morph move in per-cycle steps instead of continuously across individual samples.- In the START Phase-Modulates END modes, Moving Values keeps the START source and END carrier travelling through the morph path. Fixed Endpoints holds START as the unfiltered modulation source and END as the audible carrier; neither patch interpolates, so forward and reverse renders are identical. FM supplies movement while other differences between START and END shape the tone. This is generally unsuitable for an evolving wavetable, but can be useful for pads, drones, hits, and other sample material.
- Classic Waveforms is a predictable source family for sine/ramp-triangle/trapezoid/square-pulse material. For exact landmark waves, set Character and Symmetry/Width to centre: Topology 0 gives sine, 2048 gives triangle/saw, 3072 gives the preset trapezoid landmark, and 4095 gives square/pulse. The two rows of waveform preset buttons beneath each patch’s RAM save slots load clean Classic Waveforms recipes, reset source/result windows, modulation, and filters, and route the patch through Wavetable Type Source A. Reset still uses the same global patch defaults as the other engines. Below the triangle/saw landmark, Symmetry/Width skews the whole curved or straight waveform. Above it, Symmetry/Width controls pulse width/falling-edge position while Topology adds clipping, flat holds, and steeper straight edges. Full-cycle Classic waves preserve their raw DC balance until the export DC stage, but source/result windowed Classic waves are DC-centred and peak-normalised after windowing so narrow selected fluctuations do not collapse into an apparent flatline. Across all generators, a source/result window or morph frame that lands on a truly flat region is treated as collapsed rather than being amplified into a constant DC rail. During a render, collapsed frames first try to hold the previous valid table from the same local branch/context; if no local valid table exists, the deterministic safety square is used. Safety substitutions are shown as compact status summaries and recorded in exported JSON as grouped frame ranges rather than repeated per-frame lines.
Bulk random profiles and Classic guardrails
- The Bulk tab uses a full-width export layout. Choose one or more presets; each Bulk iteration uses one checked preset. Settings are locked when the batch starts, so changes made during rendering apply to the next batch while the Current file readout shows the resolved per-file choices.
- Unrestricted uses the full-range general random generator rather than a curated recipe pool. It is still constrained by table safety, blind-random morph exclusions, and any structural requirements imposed by MPC Wavetable Mode. In MPC Mode it starts from broad random source material, then applies frame-safety neutralisation.
- Cycle-coherent random uses a broad but stable source pool, applies wavetable-oriented cycle coherence, and avoids deliberate glitch/noise damage lanes. Random morph modes: Crossfade, Phase-Aligned Crossfade, Phase-Offset Crossfade, and FFT Spectral Morph, with Crossfade/Phase-Aligned/FFT weighted more heavily.
- Classic Waveforms is the upgraded former Core recipe: Classic Waveforms only, one Smooth/Crunchy variant shared by both endpoints, Wavetable Type Source A, and Tap A→A. Input 1 and Input 2 are both fixed to A on START and END. One of pot1/pot2 always makes a large move; the other and pot3 independently make a large, small, or no move. Random morph categories: Wavetable Morph, Warm Wavetable Morph, Softened Morph, FFT Spectral Morph, Full Interpolation, Phase-Aligned Crossfade, and integer Moving START Phase-Modulates END. START-mod-END has one category weight, then chooses 1:1, ±180°, ±360°, ×2, ×3, or ×5.
- Smooth keeps broad Classic generator randomisation. Random morph modes: Crossfade, Phase-Aligned Crossfade, Phase-Offset Crossfade, and FFT Spectral Morph. It also has a low-weight two-source Classic branch using randomized A/B input taps, two-source Wavetable Type groups, and the smoother 40c-derived morph modes: FFT Spectral Morph and Phase-Aligned Crossfade.
- Edge widens beyond Classic with brighter oscillator-shaped engines, stronger Formant/Modal colour, and controlled Splice construction while remaining frame-coherent. Random morph modes: Wavetable Morph, Warm Wavetable Morph, Softened Morph, Saturated Morph, Comb Wavetable Morph, FFT Spectral Morph, Phase-Aligned Crossfade, and Phase-Offset Crossfade. It also has a low-weight two-source Classic branch using randomized A/B input taps, two-source Wavetable Type groups, and integer Moving START Phase-Modulates END variants.
- Glitch & Noise is character-first rather than frame-coherent. It is for broken, unstable, noisy, and digitally damaged material, and may preserve recipe-required FM/Ring modulation because discontinuity, tearing, and unstable phase motion are intended material. Random morph modes are branch-aware, but generally draw from Full Interpolation, Dual-Path Interpolation, and Moving START Phase-Modulates END modes at ±180°, ±360°, ×2, ×3, ×5, ×1/2, ×1/3, and ×1/5. JSON metadata records the merged preset’s FM treatment as
fm_both_active,fm_both_off,fm_start_only, orfm_end_only. - Profile levels use texture-specific FFT anchors when random morph mode chooses FFT: Smooth uses 2/3 anchors and Edge uses 3/5. Glitch & Noise mostly relies on the damage/noise recipe branches and their own morph pools. The Random FFT Anchors checkboxes are used by Unrestricted/Cycle-coherent random batches rather than overriding the profile levels.
Export and browser limits
- Morph and Bulk exports always create a WAV file and a matching JSON sidecar. There is no option to export WAV-only.
- MPC Wavetable Mode creates MPC-style wavetable folders with a matching
format.json. In Bulk export, it requires the cycle-coherent wavetable safety profile so random batches are structured as wavetable frames, not just ordinary audio files in an MPC-compatible folder. Hardware display, sorting, and edge-case naming behaviour may still vary by MPC firmware and should be verified on the target device. - Bulk random export uses the shared pitch and render controls. Bulk settings are snapshotted when the batch starts, so pool-checkbox, naming, render, and sidecar changes made during a long render apply to the next batch rather than mixing identities within one ZIP. Unrestricted is useful for full-range discovery, pads, one-shots, drones, transitions, and resampling; Cycle-coherent, Classic Waveforms, Smooth, and Edge are frame-coherent choices; Glitch & Noise may deliberately break frame coherence.
- In Cycle-coherent Bulk mode, frequency, render length, cycle-stepping, oscillator modulation, filters, and source/result windows may be temporarily adjusted so each wavetable frame is more likely to remain a stable single oscillator cycle. Morph Render Mode remains user-selectable unless per-file random morph modes are enabled.
- Very long browser renders can use a lot of RAM. For unusually long exports, smaller test renders are recommended before committing to a large file.
JSON and audio import
- JSON exports store enough patch information to reconstruct the sound later. Under ordinary use, there is no need to edit them by hand.
- Morph exports can record JSON-import provenance by source export UUID and contribution role. Hand edits keep lineage as template tuning; randomise/reset replacement actions clear the affected patch lineage, while copy, swap, and RAM-slot actions move stored lineage with the patch data.
- Import Patch… reads a previously exported JSON sidecar, asks what should be loaded, then switches to the relevant destination tab. The available choices depend on whether the JSON contains one patch, START/END patches, morph settings, render settings, or MPC layout metadata.
| Import Patch option | What it loads |
|---|---|
| Load START → Playground | Loads the JSON START patch into the Single Engine / Playground tab for individual audition and editing. |
| Load END → Playground | Loads the JSON END patch into the Playground tab when the sidecar contains an END patch. |
| Load START → START | Loads the JSON START patch into the Morph tab’s START slot without replacing END. |
| Load END → END | Loads the JSON END patch into the Morph tab’s END slot without replacing START. |
| Load START + END | Loads both exported endpoints into the Morph tab, then auditions the forward morph. |
| Load START → END | Cross-loads the JSON START patch into the current END slot. This is useful when building a new morph from one exported endpoint. |
| Load END → START | Cross-loads the JSON END patch into the current START slot. |
| Load as Morph Template | Loads START and END patches plus any morph and render/export settings found in the sidecar. Use this to recreate an exported morph, hand-tune the endpoints or parameters, and re-render. |
| Load Morph Settings Only | Keeps the current START/END patches and imports only morph controls such as Morph Render Mode, curve settings, FFT anchor/state settings, and cycle-stepped transition when present. |
| Load Render Settings Only | Keeps the current START/END patches and morph controls, but imports render/export settings such as length/unit, sample rate, bit depth, DC removal, normalisation, headroom, and MPC layout when present. |
| Load Morph + Render Settings Only | Keeps the current START/END patches, but imports both the morph controls and render/export settings from the sidecar. |
- Import Audio… is available from each patch’s Drawn Waveform section. It turns an audio file into that patch’s 256-sample Drawn source table.
- WAV is the main intended source, but MP3 and other audio files may also work when your browser can decode them.
- Longer files are squeezed across the full 256-sample Drawn table. This can capture an overall tone or texture, but it is not meant to preserve a whole rhythm, phrase, or transient sequence.
- Shorter files are stretched across the full 256-sample Drawn table instead of being padded with silence.
- Silent or effectively flat imports are rejected so the previous Drawn waveform is not accidentally destroyed.
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. Any output from this tool is yours to use however you want. The program’s GPL notice applies to the program itself; it does not, by itself, impose GPL licensing on generated outputs.
Developers, patch archivists, and anyone wanting implementation details can use the project repository: https://github.com/atom-smasher/Fractured-Wavetable-Generator/