$0.00 0


Part III of the How to Build a Synth in Reaktor focuses upon improving the LFO and using the...

Reaktor Tutorials

How to Build a Synth in Reaktor (Part III) - Event Processing

Part III of the How to Build a Synth in Reaktor focuses upon improving the LFO and using the discussion as a way to introduce the new user to the concept of events in Reaktor.

In the last tutorial, we added some simple modulation options for our synth: PWM and an LFO.

How to Build a Synth in Reaktor, Part III focuses upon improving the LFO and using the discussion as a way to introduce the new user to the concept of events in Reaktor.


So far, our synth has been focused on audio processing. The envelope, oscillator, mixer, and filter modules we added are all examples of audio rate processing. These modules are constantly outputting values at a rate determined by your sound card (often 44.1 kHz).

Event modules work differently. Most of them do not continuously output values (there are a few exceptions, such as the LFO module we added during the last tutorial). Instead, event modules typically will output a value by having an input triggered, or by user stimulus (such as the turning of a knob).

This control paradigm is useful because it allows the user to process certain parts of the synth only when necessary, as opposed to audio rate objects which run at continuous rate regardless of whether their values are changing or not.

You can tell the difference by looking at the color of the inputs and outputs of a module. Many modules have both event and audio rate inputs and outputs.

Event (left), Audio (middle) and mixed (right)

The event inputs/outputs are red, the audio inputs/outputs are black. There are also some modules with inputs and outputs that look like this:

Instead of the red or black dot for the input, it is blue. These  terminals can be used either as audio rate or event rate, depending on what they’re connected to:

Any blue terminal will turn to an event terminal if it is feeding an event input. Likewise, they will turn black if fed by an audio output.

A few rules:

– You cannot plug an audio output into an event input. The event rate inputs are not designed to accept audio signals.

– However, you can plug an event output into an audio input. In fact, you’ll see we’ve already done this several times in the previous tutorials. The audio rate input will simply change to the value of the event each time a new event is received.


Let’s use some event processing to add some more features to our LFO. We’ll start with a very basic structure, which replaces the simple MIDI Gate that currently feeds the ‘Snc’ input:

You can find the Router 1,2 object in the Built-in Module -> Event Processing Menu.

The Router module will only let events thru the ‘1’ input if the ‘Ctl’ input is set to 1. Hence, when the Key Sync button is off (equal to 0), the Gate events will not reach the LFO to restart it on a new keypress.

So this structure can act as a very simple Key Sync option for our LFO (before, the LFO operated as though Key Sync were always on).


Okay, so let’s build something a little more complicated. The ‘Freq’ knob in the LFO macro is a bit undesirable at the moment. For one, it can’t be synced to the tempo (an almost universal LFO feature), and the unsynced range of 0.1 to 12Hz could be improved upon as well.

To fix both of these problems, I created a macro:

This macro accepts a value from 0 to 1, and performs a bit of arithmetic, then outputs either a free-floating value from 0.0625 to 64, or a tempo synced value ranging from 4 bars to 1/64 note, depending on the value of the Tempo Sync button.

Since this is the most complex structure we’ve built so far, let’s give it a closer look.

Let’s examine the top half first. The module labeled ‘X+’ can be found in the Built-in Module -> Math menu, it is called Mult/Add a*b+c. What this is doing is changing the incoming value from 0 to 1 to a new value ranging from -4 to 6.

Next, this value is used as the y component of a 2^y function, leaving us with a value range from 2^-4 (0.0625) to 2^6 (64). The x^y module can also be found in the Built-in Module -> Math menu.

So, this simple bit of math gave us a much wider range of values to work with, at the loss of a little precision at the upper end.

Next, let’s look at the bottom half:

It’s actually quite similar to the top half. The Quantize module can be found in the Built-in Module -> Math menu, and in this case it is simple rounding any value it receives to the nearest whole number.

Essentially what this has done is give a knob ranging from -4 to 4, outputting only whole numbers. Now we again use a x^y function, and then multiply the output by the Tempo Info module (found under the Built-in Module -> Auxiliary menu).

The Tempo Info module outputs a value upon opening the Reaktor project, or any time the tempo changes. It’s output is equal to the Frequency length of a quarter note. For example, at 120 bpm, it will output 2. (120 beats per minute / 60 seconds per minute = 2 beats per second).

