Audio Crafting #4 – Building a wavetable oscillator in Bitwig

I saw many people requesting that Bitwig would get a native wavetable synth.

So here’s just how to do one yourself, and also load wavetables from Komplexer, Serum and other wavetable synths.

(Notice that this was written before the new Sampler with the cycles mode, which pretty much does this internally, so you’ll probably just want to use that! I’ll leave this here since Audio-Term is useful on it’s own right and great for generating wavetables!)

You will need an external tool to generate wavetables if you don’t have any at hand.

Audio-Term is such a tool, and an excellent one at that. It can also convert between formats of various wavetable synthesizers.

You can follow the discussion about developement here:

Download the latest version here.

The interface is very oldschool, the developer told it was written for a 17″ CRT monitor and a lightpen. Don’t let the UI scare you, the tool is actually quite easy to use.

Fire up the executable, and select “KTERM”, this takes you to the waveform resynthesis menu. Select “DISK”, and long mouse press on sample names to preview them. (or select another format if you are about to import the table from another synth).

Notice that Audio-Term can’t browse your computer’s file system, so you will need to place samples by hand in the Audio-Term\data\01 Samples (WAV)\ directory. The sample format seems to be mono only, use 16 bits just to make sure everything works.

Select “LOAD”, to load the sample, and set the region to analyze. Notice you can’t change the region size with the mouse, you need to set the thresholds from the buttons named “-THR_S” etc. Again, long press on “INPUT” to hear the region. Select “ANALYZE” to get to the resynthesis window.

Here you can affect several options, again “INPUT” plays original WAV and “RESYNTH” the output. “APPLY” when happy with the result.

Enjoy the gorgeous retro vector graphics for a while, and select “TEF” (table editing functions) after that.

There’s lots of stuff to try, but let’s just apply a formant shift for now. Select “SHIFT”, and draw some curve with the mouse. Remember, long press on “OUTPUT” previews before you “APPLY” for committing the curve.

If you want to view the individual slices (there’s always 32 of them, and they are allowed to be empty), select “SLICE” from the bottom row menu. Watch the top part of the screen where you are at, and move in the wavetable with th2 “SLC_1>>” etc buttons. Here you can edit partials on each slice by hand.

There’s so much, I won’t go into more now. Let’s move on to creating the wavetable.

Select “DISK” from the bottom menu.

Select “F_TYPE”, and “03” for WAV audio wavetables.

Select “SAVE”, pretend you are in a weird version of Star Trek where this is actually a
good interface, and enter a name for your file with the mouse on the on-screen keyboard. “RET” when you are ready.

Now Audio-Term will create crossfades between the 32 internal slices and write them all to an audio file.

Set “BASE” to “alternate” (check the top part of the screen). This way you can get exactly
256 slices, which I like to use. Also set samples per slice to 1024. A large sample size per slice is desirable since then small rounding errors in the loop length don’t cause so big glitches. Also increasing the number of slices causes smoother scanning with some sounds, but the presets will take  up more space.

Go to Bitwig.

Create a Sampler.

Load the sample you created with Audio-Term.

You will notice that automatically Audio-Term has set the loop region for the first cycle. This does not help us now, so set the loop end marker to the end of the file instead, and let the Loop Start stay at zero.

Now if you play the sample, it will just loop as usual and probably not sound like much. Let’s make it loop only one cycle at any given time. Happily the Sampler in Bitwig uses fractional lengths for the loop. Set Loop Length (different value from Loop End!) to 0,390625. Do this by CTRL+CLICK on the Loop Length knob. Bitwig will use all those decimals even if the UI does not show them! We got that number by dividing 100 by the number of slices, ie 100/256. If you exported a different amount of slices you will need to change this number accordingly.

Now you will again hear only a static looping of the first cycle. On to creating some movement in the sound.

Create a polyphonic LFO, and set it to modulate both Sample Start and Loop Start with a value of +0.95. A value of +1 might result in problems at the end of the sample. If there’s a problem with the start, you might change Sample Start to a value of 1 for example.

That’s all really! You can try out different numbers of slices and samples per slice, but in my opinion these values give the cleanest results. Some crackling is usually inavoidable, but you can try increasing the number of slices and samples per slice to fix that.

Bonus!

For some random glitchy sounds, after everything is set, set the Loop End value (in the Sampler top bar with the text fields) to a lower value thant the length of the file. Something weird will happen, that can sound absolutely fantastic sometimes 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.