## Guide For Getting Perfect Octave Interval From The Generators.

Logickin λ
Posts: 73
Joined: Sat Sep 08, 2018 8:31 pm

### Guide For Getting Perfect Octave Interval From The Generators.

Story:

I am guessing many users noticing that the tuning of the generators are in fact slightly out of tune when playing in Octave.
When playing 2 Saws in Octave interval, you hear the "Sync" Effect in a cycle of 6 seconds, meaning that some of the notes plays in octave will have 1/6 Hz out of tune. (Perhaps rounding error of integer, since most of the notes seems to have the same offset)

Perfect Octave Test.sunvox

This "imperfect" is actaully great for music, since it will giving a more natural and richer sound when layering chords; however, sometimes we needed perfect octave for some synth design like additive synths or making a simple synth bass by layering 2 saws in an octave, so....

Guide For Getting Perfect Octave Interval From The Generators:

Here are all the tricks I have found so far, excluding the use of sampler, to move the wave of a generators from octave to another without that slightly offset. In this post, you will see the following stat:

- Module Complexity: This is an idea borrowed from big O notation, to shows how well it scales when laying more octaves. If this is O(1), meaning you only need 1 block per octave; if this is O(n²), you need 1 block for the origin, 2 for +1 Oct, 4 for +2 Oct, 8... and so on.

- Polyphony Stability: Some of the method can only works in monophonic way since some methods is intended to distorted some of the wave to getting other octaves, sending 2 notes will confuse the mechanism and create dissonance results.

- Supported Signal Type: Just shows the methods can be applied with which kind of signal.

Ok, let's move to actual solution!

Method 1 - Sub Oscillator Method:

Module Complexity: O(1)
Polyphony Stability: Stable for all supported signals
Supported Signal Type: Saw, Sine, Square(with Drawn Mode)

This is the the simplest method to get a perfect octave, by adding another generators that somehow contains the signal with the lower/higher octave.

Square in (analog)generators is the best example to for demonstrate the effect, since it is lower by 1 octave as default.
You can make a -1 octave saw by combine the signal of a square and a saw generator:

For sine wave, fm module can be used, since the C.freq ratio provides different harmonics, you can make different interval precisely without hearing the shifting effect.

Method 2 - Phase Shifting Method:

Module Complexity: O(n²)
Polyphony Stability: Stable for all supported signals
Supported Signal Type: Saw, Square

In case you need to move a saw wave 2 octave apart or more, or to use the duty cycle for the square wave, you can approach this method.
The trick is to setting the following generator with different phase shift to faking it is a single waveform that plays an octave higher.

Here is the setting of using phase shift:
You needed n² number of modules for +n octaves, and the rules of phase shift:

Code: Select all

``p = 32768/(n+1)``
meaning if you want to make rise the saw wave by 3 octaves, you need 8 multiSynth modules with 4096 phase shift each,
and the screenshot shows the routing of the set up (Instead of routing to 1 generator, you can route to individual generator as well):

You can use this tricks for square as well, but you have to sacrifice the resolution of the duty cycle. For risen n number of octave, you need to set the duty cycle based on the following rule, to get the correct sound:

Code: Select all

``d = 512/(n+1)``
Here are some examples:

Method 3 - Absolute Method:

Module Complexity: O(2n)
Polyphony Stability: Not stable, only works for monophonic.
Supported Signal Type: Triangle, *Asine, **Hsine

* Required method 1 to get other frequency.
** combine the original sine with the "absoluted" sine, and method 1 to get other harmonics.

For some symmetrical waveforms like the triangle wave, you can fold the signal by setting the amplifier to absolute mode. After fixing the DC offset using amplifier or DC blocker, you can create a triangle wave that is an octave higher than the original. You can also stack the following set up to get other octave as well:

Due to the use of absolute function, playing 2 notes will distorted the sound of the original triangle, which you can only use this solution to monophonic synth only.

That's all about the method I have found. If anyone find a better method, please comment down below. I hope these can help someone who struggles about making perfect octave when doing synth design.
I was stressed out by my own matter, but I am finally back on the SunVox discord.

My sound cloud: https://soundcloud.com/logickinlambda
My Audius: https://audius.co/logickinlambda