$0.00 0


In this tutorial I will explain step by step the creation of a Pitch Glide macro, what it is...

Reaktor Tutorials

How to Build a Synth in Reaktor (Part V) - Tremolo and Glide

In this tutorial I will explain step by step the creation of a Pitch Glide macro, what it is used for and how to implement it. Also I will be expanding the LFO from previous tutorials and using it to create a Tremolo effect as well.


Glide is a common control used in monophonic synths. It allows a user to slide between notes over a period of time instead of immediately changing the pitch on a new MIDI note.

I like to implement glide as a function of time: If a new note is received while another note is already playing in Mono Unison mode, the value glides from the previous note to the new note over a period of time controlled by the user. If no other note is playing, simply jump to the new note.

I built the following macro that meets these specifications:

Since there’s a lot of wires connected to the Order module, I highlighted it so you can see all of the connections easier.

As usual, let’s go over the structure here. This is probably the most complex structure we’ve built so far, and as I always do with structures like this, let’s examine it in smaller pieces.

First off, it’s important to note the order of events when a new MIDI note is pressed: Any Note Pitch modules in your code will fire an event first, then any MIDI Gate modules will fire next.

So this piece of code simply stores the last available Gate value. If no notes were pressed prior to the new MIDI note, the Router Pos input will be equal to 0, otherwise, it will be equal to 1.

Using this code to control the Router allows us to simply bypass the glide function if it is not needed – we simply send the pitch value to the ‘0’ input of the Router in that case.

The Order module – which we have not used yet – has a very simple function: when it receives an event, it outputs that event first from output 1, then from outputs 2 + 3 in order. This is important, because ordinarily in Reaktor we have no way of knowing which events will be processed first.

For example, if we removed the Order Module from this structure, we would have no guarantee that the Router Pos would be set when the Pitch value went to the ‘0’ input of the Router.

Therefore, when working with events, it is always important to think about the order of events and to make sure to use an Order Module when necessary.

Okay, so that’s the boring part of the code, what about the rest?

Here’s the action! Once again, I’ve highlighted the Order module to make it slightly easier to read.

Note how the Value module attached directly to the Order module works – first it triggers the old Pitch value, then it stores the new value. This means it always outputs the previously received Pitch value.

The previous Pitch value is important to us for a few reasons. First, we start gliding from that pitch, and with that in mind, we set the Accumulator module to start at that value. Second, we can subtract the previous pitch from the current pitch to figure out how far we are gliding.

Okay, so now we have the Accumulator module set play the previous pitch, we need to send it values to the ‘In’ input. Each value sent to the ‘In’ input gets added to the total, then the total gets sent out, to all of the Pitch inputs in the entire ensemble.

Like I said above, when we subtract the previous value from the current one, we know how far we need to glide. Next, we want to know how long to take to glide that distance. We accomplish this with the Glide knob and the System Info macro.

Here’s a version of that structure with all of the surrounding clutter removed and rearranged for the sake of clarity:

The ‘CR’ output of the System Info macro is quite useful. Not only does it give us the speed of the Event Clock in Hz, it also is an event clock itself, that we can use to run our glide macro (Since the Pitch inputs of all of the oscillators we are using only accept events, we will need to operate at event rate).

By default, the Control Rate (IE, Event Clock) in Reaktor runs at 400 Hz. Thus, 400 times a second, the ‘CR’ output sends a value of 400 out. Multiplying by Glide, a value from 0 to 1, gives us a range of how many events we want to use to glide from the previous pitch to the current one. When Glide = 1, it takes 400 events, or 1 second to make the transition.

When we divide the difference in Pitch values over the number of events, we wind up with a value to increase the accumulator by. We store this value in a Value module for further use.

Finally, the ‘CR’ output also gets sent to a Counter module. Again, I’ve removed much of the surrounding code for the sake of clarity, refer to the top picture to see the whole structure in context.

The Counter is very similar to the Accumulator module – it increases by 1 each time it receives a positive event at the ‘Up’ input. It also gets set to 0 on a new Pitch value, so the output of the Counter module is the number of events that have been fired since the last Pitch value came in.

