Skip to content

Overview of wavetables in Surge

EvilDragon edited this page Jan 11, 2023 · 5 revisions

NEXT IN THIS SERIES: Creating wavetables for Surge


Surge's Wavetable and Window oscillators allow you to play and morph wavetables - collections of singlee cycle waveforms - as an oscillator. They are extensively described in the manual. Wavetables are a big topic, though, and a critical part of Surge's sound, so we have decided to expand on the manual with a collection of expanded documents about wavetables.

The goal of these pages is to be a basic instructional document for use by anyone interested in learning more about wavetables in Surge. It won't go into lots of technical details, but it also assumes you understand the basics of what a wavetable is. If you need a primer on wavetables before getting into this, check these links.

Surge supports wavetables in its own .wt format, or Serum's .wav format. You can place them in the user data folder, or drag and drop them onto the interface. Regardless of the file type, wavetables will show up in your wavetable browser. You will be given an error with some information if a particular wavetable doesn't load correctly for some reason.

If you want to go right into creating wavetables, continue here:
Creating Wavetables For Surge

Contents

How to use wavetables in Surge:

Selecting a wavetable:

  1. Select the Wavetable oscillator.
  2. Click on the wavetable name inside the oscillator display to choose a wavetable.
  3. Morph parameter selects a waveform in the table. This will interpolate (crossfade) between different waveforms in the wavetable.
  4. Alternatively, if you'd like to snap to each individual waveform, hold Control (or Command on Mac).

Loading your own wavetables:

  1. Menu > Data Folders > Open User Data Folder...
  2. Place your wavetables in this folder, then back in Surge Rescan All Data Folders from the same menu as above.
  3. You can also use this menu to set your own custom folder location for wavetables and presets if you wish.

You can also drag and drop:


Window oscillator also uses wavetables, but it functions differently.
Reference the manual if you'd like more information.

Information about wavetable formats:

.wav formats

There has been a large number of formats used by various companies in the past to distribute wavetables. Thankfully, due to the popularity of Serum in the last few years, it's become standard practice for wavetable synths to support .wav files. Metadata encoded in a .wav file gives synths the necessary information to employ them properly as a wavetable. As of Surge 1.6.2, support for various styles of .wav wavetable metadata has been added.

From an average users perspective, this means that you can now load most .wav wavetable formats in Surge by dragging and dropping them onto Surge's GUI, or by placing them in Surge's user data folder!

Supported .wav formats

Surge now supports Serum format Wavetables with clm loop blocks in the wav file, and Native Instruments style cue block info. If you would like more technical information on those formats, these threads on KvR and Surge's GitHub have lots of information.

New srge chunk .wav format

Surge also supports a new srge chunk type which can by added to a .wav file via "add-surge-metadata.py" Python script. You can read about how to use that script here.

The great thing about .wav files with srge chunk...
they support any power-of-2 cycle length for wavetables all the way up to 4096 samples (i.e. 64, 128, 256, 512, 1024, 2048, 4096). This means that you can make crunchy lo-fi (and super small file size) 64 samples per frame wavetables (like the original Surge library and smaller) or super high quality, ultra low aliasing 4096 samples per frame wavetables.

4096 samples per frame is more resolution than even Serum supports. This level of resolution may only have any benefit at the lowest of low notes, but it's still an interesting addition. Lower frame sizes in wavetables will cause harmonic aliasing in Surge. For more information on how the cycle size effects the playback in Surge, check this article.

.wt format

Surge still supports .wt format, as it always has. wt-tool.py is a Python script written by the Surge Synth Team and is available for creating .wt files for use in Surge. It can also give information about any .wt wavetable out there, or "explode" a .wt file into single cycle .wav files from its individual components.

.wt files support the same frame sizes as .wav file wavetables, and can be 16-bit or 32-bit. At this time, wt-tool.py can only work with 16-bit files. The format is documented here. If you'd like to learn more about using wt-tool.py click here..

One-shot .wav file loading

Surge can use its wavetable oscillator to load one-shot samples. This feature has been in Surge previously, but the ability to load .wav files makes it more accessible to the average user.

Keep in mind that Surge is not a "normal" sampler, it's a wavetable engine loading samples.. as such, it's a bit of a quirky oddity. If you expect it to play samples back "perfectly", you may be disappointed. With a little experimentation, fun things are definitely possible.

Some notes on supported .wav types for one-shot playback:

  • .wav file must be mono
  • .wav must not contain loop information
  • file must be either 16-bit or 32-bit
  • the speed and therefore pitch of a sample is determined partially by its sample rate
  • as a musical reference: if you'd like a pitched sample to load in as middle C pitch (MIDI note 60), a 44.1k file should be tuned to the musical note of "F"

NOTE:
16-bit one-shots can experience the same sort of clipping described in the next section!

16-bit vs 32-bit files

Surge supports 16-bit and 32-bit audio files/wavetables. 16-bit can have some audible noise (depending on the contents), but this often won't be an issue and it's always half the file size. If you are interested in optimizing file size, this may be of interest to you.

Because of the way the original Surge code handles 16-bit files, and due to the desire of the Surge Synth Team to remain compatible with the original Surge preset/wavetable libraries, the Wavetable oscillator in Surge will cause 16-bit tables to clip if their amplitude is too high. wt-tool.py currently supports normalization to avoid this when creating .wt files.

If you are creating a 16-bit .wav wavetable and would like to prevent clipping, we suggest normalizing the audio to -6.4 dB. 16-bit files normalized to -6.4 dB play back at more or less the same volume as a 32-bit file normalized to 0 dB.

Surge Synth Team provides another Python tool for normalizing files. You can read about using that script here.

Links for further reading

If you haven't found it yet, here is a Wiki on creating wavetables.

Some links about wavetables in general:
http://synthesizeracademy.com/wavetable-synthesis/ https://www.wikiaudio.org/wavetable-synthesis/