3.3 - Wavetable Manipulation Guide

Official support for: bitwig.com
RELATED
PRODUCTS

Post

So, we have a dedicated wavetable module! At first glance it looks a little rudimentary, but by applying Bitwig's clever phase tools we can actually reproduce nearly all of the warp modes in Serum - and we're not restricted to just one at a time.

If you want a full explanation of how phasors/oscillators work in Bitwig from the ground up, I've written a more comprehensive explanation of phasors in the Grid a little further down the thread which might help viewtopic.php?p=7914320#p7914320. This is just a quick guide to get people mangling wavetables immediately.

The first step is to stop your Wavetable module running on its own - to do so, we set the numerator to 0. You should see the pitch elements grey out - this means we can drive the wavetable ourselves.

Next, add a Phasor module and connect it to the Phase input of the Wavetable module, then set phase modulation to 100%. This will be the device which gives us our pitch, and drives the Wavetable for us. If you haven't used it before, it's basically just the 'pitch section' of the full oscillators, but separated out on its own. The advantage of doing things this way is that we can manipulate our phase signal before it reaches the actual waveform generation/lookup stage, allowing for some serious sound mangling.

So far, your patch should look like this:

Image

Next step is to add some phase manipulation between the Phasor and the Wavetable module. Here's a quick gif run through how some of them work:

Image

⌀ Shift allows us to choose the starting phase of the current wavetable (make sure you have retrigger enabled on both the Phasor and the Wavetable module for this to work properly).
⌀ Bend is similar to Serum's Asym +-.
⌀ Formant is effectively pulse width modulation, except unlike Serum's it's bipolar (which can get a bit noisy...)
I'm not sure ⌀ Skew has a Serum equivalent, but it's basically a vertical warping of the waveform.
⌀ Sync emulates what would happen if you synced your Wavetable oscillator to another oscillator running at a higher pitch (up to 48 semitones allowed by the module)
Currently I don't think you can emulate Serum's Bend+- mode (without a really messy chain of modules and some careful modulation), but I've put in a request for a symmetrical phase bend module (i.e. bends a phase signal around 0.5) which would let us do that too. If someone can think of a simple way to do that with the existing modules, please let me know :)

Now what about phase modulation? This is actually trivial to implement in the phase domain - just add whatever signal you want to use as the PM source to your phase signal using the Math -> Add module (or Sum, if you want to do phase modulation with more than one oscillator...):

Image

Now, the huge advantage we have over e.g. Serum is that we're in the modular domain here, so there's no restriction on how many of these processes we apply in one go. You could apply bending, skewing, then phase modulation from two other wavetable oscillators if you like! Changing the order of the processing can have dramatic effects on the resulting sound too, when you're applying more than one manipulation to the phase signal. All the demonstrations above were just using a sine wave for clarity, but obviously all of this works with whatever wavetable/waveform you want to use.

Also just to clarify - you can do all this stuff with the other Bitwig oscillators too (except the Sampler... yep that's a request if you're reading this Bitwig :lol:). Once you dive into the Phase realm there's no going back - it's a lot of sound design potential at your fingertips.
Last edited by Hez on Fri Oct 16, 2020 11:49 am, edited 3 times in total.

Post

Screenshot 2020-10-15 at 17.38.39.png

Seriously, thanks a lot for this guide! After I've popped downstairs for some supper, I shall study this carefully ;-)
You do not have the required permissions to view the files attached to this post.
Bitwig 5.2 beta 1 + Akai MIDIMix + Launchpad X + Presonus Studio One Pro 6.6
Roli Lumi Keyboard x 2 + Universal Audio Apollo Twin X
Mac Mini M1 16GB/4TB + macOS 14.4.1 Sonoma

Post

Also, some of those Phase modules now have a stereo option (in the inspector) which can be used to offset the left right channels.

Post