We already know exactly how many events we want to fire, having calculated it by multiplying the Control Rate by the Glide knob. The Separator module is used to only allow events below the threshold thru. Those events then trigger the Value module which in turn feeds the Accumulator module.

Finally, after all of that, I noticed an error in our code! You may have noticed that if the Glide knob is equal to 0, we end up dividing by 0 and creating some problems. Well, fortunately, this problem is easy to fix. Simply check if Glide is greater than 0, and multiply it by the Gate > 0 module like so:

You can wire the GLIDE macro into the PITCH GATE macro like so:

Whew! Well, that was far more complicated to explain that it was to build, which is how Reaktor gets with more complicated subject material. By now I hope you are able to find the modules that I am using on your own and to get an idea of how they work.


Now let’s add a tremolo effect to our synth. Tremolo is achieved by using an LFO to modulate the pitch of an oscillator. I made some very simple changes to the synth to do this. First, I added some code to the LFO module after the Type switch:

This should be very self-explanatory, it adds 3 buttons which control whether the LFO modulates a given parameter. When the buttons are off, the LFO is not sent thru the Selector.

I also replaced the constant value of the LFO ‘A’ inputs with a knob (Range) which goes from 1-24. You can remove the LFO Mod knob in the FILTER macro as you do this as well.

The new Range knob is very useful – it allows us to control the LFO depth for modulating the filter cutoff and the oscillator pitch with a single knob.

To finish off adding tremolo, I created an extra input to each OSCILLATOR macro that accepts the LFO input and adds it to the pitch of the oscillator. And done!


In the next tutorial I will continue to work on the PITCH GATE macro, and possibly update some other parts of the synth as well. If you have any topics you’d like to see covered please let me know.

If you have any questions about how I did this or that, please consult my copy of this week’s work, which you can here


Building in Reaktor for Beginners

ADSR Courses

Add to cart

Sequencer Modules in Reaktor

ADSR Courses

Add to cart

FFT (Fast Fourier Transform) with Reaktor

ADSR Courses

Add to cart

Reaktor Core Masterclass

ADSR Courses

Add to cart
Waveform Loaded
Waveform Played
Clear all
Create an account to use wishlists
Create an account to save tutorials
Follow your favourite labels, formats and genre's and ADSR will show what's new in those on your next visit.
  • Create product wishlist
  • Save your favorite tutorials
  • Regular discounts and exclusives
  • Never miss a sound! Follow your favorite labels.
Sign up to My ADSR to ensure you're ahead of the pack. Save your favorite content and be notified of new content. You'll never miss a thing!
Create your account now!
Sign up to My ADSR to ensure you're ahead of the pack. Save your favorite content and be notified of new content. You'll never miss a thing!
  • Get days all ADSR courses free
  • Create product wishlist
  • Save your favorite tutorials
  • Regular discounts and exclusives
Create your account now!
adsrsounds.com login Video streaming login
Remember me
Forgot your password?
Create your account

Send info
  1. Enter your email address
  2. Click "Send info"
  3. Check your inbox for an activation link
  4. Visit activation link and enter set new password
Sign in
Create your account
IMPORTANT: Is this product compatible with your system? Please check the product system requirements tab before purchasing. To proceed with this purchase you must check the box to confirm you have checked the requirements.

I have read the system requirements and agree to the return policy. I understand that refunds will not be given due to limitation of my software or operating system.

I don't agree
, you have loyalty credit available. To redeem click the button to claim !
Claim your free sounds

For every $5 you spend on ADSR receive 1 free credit for Sample Manager.

Even better, we have back-dated this so any purchases you made since 2017 have also been credited to your account!

Click the button below to claim your free credit.

Get my free credits
Loyalty credits
1Every purchase you make on ADSR* now earns you 1 loyalty credit for every $5 spent
2Once you make a purchase your credits are added to your account
3Credits can be redeemed in ADSR Sample Manager to download individual loops and samples
4To redeem simply download ADSR Sample Manager and/or log into Sample Manager with your ADSR login details
5Credits will have been automatically added to your account
6Loyalty credits expire 30 days after initial purchase
* Not including video subscriptions