- How the module works
- How to use the module - https://warmplace.ru/forum/viewtopic.p ... 352#p17352
- Download link and change log - https://warmplace.ru/forum/viewtopic.ph ... 354#p17354
When I was using Sunvox for awhile, I always want to make an arpeggiator to writing arpeggio easier.
However, I was struggled on 2 main problem:
- How to extract notes from a chord
- How to make a module to count how many notes pressed
These problems was puzzling me for a long time, but not anymore:
Introducing - The Classic 8 Notes Arpeggiator
![Image](https://i.imgur.com/2ivIA5R.png)
Sure it looks confusing, I will break the module into multiple parts, to make things easier to explain.
(The newer version might have one or two extra or less modules, but the methodology is the same)
![Image](https://i.imgur.com/vt7sV5v.png)
Input:
The input is nothing special since it is just a multisynth that controls all the sound and logic, and
the multisynth under the input is set a static C5 notes for the counter.
There are some multictrl as well, but it is just for control the duty cycle and waveform.
Oscillators:
There are 8 generators, the first one is monophonic, meaning that the polyphony is 1 for it. For every generator below the upper one will have one more voice for it. If you press a triad (a 3 note chord), the generator will assign into the following configuration:
[Osc 1] The last note you pressed
[Osc 2] The second note and the last notes
[Osc 3] All 3 notes
...
This kind of configuration is used for the the following process, voice cancelling.
Voice cancelling:
Here is the interesting part, no matter how complex the waveform is, if it is generated by the same method and trigger by the same time with multisynth without setting random phrase, the phrase must be same (even some of the noise type inside generator).
Here is the example, one pair of generators are set into noise (sampler) while other set are set into sine with inverted one of the signal within a pair. When the signal is combine with an amplifier, it will cancelled out each other (known as destructive interference), result in a silent input.
![Image](https://i.imgur.com/uAbuTBZ.png)
When it comes to the voice cancelling part, since it is mentioned how generator create the sound, so it can be easily obtained the sound in specific frequency.
Back to the very simple oscillator diagram:
[Osc 1] Voice C
[Osc 2] Voice C B
[Osc 3] Voice C B A
If the signal of Osc 2 is inverted and combined with Osc 3, the Voice C and B will be removed due to destructive interference, only voice A will remain. Same thing if we invert Osc 1 and combine with Osc 2.
if anyone confused, here is a visualization about removing G notes from a C perfect 5th using destructive interference.
Since one of the generator can only generate sine in G, by inverting that sine wave G, it can be removed the G contained inside the C perfect 5th.
![Image](https://i.imgur.com/UbEgv3S.png)
Once the extra harmonic content are removed per generator, the individual signal will feed into a group AM modulator controlled by a set of decoder.
* Midi out edition works in similar way but instead of waves, it subtracts DC offsets to control a sound2ctrl to change the pitch in glide.
Counter:
The counter is a generator that generates a constant DC value, where the generator's output is close to the value of 1 unit of DC offset in the amplifier; however, it is still not exactly equals to each other, so adding a distortion with 8bit bit depth to quantize the generator's value into closest 8bit value. How the counter works is that when pressing some keys, the generator stacks the DC offset according the number of key pressed.
![Image](https://i.imgur.com/uYWPHvj.png)
The counter still has a bug when there is 0 or 1 voice, the counter still can't cancel the 1 unit DC from amp, while adding more voice to the counter generator, it will cancel N-1 unit of DC offset; nevertheless, this bug is not affected since the 0 voice case is ignored.
Sequence Generator
They are a group of amplifiers that generates a stair function that repeats itself, from 1 step to 8 steps (0 - 7 unit of DC offset). To generate such stair, a track in used for automating the DC offset step by step until it reaches the specific steps. To make the steps run smoothly and without sudden reset, I choosed the LCM of the number from 1 - 8 for the length of the track, which is 840.
![Image](https://i.imgur.com/1VI1PqS.png)
Decoders:
Yes! It is the decoder we learnt in logic circuit, except it receives DC offset value instead of Binary number.
The Decoder contains 3 parts: Comparator, Less than 0 Trigger, and a Not Gate.
The comparator compares the value from input based on DC offset. Since it is being absolute in negative, any value cannot be cancelled by each other will becomes a negative value. Distortion has an interesting property that feeding any negative signal to a 1 bit distortion must giving -128 unit of DC offset, result in good for making logic with condition.
In short, if the comparator manage to cancel the input, the distortion will not switch on; otherwise, it will return on DC offset of -128 unit.
![Image](https://i.imgur.com/aIJdX2Y.png)
To make the decoder more useful, a not gate must be attached after the distortion, so the decoder will only SELECT ONE single modulator channel instead of REMOVING ONE channel.
There 2 groups of decoders, the first choose the number of steps based on the number of notes input, then the other one is used for selecting which oscillators will be played.
EG (Envelope Generator)
The EG is attach to the very last Modulator that controls the overall volume and panning, using the rise and fall of a DC offset.
TLDR (or how it actually works in short)
How the arpeggiator actually works is when a chord is pressed, the counter will count the number of input notes and select the corresponding stair function to control which oscillator will be played, while the chord from each oscillator is broken down into single notes by using destructive interference.
I hope it helps to understand how the module works. I know some of the component is not explained very clearly, I will update the post if any uncertainty is found.
- Ra Logickin [Logickin λ]