Love it. If you want to manipulate the phases independently in stereo (and the stereoize function isn't quite what you want), use the stereo merge tool:
WavetableStereoMerge.png
You do not have the required permissions to view the files attached to this post.

Post

Really good info. Nice one.

Post

wave phase 2.jpg
i came close, without RTFM, first patch in poly grid.. with the info provided, the another thread.. by Hez... in 5 minutes. but still.... phase modules... are new to me, i also sayed the same in another thread, i am double posting in threads.. nice those phase modules, never encountered them, or was i blind?

EDIT: with numerator on, it works also, diffently of course, i know the symbol from reaktor, is it called really numerator in poly grid??

strange in a new modular, you almost feel lost. (and i have 3 i use very often..) it is me, of course...

(no images in the first post, by the way).
You do not have the required permissions to view the files attached to this post.
Last edited by WasteLand on Thu Oct 15, 2020 7:36 pm, edited 1 time in total.

Post

Hez wrote: Thu Oct 15, 2020 4:28 pm So, we have a dedicated wavetable module! At first glance it looks a little rudimentary, but by applying Bitwig's clever phase tools we can actually reproduce nearly all of the warp modes in Serum - and we're not restricted to just one at a time.

The first step is to stop your Wavetable module running on its own - to do so, we set the numerator to 0. You should see the pitch elements grey out - this means we can drive the wavetable ourselves.

Next, add a Phasor module and connect it to the Phase input of the Wavetable module, then set phase modulation to 100%. This will be the device which gives us our pitch, and drives the Wavetable for us. If you haven't used it before, it's basically just the 'pitch section' of the full oscillators, but separated out on its own. The advantage of doing things this way is that we can manipulate our phase signal before it reaches the actual waveform generation/lookup stage, allowing for some serious sound mangling.

So far, your patch should look like this:

Image

Next step is to add some phase manipulation between the Phasor and the Wavetable module. Here's a quick gif run through how some of them work:

Image

⌀ Shift allows us to choose the starting phase of the current wavetable (make sure you have retrigger enabled on both the Phasor and the Wavetable module for this to work properly).
⌀ Bend is similar to Serum's Asym +-.
⌀ Formant is effectively pulse width modulation, except unlike Serum's it's bipolar (which can get a bit noisy...)
I'm not sure ⌀ Skew has a Serum equivalent, but it's basically a vertical warping of the waveform.
⌀ Sync emulates what would happen if you synced your Wavetable oscillator to another oscillator running at a higher pitch (up to 48 semitones allowed by the module)
Currently I don't think you can emulate Serum's Bend+- mode (without a really messy chain of modules and some careful modulation), but I've put in a request for a symmetrical phase bend module (i.e. bends a phase signal around 0.5) which would let us do that too. If someone can think of a simple way to do that with the existing modules, please let me know :)

Now what about phase modulation? This is actually trivial to implement in the phase domain - just add whatever signal you want to use as the PM source to your phase signal using the Math -> Add module (or Sum, if you want to do phase modulation with more than one oscillator...):

Image

Now, the huge advantage we have over e.g. Serum is that we're in the modular domain here, so there's no restriction on how many of these processes we apply in one go. You could apply bending, skewing, then phase modulation from two other wavetable oscillators if you like! Changing the order of the processing can have dramatic effects on the resulting sound too, when you're applying more than one manipulation to the phase signal. All the demonstrations above were just using a sine wave for clarity, but obviously all of this works with whatever wavetable/waveform you want to use.

Also just to clarify - you can do all this stuff with the other Bitwig oscillators too (except the Sampler... yep that's a request if you're reading this Bitwig :lol:). Once you dive into the Phase realm there's no going back - it's a lot of sound design potential at your fingertips.

At some point later I'll add an explanation of how we can use a slower Phasor (say, the Transport module) to deploy the Wavetable module as a complex LFO/rudimentary MSEG, but that's enough for now!
here are the images:

or the links:

https://www.dropbox.com/s/hwwngqpmt50ww2l/wt1.PNG?raw=1

https://www.dropbox.com/s/4d9nnafnpwjdefs/wt2.gif?raw=1

]https://www.dropbox.com/s/4d9nnafnpwjdefs/wt2.gif?raw=1

thanks by the way, your description in another thread, was enough to make it on my own...

still i am confused, or not confused, by the phase modules. confused, never used them, because see them here first. how could i miss this in other modulars, building them myself, it always the focus you have, i learn, and broaden my skills, but still, i learn new techniques, but still..

but it is nice to discover something new, in bitwig! so pleasure is back again (had problems with bitwig, now solved, but took weeks...).

Post

