Skip to content

Troubleshooting

atom edited this page Sep 3, 2026 · 1 revision

Troubleshooting

Start with the symptom. 🎹 marks practical sound/workflow fixes, 🔧 marks technical state or file-format issues, and ⚠️ marks behavior that can look like a bug but may be intentional.

No sound

🎹 Check:

  • browser volume and system output;
  • FWG Volume;
  • whether another tab change muted audition;
  • whether the AudioContext needs a user gesture;
  • whether ESC stopped playback;
  • whether MIDI channel is Off;
  • whether the current table collapsed and triggered safety;
  • browser console and visible error banner.

Press Reset in Playground. The fresh Classic Waveforms / Wavetable Type 0 patch auto-auditions; if needed, set Topology = 0 for a sine and move Root Frequency to a comfortable audible pitch.

A render shorter than one complete cycle at the root frequency may capture only a constant or nearly constant part of the waveform. Whole File DC Removal turns a perfectly constant fragment into digital silence, and Peak Normalisation cannot restore it. This is a valid expert edge case rather than necessarily a DSP failure. Longer renders can also appear flat or silent because of very low frequencies, low filter Cutoff, windows, modulation, attenuation, collapsed states, or other extreme settings. See Render and Export Settings.

A collapsed patch uses either the previous table or a square

⚠️ Both can be expected, depending on how the invalid state was reached.

  • While continuously adjusting an endpoint scalar control, FWG keeps one bounded previous valid table for that endpoint. If the next coordinate collapses, the visualiser/audition can hold that table and reports using previous valid table.
  • Structural replacements — such as changing generator/variant/routing/Wavetable Type, applying a preset or Reset, loading another patch, or replacing the entire Drawn source with Copy/Reset/Clear/Undo/Import — clear that standby first. If the new structure collapses, FWG reports using safety square. Pointer drawing itself remains continuous.
  • During an ongoing Scanning/Morph audition or render, START, END, and Morph keep separate bounded standbys. Invalid-after-valid uses the previous valid table; invalid-before-any-valid uses the safety square.

Neither substitute changes the stored patch. See Loop Safety and Table Safety.

The batch is too restrained

🎹 Open the search up:

  • Smooth → Edge.
  • Edge → Glitch & Noise.
  • use Unrestricted.
  • enable random Morph mode.
  • increase batch size after confirming the setup.

The batch is too broken

🎹 Pull it back:

  • Glitch & Noise → Edge or Smooth.
  • use Classic Waveforms.
  • use Cycle-coherent random.
  • disable random Morph mode.
  • select fewer pools.

Too many files are static

🎹 Check:

  • fixed-endpoint START Phase-Modulates END;
  • identical or near-identical endpoints;
  • Curve Amount concentrating movement outside the heard region;
  • collapsed windows;
  • insufficient render length;
  • destination wavetable Position not being modulated.

A file is close but wrong

🎹 Load the JSON into Morph.

Audition START/END separately, then change one stage at a time:

  • endpoint patch;
  • routing;
  • Morph mode;
  • curve;
  • cycle stepping;
  • cleanup;
  • sample rate.

Explorer did not continue from my keeper

🎹 Explorer Export does not make a result current.

Load the numbered result sidecar, then continue or Copy To Morph.

Explorer recipe restored the old centre

🎹 Expected:

  • recipe = pre-batch source/rules;
  • numbered sidecar = rendered result.

A recipe may be renamed and kept as a personal preset; FWG identifies it from JSON content, not the filename.

Repeated batch differs

🔧 Confirm:

  • same compatible code;
  • same seed;
  • same pools/rules;
  • same current source;
  • same count/direction;
  • same render settings;
  • same Morph/FFT choices.

Successful batches advance the visible seed.

Drawn import changed length/content

🔧 The entire decoded duration is deterministically resampled to 512 internal cycle samples.

Trim/edit the source before import when only one region is desired.

Drawn has seam/DC/silence/spike

⚠️ Drawn does not automatically repair seams, DC, silence, or spikes. If the unwanted feature is in the authored construction or literal table, edit that source first.

