$0.00 0

YOUR CART
Checkout

SUBTOTAL
DISCOUNT
VAT
TOTAL
Checkout
Banner
In this tutorial I'll show how to build bandlimited square and triangle oscillators in...

Reaktor Tutorials

Bandlimited Square and Triangle Oscillators

In this tutorial I’ll show how to build bandlimited square and triangle oscillators in Reaktor. I’ll be working using structures and concepts first covered in 3 previous tutorials – Core Oscillators, Anti-Aliasing 1, and Anti-Aliasing 2.

After my previous tutorial, Errorsmith wrote in with a fix to the structure that allowed for pitch sweeps. I won’t be using that structure for today’s tutorial, but I will mention here that you could easily substitute in his modified structure for mine for the purpose of today’s tutorial. In general, if you plan on modulating the pitch, his version is probably a better choice. I had an idea for a fix that would add similar functionality but his way is more elegant so I would suggest using that.

BUILDING A PULSE OSCILLATOR

The most commonly solved bandlimited oscillator is the sawtooth. I’m not sure of the reasons behind this, but it is possible to build other waveforms using a sawtooth as a building block. In fact, I’ve yet to see a bandlimited pulse or triangle oscillator that did not depend on first building a sawtooth.

A method I have found for building pulse oscillators is to use a pair of sawtooth oscillators running at the same frequency, but with different phases. Subtract one sawtooth from the other and you’re left with a pulse wave! The difference in phase becomes the width of pulse. Here’s what such a structure looks like in primary:

This results in a standard square wave:

Of course, there are far more efficient way to achieve this in primary, I only provide this structure as an example. Fortunately, the same design works perfectly with our BLIT design from before. We can use a single phase accumulator to run two BLITs – one is offset by an amount, W, that creates the width of the pulse. W can range from 0 to π.

This structure creates an interesting pulse shape:

Fortunately, the spectral data is very similar to a ‘normal’ pulse wave, however:

Anti-aliased pulse spectrum

Primary pulse spectrum

In fact, except for the frequencies above 18,000, they look identical as far as I can tell.

BUILDING A TRIANGLE OSCILLATOR

Once we have a pulse oscillator built, we can move on to the triangle oscillator. A basic triangle shape can be made out of integrating the output of a pulse wave. For more on integration, please check out the 2nd tutorial of this series.

For example, we can modify the Primary pulse oscillator we made earlier to make a triangle shape like so:

The integrator must be reset upon each new gate input, otherwise the oscillator can suffer from DC bias. A future tutorial in this series will focus on the creation of a DC Trap to remove such problems, which can often result from bandlimited synthesis techniques, but for now it is easy enough to work around.

Here’s the resulting waveform:

One problem we see with this design in the resulting amplitude of the triangle wave is dependant upon it’s frequency (the lower the frequency, the louder the amplitude). However, this design flaw does not translate into our bandlimited version (I think the reason for this is the leaky integrator we’ll be using will cancel this effect out, but to be honest I’m not sure).

So, as before, we can extend our design to the bandlimited realm. To do so, simply take the pulse oscillator, and integrate it!

Integrating the output of another integrator might seem a little odd, but it works. As with the bandlimited pulse and sawtooth waves, the shape of the triangle is not exactly what you would expect:

It has more of a curved shape than you would expect from a triangle wave. However, as above, you will note that the spectral data obtained from the bandlimited triangle is almost identical to a standard triangle wave:

Anti-aliased triangle spectrum

Primary triangle spectrum

One interesting aspect of this design is that the W input to the macro now controls a morph between a triangle and sawtooth wave. When the width is equal to π, the oscillator outputs a triangle. As W decreases towards 0, the wave morphs into a sawtooth. However, decreasing W has the side effect of decreasing the amplitude as well. If the user wishes to use the morph feature, I would suggest adding in a method to boost the amplitude when the width is less than π.

CONCLUSION

Here is a .zip file containing the two new bandlimited structures in this tutorial. If you wish to modulate the pitch, I suggest you use Errorsmith’s fix to rebuild the structures, which should be quite simple.

