Docs / Tutorials
Make a wavetable from a sample
Turn a recording into a sweeping wavetable: pick source audio that survives frame slicing, clean it before import, and export a packed WAV that lands in tune.
6-minute read
What sample-to-wavetable conversion actually does
A wavetable is a stack of single-cycle frames. Turning a sample into one means cutting the recording into equal-length blocks and treating each block as one frame, played in order as the wavetable position moves. The sample's timbral evolution becomes position motion — and the recording stops being a recording: you trade exact time detail for a table that sweeps, morphs, and loops like any other wavetable.
Because every frame is the same length, the conversion is only as good as the match between the source and that length. Choose the material and the frame size with each other in mind, and most problems disappear before they start.
Choosing source audio
The best sources are sustained and steady: a held note, a stable drone, a vocal phrase on one pitch, a synth pad with slow motion. Frames cut from a steady source are related to their neighbors, so the position sweep reads as one evolving timbre instead of a slideshow of unrelated waves.
- Sustained, not percussive. Attacks and transients collapse into one or two odd frames sandwiched between steady ones, and the sweep stumbles across them.
- Dry, not reverberant. Reverb bakes the same tail into every frame, so the table sweeps from wash to wash. Record or bounce the dry signal.
- Mono-friendly. Stereo files are mixed down to one mono channel on import, so wide, phase-y material can cancel itself before slicing even starts.
- Steady pitch. Frames sliced from a source whose pitch drifts read as detuned frames, and the sweep wobbles.
- Loud enough to work with. Quiet recordings become quiet frames; normalize first so the table actually uses the -1…+1 range.
What frame slicing does to your file
On import, Hyperwave decodes the audio file, mixes every channel down to one mono stream, and slices it into equal-length frames. The frame count is simple arithmetic: source length divided by frame size, rounded down — a partial frame left over at the end is dropped. Import a longer take and you get more frames, not longer ones.
Frame size is samples per single cycle; frame count is how much motion the table holds. The same sustained note sliced at 2,048 samples gives you many frames of subtle change. Scrub through the frames while you work and you hear the source's evolution as the wavetable's sweep.
Cleaning frames: normalize, trim, then patch
Do the destructive cleaning before import, in any audio editor: normalize the level, trim to the steady section you actually want, and cut silence and lead-in so you are not spending frames on material that all sounds the same.
Once imported, the audio is graph material like anything else — patch nodes to reshape it, scrub frames to check the result, and export when the sweep sounds right. Frame-level hygiene still counts downstream: frames with different DC offsets thump as position crosses them, so keep the table centered on zero.
Export settings
Export writes one packed WAV: mono, 32-bit float (float32) by default — 16-bit WAV is a direct option for hardware targets — with frames end-to-end in wavetable order, every sample clamped to the -1…+1 range. The filename records the shape — name-{samples}x{frames}.wav — so you can read what you handed to a synth at a glance.
Pick the frame size and frame count for the destination, not for the source. The packed-WAV default of 2,048 samples per frame and 256 frames is what the major software destinations expect; when in doubt, start there and read the frame-size tutorial before deviating.
When it goes wrong
Almost every failed sample-to-wavetable conversion is one of four failure modes:
- The table is detuned. The synth slices your file at a different frame size than you built it at, so every cycle plays back at the wrong speed. Export at the frame size the destination expects.
- The table is weak or quiet. The source was quiet, so the frames never used the full range. Normalize the source and re-import.
- The sweep sounds like a wash. The source carried reverb or a long release, and the same tail landed in every frame.
- The table barely moves. The source was too short to give you many frames — accept a short sweep or import a longer take.