WasteLand wrote: Thu Oct 15, 2020 7:09 pm (no images in the first post, by the way).
Congrats on your first experiments with phase! Bitwig is a little different to other modulars that I've used in how much it exposes phase to the user - normally this sort of calculation is done 'in the background' for modern digital oscillators, but it's actually how a lot of them work in reality, particularly wavetable synths. The fact that Bitwig also uses phase for its sequencer is also very unique, and in my opinion adds a nice harmony between rhythm and timbre. I'll write a little follow up post attempting to explain how this works in a slightly simpler way.

Ah that's annoying re: the pictures/GIFs - are they working for anyone else? I thought you could embed images hosted on Dropbox but perhaps I'm wrong.

Post

Hez wrote: Fri Oct 16, 2020 9:21 am
WasteLand wrote: Thu Oct 15, 2020 7:09 pm (no images in the first post, by the way).
Congrats on your first experiments with phase!

Ah that's annoying re: the pictures/GIFs - are they working for anyone else? I thought you could embed images hosted on Dropbox but perhaps I'm wrong.
thanks i have learned in a few hours more about bitwig, then in the last months.. but i was busy with a lot of stuff...
great tip, this phasor, that is simply a saw, that is from 0 to +5 volt... yes i get that...
the phase modules, are a discovery, making wavetable patches in poly grid, MPE, with modulation, quite simple, but pleasure.

EDIT: i know understand how the phase modules work, pretty neat stuff. i like to know what i am using, understand it.. simple in a way, but very effective.

i have blockers, but dropbox i think works differently, so it is not a direct link to an image. but i can be wrong.

you have brought the joy back to work with bitwig (had some technical problems with only bitwig... seems now resolved... but still bitwig related... or resolved, i hope it is..).

Post

Ok here's my attempt to explain in basic terms how the Phasor works and how it integrates into the Grid in a wider sense, for people who aren't too sure what's going on! If you are sure what's going on, ignore this as it's quite a wall of text...

As an analogy, imagine the Phasor as a set of instructions for reading a book. By default, the instructions say "read the book in the order it is written, at a constant speed, and once you get to the end start again from the beginning". In mathematical terms, this is represented as a signal that rises linearly from 0 to 1 over some period of time, then returns immediately to 0; in other words a unipolar saw wave. You can easily see this by patching a Phasor into an oscilloscope in the Grid. Once you get to the end of the book, you start back over at the start, and continue reading it in a loop for as long as the Phasor is running.

Audio Rate

In the context of audio rate phasors (e.g. the Phasor module that tracks the note you play into the grid), the speed at which you read the whole book, start to finish, is pitch. If you read a book 440 times a second (440Hz), you're reading that book at the pitch of A4. 880 times a second (880Hz) would be A5, an octave higher.

Now, the Phasor tells us what order to read the book in, and how fast to read it (pitch), but it doesn't tell us which book to read! Let's imagine that our oscillators are our books. This demonstration is simplest using one of the oscillator tables in the Data section in the Grid, as they don't have their own internal phasor which we need to switch off (like the Wavetable oscillator does):

Image

As you can see - for every cycle of the Phasor (every individual ramp), we read the sine wave from start to finish. The oscillator translates our unipolar phasor (reading instructions) into a bipolar waveform - a sound. Changing the oscillator (or reading a different book) translates the phasor into a different output waveform - we're still reading at the same speed, so the pitch is the same, but the timbre of the resulting sound is different. As long as we use the clean regular Phasor, we get an exact translation of the book - i.e. we see the exact waveform represented by the oscillator.

So how do the phase manipulation modules affect all this? They're basically instructions for how to read the book in a slightly different way, therefore warping the waveform contained in the book. The bend module, for example, allows us to start reading the book more slowly and gradually speed up, or do the opposite:

Image

Reading the oscillators in a different way will produce a different sounding result. Most phase manipulation (Skew, Bend, Formant for example) doesn't affect the perceived pitch, because we still restart the book the same number of times per second (i.e. the pitch is the same), it just affects the sound of the book, the timbre.

Shift is very handy - it says "instead of reading the book from the start each time, start at a different position" - this is identical to the start phase control you see on oscillators in a lot of synths.

Some of the other ones do change the perceived pitch, because they make the instructions more complicated - Sync (e.g. read the book 3.5x as fast as the phasor is telling you to read it, but make sure you restart every time the phasor restarts!) and Sinemod (read the book at a continuously changing speed, faster, slower, faster, slower... maybe even read it backwards from time to time) for example - but these are a little difficult for now.