I hope you have found this tutorial useful. If you have any suggestions for future tutorials on this topic, please let me know what you’d like to see covered.

RELATED COURSES

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
×
PLAYLIST
Clear all
WISHLISTS
Create an account to use wishlists
×
SAVE TUTORIALS
Create an account to save tutorials
×
FOLLOW YOUR FAVORITES
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!
CREATE ACCOUNT
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!
SIGN IN
adsrsounds.com login Video streaming login
Remember me
Forgot your password?
DON'T HAVE AN ADSR ACCOUNT?
Create your account
FORGOT PASSWORD

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
DON'T HAVE AN ADSR ACCOUNT?
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
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
{"uid":-1,"ud":{"id":null,"fname":"","lname":"","eml":"","ph":"","city":"","state":"","country":"","zip":"","vndr":0,"admin":0,"editor":0,"content":0,"coursesub":0,"creditsub":0,"uname":"","ufst":0,"sbt":0,"lua":1728285747,"ap":[],"hash":"5a6dfeeaf6cec0a72ca948ed7d3a6b2c283f15a6199570a5a4c070091475e385","rlp":{"add":"no","amount":0}},"vf":[],"pw":[],"tu":[],"wcc":[],"wct":{"upsell_coupons":[],"applied_coupons":[],"coupon_amounts":"","coupon_amount":"","discount_type":"","coupon_excerpt":"","subtotal":0,"total":0},"crncy":{"usd":1,"cusd":"$","eur":0.911481,"ceur":"\u20ac","gbp":0.9141995999999999,"cgbp":"\u00a3","gbpclean":0.761833,"cgbpclean":"\u00a3","jpy":148.59,"cjpy":"\u00a5","eur-at":1.0937772,"ceur-at":"\u20ac","eur-be":1.10289201,"ceur-be":"\u20ac","eur-bg":1.0937772,"ceur-bg":"\u20ac","eur-hr":1.13935125,"ceur-hr":"\u20ac","eur-cy":1.0846623899999999,"ceur-cy":"\u20ac","eur-cz":1.10289201,"ceur-cz":"\u20ac","eur-dk":1.13935125,"ceur-dk":"\u20ac","eur-ee":1.11200682,"ceur-ee":"\u20ac","eur-fi":1.143908655,"ceur-fi":"\u20ac","eur-fr":1.0937772,"ceur-fr":"\u20ac","eur-de":1.0846623899999999,"ceur-de":"\u20ac","eur-gr":1.13023644,"ceur-gr":"\u20ac","eur-hu":1.15758087,"ceur-hu":"\u20ac","eur-ie":1.12112163,"ceur-ie":"\u20ac","eur-it":1.11200682,"ceur-it":"\u20ac","eur-lv":1.10289201,"ceur-lv":"\u20ac","eur-lt":1.10289201,"ceur-lt":"\u20ac","eur-lu":1.0664327699999998,"ceur-lu":"\u20ac","eur-mt":1.0755475799999998,"ceur-mt":"\u20ac","eur-nl":1.10289201,"ceur-nl":"\u20ac","eur-pl":1.12112163,"ceur-pl":"\u20ac","eur-pt":1.12112163,"ceur-pt":"\u20ac","eur-ro":1.0846623899999999,"ceur-ro":"\u20ac","eur-sk":1.0937772,"ceur-sk":"\u20ac","eur-si":1.11200682,"ceur-si":"\u20ac","eur-es":1.10289201,"ceur-es":"\u20ac","eur-se":1.13935125,"ceur-se":"\u20ac"},"ga":null,"wplourl":"https:\/\/www.adsrsounds.com\/wp-login.php?action=logout&_wpnonce=5943bee26d","usmsg":"","sbswtch":[],"sbsfav":[],"sbscmpl":[],"wpt":1728314951,"pccvc":[],"lpf":["1574986","611559","324393"],"vat":0,"time":1728286151}