Therefore, we are simply taking the tempo frequency and multiplying it by a power of 2.

Finally, we take both of the values we just calculated and run them into a Selector/Scanner module, which can be found under the Built-in Module -> Signal Path menu. The Selector module will only accept events from one of it’s inputs, depending on the ‘Pos’ value, in this case controlled by a button:

Set the number of inputs for the Selector module to 2 in the properties.

You may have noticed the Selector module looks and functions an awful lot like the Router module we used earlier. If you looked at the various types of Routers, the Selector is almost exactly like the Router M->1 module.

There are two minor but important differences between the two modules. The first is that Routers cannot accept audio signals, while Selectors can. The second is what happens when the Pos input changes.

When you change the Pos input to a Router, nothing happens. The Router will change which inputs it allows thru, but no event is sent to the output until it is received at that input.

When you change the Pos input to a Selector, however, the Selector outputs whatever value is currently available at that input.

In this case, this is an important feature because when we click on the Tempo Sync button, we need to calculate the new value immediately, not wait until the next time the user turns a knob and triggers an event at that input, which is what would happen with a Router.

Okay, so now we can just place the SYNC macro that we’ve made into the LFO like so:

A few notes on this. First, make sure you change the Freq knob so it ranges from 0 to 1 instead of from 0.1 to 12.

Also, notice how the indicator light on the SYNC macro in my picture is orange instead of yellow? This is because I’ve marked the macro to be monophonic instead of polyphonic. You should make this change yourself by right-clicking on the macro and selecting ‘Mono’.

The reason for this is that we’re connecting the output of the macro into a Numeric Readout module (Built-in Module -> Panel). The Numeric Readout is itself a mono object, and we cannot connect a poly output into a mono input (try it, and you’ll see a red X on the input).

The difference between mono and poly will be discussed in full in the next tutorial.

Next, since the value of the Freq knob is no longer the actual frequency of the LFO, we can turn the value in the VIEW tab of the properties. Uncheck the ‘Show value’ box. We’re using the Numeric Readout module to display the current frequency instead.

Turn of the label of the Numeric Readout in the properties, uncheck the ‘Show label’ box in the VIEW tab. Next, you can move the value into position underneath the knob so it looks like any other.


Although it is not immediately obvious, the LFO module can also output Ramp and Saw waves, two important LFO types that should not be left out of our project.

We can coerce these waveforms out of the LFO by using the ‘W’ input and the triangle output. With the ‘W’ input set to 1, the Tri output becomes a ramp wave, and when the ‘W’ input is set to -1, the output becomes a saw wave.

Here’s a simple way to add this functionality to our LFO:

Simply duplicate the LFO module twice, set the ‘W’ inputs, and connect them to the ‘Type’ switch.

You can dynamically add more inputs to a Switch module (or any other module with a variable number of inputs) by holding down the CTRL key and dragging a wire onto the module. Alternatively, change the number of inputs in the Switch properties.


Finally, let’s make a very quick change to our FILTER macro (I meant to include this in the last tutorial but I forgot). I modified the Pitch controls of the macro to look like this:

What this is doing is adding a simple keytracker to our filter. This makes the filter values follow the notes being played, bringing the cutoff value down on notes below 60, and up for notes above 60 (60 is the MIDI value for middle C).

There are many ways to implement such a system – we can replace the value 60 with a knob, invert the value when a button is pressed, multiply by a depth knob after subtracting, etc. For the time being, I simply added a default keytracker that can easily be replaced or upgraded for future use.


Our LFO is quite a bit more useful now, but it’s stil only modulating one parameter. Over the next few tutorials we’ll work on expanding the modulation capabilities for tremolo and other effects.

Next time we’ll also focus on the difference between mono and poly and build a simple voice controller for mono, and unison modes.

Download my work for this tutorial here, in case anything was difficult to follow. Please leave any questions in the comments. Thanks for reading!


Building in Reaktor for Beginners

ADSR Courses

Add to cart
SAVE 40%

Sequencer Modules in Reaktor

ADSR Courses

Add to cart
SAVE 40%

FFT (Fast Fourier Transform) with Reaktor

ADSR Courses

Add to cart
SAVE 40%

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