Fourier, Haar, and Walsh can deliberately rebuild the completed waveform from selected components, but they are creative transforms, not automatic seam/DC/spike repair. Downstream Window, filter, and export cleanup remain separate tools.

A valid sparse Fourier selector produced silence

🔧 Direct sparse Fourier may physically contain fewer orders than the public 0…256 selector domain. A valid requested order that is unavailable in that particular sparse input contributes zero rather than causing an import error.

haar-clip or walsh-clip sounds identical to the ordinary transform

🎹 That can be completely correct. The -clip sibling differs only when the selected reconstruction overshoots ±1 before Drawn admission. If no overshoot occurs, ordinary and -clip outputs are identical.

Haar changed after I rotated the same waveform

🔧 Expected. Haar uses fixed dyadic boundaries, so moving a feature across half/quarter/eighth/etc. boundaries can redistribute energy between partial Haar bands. Full Haar reconstruction remains exact; partial selection is alignment-sensitive.

normalise:true reported a huge gain

🔧 Final Drawn normalise can apply a very large uniform gain when a meaningful waveform peak is tiny but still above the 1e-9 numerical-dust floor. Values at or below that floor are left alone.

A Drawn component selector was rejected

🔧 Check the public domain for the selected basis: Fourier 0…256, Haar 0…9, Walsh 0…511. Negative terms are singleton coefficient inversions; negative range endpoints are not valid selector syntax.

MPC library is missing

🔧 Check:

  • target firmware/content supports User Wavetables;
  • exact Oscillators/Wavetables/<LibraryFolder>/ path;
  • format.json beside WAV files;
  • no nested folder inside the library;
  • no sidecars/README inside it;
  • WAV was not edited after packaging;
  • output PCM sample count matches manifest geometry.

MPC scan is static

🎹 Move/modulate Position. One held wavetable frame behaves like an ordinary oscillator.

MPC scan is stepped/rough

🎹 Try:

  • increase XFade;
  • slow/reduce Position modulation;
  • choose Smooth/Classic/Cycle-coherent material;
  • inspect whether roughness is deliberate.

Different sample rates sound different

⚠️ Strong FM, Pitch Offset, hard edges, and nonlinear processing can alias.

Direct low-rate rendering is not equivalent to rendering high then converting. Choose by listening in the destination workflow.

Low-frequency-oscillator (LFO) rate filter seems slow or transient-heavy

🎹 Typed Cutoff can reach 0.01 Hz. Very low Cutoff and high Resonance may require many seconds or oscillator cycles to settle, so a short audition or export can be dominated by startup behaviour. Increase the audition/export length and compare with lower Resonance.

The slider and Explorer mini-graph remain clipped to their normal 20 Hz–20 kHz range even when an expert typed value below 20 Hz is active.

Per Cycle cleanup pumps

🎹 Use Whole File or Off.

Per Cycle follows nominal root blocks, not every audible modulated period.

Large export fails

🔧 Reduce:

  • duration;
  • sample rate;
  • bit depth;
  • file count;
  • direction count;
  • MPC geometry;
  • FFT anchors.

Then split the job.

Saved settings reverted or differ between copies

🔧 A downloaded file:// build and the hosted HTTPS build are different browser origins and may have separate saved settings. Confirm which URL is open. Private mode, site-data clearing, browser policy, or moving/renaming a local file may also create a fresh storage context.

FWG prefers valid local storage and uses a bounded cookie only as fallback. A malformed or obsolete cookie should not override a valid current local-storage snapshot.

A .json.gz sidecar will not import

🔧 Use a current Chromium/Brave build with DecompressionStream support. In an ordinary session, compressed input is limited to 1 MiB and decoded JSON to 512 KiB. Render Diagnostics, enabled with the ?render_diagnostics=a URL query parameter, deliberately bypasses those byte-size guards so large FWG support sidecars can be re-imported; schema/content validation still applies. Decompress externally and import ordinary .json if browser gzip support is unavailable.

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