Going back to the Wavetable oscillator... the reason we have to set the numerator to 0 to play around like this is because it actually contains its own phasor. So do the other oscillators in the Oscillator section. Actually, most modern digital oscillators are coded in this way - they use a unipolar rising sawtooth to scan a table of values - changing the values in the table produces a different resulting waveform, changing the rate at which you read the table changes the pitch. Luckily Bitwig lets us bypass this internal phasor and run it ourself, which gives us all these great ways to modify the 'translation' process and create different timbres. Setting the numerator to 0 tells the internal phasor to run at a rate of 0 times the default pitch being sent to the oscillator - in other words, don't run at all.

Sub-audio/Modulation/Rhythm Rate

What if, instead of running a Phasor at audio rate (say 440 times a second), we ran one much slower, say 0.5 times a second...

I'm sure some of you have used the Clock/Transport modules to drive your sequencers, and noticed that things look rather similar... in fact these modules are almost identical to the pitch Phasor, they're just much much slower. Clock allows us to produced a slow signal unsynced to our project, whilst Transport generates similar speed phase signals but synced to our tempo.

And what if, instead of using an oscillator as a book, we used a sequencer:

Image

Same process, different speed, different book = radically different musical purpose! Now we're generating rhythm (or perhaps modulation...), instead of timbre, but we're doing it via an almost identical process. Instead of a book containing a waveform, we're reading a book containing a set of instructions for when something should happen in relationship to something else - the rate at which we read it tells us how fast we should produce these events.

This being the world of modular, there's absolutely nothing stopping us from reading a trigger sequencer book at audio rate (producing a glitchy pulse/square wave-esque result), or reading a waveform book at below-audio rates, producing what we commonly think of as an LFO!

To illustrate this further, here's a wavetable module that I put some shapes in which are more like a sequence than a waveform - although really there's no difference. I'm scanning the wavetable much lower than audio rate (0.5Hz), so it's producing a rhythmic sequence/LFO:

Image

(ignore the occasional squiggly lines at the start/end - they're just artifacts from me switching index on the wavetable to show different shapes)

Once you get your head around these concepts, modular becomes a very interesting world. There's no reason you can't repurpose a 'sound' object (e.g. a wavetable) as a modulation or rhythmic device. Or you can turn your LFO (a 'modulation' object) into an audio object by running it very quickly! The dividing line between pitch/timbre/sound and rhythm/modulation becomes blurred, and this (for me) is one of the true joys of modular.
Last edited by Hez on Fri Oct 16, 2020 11:17 am, edited 8 times in total.

Post

Currently I don't think you can emulate Serum's Bend+- mode (without a really messy chain of modules and some careful modulation), but I've put in a request for a symmetrical phase bend module (i.e. bends a phase signal around 0.5) which would let us do that too. If someone can think of a simple way to do that with the existing modules, please let me know :)
Would the Phase Plant approach to this problem work?

https://www.youtube.com/watch?v=-WlPL9VkB40

Post

@Hez
Great explanation
Thank you

Post

shaboogen wrote: Fri Oct 16, 2020 10:13 am
Currently I don't think you can emulate Serum's Bend+- mode (without a really messy chain of modules and some careful modulation), but I've put in a request for a symmetrical phase bend module (i.e. bends a phase signal around 0.5) which would let us do that too. If someone can think of a simple way to do that with the existing modules, please let me know :)
Would the Phase Plant approach to this problem work?

https://www.youtube.com/watch?v=-WlPL9VkB40
Looks like it should work! I don't have PhasePlant though unfortunately - if you can share those Modulation wavetables I could have a go.

Post

I'll look into it.

This is great work you've put together mate, well done.

Post

Hez wrote: Thu Oct 15, 2020 4:28 pm Also just to clarify - you can do all this stuff with the other Bitwig oscillators too (except the Sampler... yep that's a request if you're reading this Bitwig :lol:).
You can do it with the sampler:

1 Enable the Freeze button on the sampler

2 Route your phase signal (or any audio-rate signal) to a Modulator Out, and use it to modulated the sampler's Pos parameter

3 Attach a trigger or button module to the Sampler's trigger input and click it to enable its playback. Or route the phasor to it so it'll just keep firing if it stops for some reason.

BTW, the Swarm oscillator is a fun source for phase, with the spread set to around .02 or less.
And the Quantizer shaper can be fun with a phase signal too.

Post Reply

Return to “Bitwig”