BIT-101
Bill Gates touched my MacBook Pro
OK, what the hell is that subject?
I’m going to talk about a sound design technique I figured out on the Dirtywave M8 hardware tracker device that can make some cool evolving sounds.
Most of what I’m talking about here won’t make a whole lot of sense if you don’t have an M8 device (or the headless version you can set up yourself). But even if you don’t, you might find it interesting.
I just realized a simpler way of doing this and updated the post with it. I left the original post as-is because I think it’s good for understanding, and might be the best way to do things in some cases. But make sure you read to the end for the simpler way.
So the M8 has an FM synthesis module, which is very powerful for a small handheld device like this. But we’re not going to talk about FM sysnthesis at all here. The important thing is that the FM synthesizer has four oscillators. In FM synthesis, you’d have some of those oscillators modulate other oscillators. But we’re just going to use one of them and ignore the rest. Also, classic FM synthesis generally sticks with sine waves, but the M8 has a bunch of different waves you can choose, including a whole crap ton of wavetables. This is kind of insane, but can be very powerful. Each oscillator has a feedback parameter, which usually feeds the signal back into itself. But if you’re using a wavetable, the feedback parameter is used to index a particular shape in the chosen wavetable.
OK, so the M8 comes with 61 wavetables built in. They are numbered (in hexadecimal) from 09
to 45
. The M8 manual even shows all the waves in each table. Here’s the first eight:
OK, it doesn’t show all the waves, but it does show one out of four for each table. This is good enough because the missing ones are just interpolated between the shown ones. As you can see, each wave has a hex value from 00
to FF
Here’s a close up:
Say we wanted the wave in the center there, number 34
. Looking at the top of that column, I see that’s in table 35
I’ve set up an FM synth instrument in a phrase on the M8. I’ve chosen algorithm 0B
which just outputs each oscillator separately - no FM synthesis. And I set levels of the first three oscillators (A to C) to 0 and cranked up the final one (D) to AF
just to make the wave’s amplitude as visible as possible without clipping. I set oscillator D’s wave to W35
to get the right table, and set the feedback to 34
to get the right wave in that table. It’s playing a D#5 note, and as you can see, it looks pretty close to wave 34
shown in the manual. Hurrah! First step accomplished.
Side note: it’s unlikely you’ll often want to do sound design by choosing interesting wave shapes. Though there are examples of just that out there. But I’m just walking through this in order to understand deeply how this all works. Bear with me.
OK. We have a single wave playing. Now we want to modulate it. i.e. make it move between different shapes, which will change the way the tone sounds. Well, we can just modulate the feedback parameter.
Here, I’ve added a modulator for oscillator D, 1 > FBK
. This means modulator 1 will affect feedback.
But you’ll notice that the waveform is no longer what we originally had. In fact, it matches wave 00
of table 35
. And if you could hear the tone playing, you’d notice it has changed.
So what’s happening here? Well, in order to modulate something we need two values to modulate between - the start point and the end point. The value we enter in the oscillator’s settings is the end point. The start point is what’s shown in the MOD1
field just below and to the far left. It’s 00
. If you move MOD1
up to FF
, that will make the minimum and maximum values of the modulation the same, and we’ll be back to where we started, including having the right sound back.
So we need to set MOD1
to the minimum, or start value of the modulation. This is where it gets a bit complicated. And a video will help a lot.
I’m starting with the same set up as the last screenshot. Then I move MOD1
down to 00
. Now we’re back to showing wave 00
.
Then I go into the Mods screen and set up an LFO to control MOD 1
. It’s going from the default 00
to FF
with a triangle wave, and I slowed it down a bit.
You can see that the wave is cycling through a whole bunch of different shapes. In fact, it’s going through every shape in table 35
from 00
to 34
. And playing a bunch of different sounds as it goes through those different shapes.
But say I don’t want to go through ALL of those shapes. Maybe just from wave 24
to 34
.
How to get there?
Well, we know that the feedback parameter on the oscillator determines the maximum or end value, and the MOD1
setting below sets the start point, but the start point isn’t simply the wave index in this case. It’s mapped so that 00
is the first wave in the table, and FF
is the maximum set on the oscillator. So the value is kind of a percentage from 0 to the maximum, displayed in hexadecimal. You could do the math, and figure it all out that way, but that would be painful. Instead, just do it by eye.
First I’m going to remove the LFO by setting its destination to OFF
.
Then I’m going to back to the instrument page, move MOD1
back up to FF
and then slowly decrease it until it looks like wave 24
.
When I get to D4
, it looks about the same as wave 24
I think. Again, in real world sound design, you’re probably going to be doing this way more by ear than by eye, so don’t feel bad about winging it.
Now, I’ll turn back on the LFO and see what we get.
OK, it’s modulating, but it does from 24
to 34
in a split second and then just seems to stay at 34
for the rest of the cycle.
By the way, don’t worry about the jumping every few seconds, that’s just the note being retriggered as the phrase loops.
What’s happening now is that the LFO is going from 00
to FF
and adding that value to the minimum value from the MOD1
setting. That’s way too much. So it goes past the maximum value and just gets stuck there.
What we want is for the LFO to make MOD1
go from D4
to FF
. If we subtract those two, we get 2B
in hex. Of course, subtracting hexadecimal numbers is not easy for most humans, so I find it easier to count my way up.
I go into the LFO and set the amount to 00
then count up from D4
to FF
. First by the left digit, hitting the up arrow: E4
, F4
, which gives you 20
. Then by the right digit, hitting the right arrow for F5
, F6
, F7
, F8
, F9
, FA
, up to FF
. When you’re done, you should have 2B
.
When you play this now, it’s just going to cycle in the exact range we want.
I also made the chain a bit longer so there aren’t as many jumps.
In case that’s not completely clear, here’s a diagram that might help.
The bottom arrow represents the full range of waves in the table, 00
to FF
.
You can see the minimum and maximum we want: 24
and 34
.
We set MOD1
so it corresponds with the minimum, and make up the rest in the LFO.
For a (somewhat) more real-world example, and to break down the steps…
3B
.MOD1
to FF
.3C
.MOD1
down till I found a starting point I liked - 6F
.FF
and 6F
, which is 90
.I did all this by ear, not looking at tables and wave numbers.
This gives a complex, rhythmic sound, even though only a single note is playing.
Of course, instead of a free running triangle LFO, you could use a ramp or some other shape, retriggered, or just use an envelope of your choice.
The main point of this post was just figuring out the start and end points of the modulation and how to set them, which was not at all obvious to me for quite a while.
Also, I’m still a bit of a noob with this device. In fact, I’m using the headless version still, though my real M8 should be arriving this week I hope! Anyway, if there’s anything incorrect in this post, please let me know.
I figured out a simpler way of doing this.
FF
. This makes the modulation range 00
to FF
, which exactly map to the wave indexes, so all values used will map exactly to the wave numbers.MOD1
(or whichever mod you are using) to the minimum value, say 24
.24
to 34
, set the amount to 10
. It will add 10
to the minimum 24
, making it range up to 34
.
I think both ways are still valid and result in the same sound, so which one you use is up to you.
Comments? Best way to shout at me is on Mastodon