Overview
Surge XT is a free, open-source software synth maintained by the Surge Synth Team. Each patch has two scenes, and each scene has its own oscillators, several of which can play wavetables. The Wavetable oscillator sweeps through a table with its Morph parameter, blending neighboring frames as it goes. The Window oscillator reads the same tables differently: it picks a frame without blending and multiplies it by a window shape.
The Surge XT manual describes a wavetable as up to 512 single-cycle frames, each up to 4096 samples long. That’s twice the frame count most synths allow. The Wavetable oscillator steps through each frame’s samples without smoothing between them, in a band-limited way, which the manual compares to 1980s wavetable synths and samplers. The result is harmonic aliasing that fills out the top end even on low notes. It’s a deliberate part of Surge’s sound, and a low-pass filter takes it out if you don’t want it.
Surge XT can’t edit wavetables itself. The manual points to outside tools for making them, and that’s where WaveStack fits.
Wavetables on the Surge XT
Surge’s native format is .wt, a short header followed by the wave data. The header gives the frame size, which must be a power of two from 2 to 4096, the number of frames, from 1 to 512, and whether the data is 16-bit or 32-bit float. Because the file states its own frame size, there’s no guessing.
Surge XT also loads WAVs, but it needs to be told the frame size. The manual lists a Serum clm chunk, a cue chunk or a smpl chunk. A WAV without any of those loads as a one-shot sample rather than a wavetable. Surge’s code adds two details the manual doesn’t mention: it only accepts a clm chunk that says 2048, and it reads its own srge chunk for other sizes. The WAV also has to be 16-bit or 32-bit float.
WaveStack’s Surge XT target writes a native .wt file, keeping the table’s frame size when it’s a power of two up to 4096 and its frame count up to 512. That makes Surge one of the few targets where a table built at 256 or 4096 samples per frame goes across unchanged. The Window oscillator reads the same files, so one export covers both oscillators. A 2D grid or 3D volume is flattened to one row, with a warning in Export.
Factory wavetables live in a shared folder (/Library/Application Support/Surge XT on macOS, C:\ProgramData\Surge XT on Windows). Your own go in the Wavetables folder inside Surge’s user data folder, which is Documents/Surge XT by default. You can also drag a compatible file anywhere onto the Surge window to load it.
Specifications
| Samples per frame | Powers of two, 2–4096 |
|---|---|
| Maximum frames | 512 |
| File types | .wt (native), WAV |
| Frame size detection | .wt header; in WAVs a clm (2048 only), srge, cue or smpl chunk |
| WAV sample formats | 16-bit PCM or 32-bit float |
| Untagged WAVs | Load as one-shot samples |
| User wavetable folder | Documents/Surge XT/Wavetables |
From WaveStack to the Surge XT
- Build or open a table in WaveStack. Surge .wt files import directly, as do Serum-style WAVs, samples and images.
- Press ⌘E and choose Surge XT as what the table is for.
- Under Save to, link
Documents/Surge XT/Wavetables. Export marks the files already there as ready, needs converting or unreadable, and Convert all updates the ones that need it. - Export. WaveStack writes a .wt file at the table’s own frame size.
- In Surge XT, set an oscillator to Wavetable and choose the table from the wavetable selection bar under the oscillator display, or drag the file onto the Surge window.
- Sweep Morph to move through the frames. Hold Ctrl or Command while dragging to snap to exact frames.
Frequently asked questions
How do I import custom wavetables into Surge XT?
Drag a .wt file, or a WAV with frame-size information, anywhere onto the Surge XT window, or put it in the Wavetables folder inside your user data folder (Documents/Surge XT by default) so it shows up in the wavetable selection bar. WaveStack’s Surge XT target writes .wt files, and if you link that Wavetables folder in Export, new tables go straight into it. Surge can’t edit tables itself, so an outside tool is the way to make them.
What frame size does Surge XT use?
It depends on the file. A .wt file states its frame size in the header, and Surge accepts any power of two from 2 to 4096 samples, with up to 512 frames. For WAVs, it reads the size from a srge chunk, or treats a Serum clm chunk as 2048. Unlike most synths, Surge doesn’t resample everything to one fixed size, so WaveStack keeps your table’s frame size when exporting as long as it’s a power of two.
Why does my WAV load as a sample instead of a wavetable in Surge XT?
Surge XT needs loop information to know where frames start. The manual says files without a clm, cue or smpl chunk load as one-shots. Surge’s code is stricter about clm: it only recognizes one that says 2048 samples, so a Serum-style WAV at another frame size is also treated as a sample. Re-export the table from WaveStack with the Surge XT target, which writes a .wt file that carries its frame size in the header.
Can Surge XT use Serum wavetables?
Yes. The manual says Surge XT imports WAVs with Serum’s clm chunk, and that third-party tables tested in Surge have worked. Serum tables use 2048-sample frames, which is the size Surge’s code accepts from a clm chunk. The WAV must be 16-bit or 32-bit float, which Serum’s own exports are. Tables from other tools that use clm with a different size won’t load as wavetables, so convert those with WaveStack first.