A granular MIDI-controlled synth that creates an overlapping blanket of arpeggiated square-wave grains.
This is a lovely synth patch with some neat tricks! It’s built from PWM’ed square waves through bandpass filters, but with an arpeggiator on steroids; all notes you press generate little grains of sound in random order, so despite using just 3 oscillator modules it still handles 5-note polyphony.
And there’s a chance it’ll randomly jump up an additional octave for some grains, broadening the range even further.
There’s random detuning and random filter modulation per grain, and the shape of the grains can be morphed (from sawtooth to sinusoid to squarish).
There’s a HOLD toggle button that turns all notes on and sustains them, and the rate of grain triggering can be synced to MIDI clock (or to an internal clock). There is a clock-synced delay to thicken things up even more and nice reverb at the end to glue everything together.
It’s full stereo with – surprise, surprise! – random panning per grain, and with the mod wheel, bend wheel, and pressure mod there’s plenty of expressive playing possibilities!
=====
[OVERVIEW]
-Input/Output: Stereo in/Stereo out (dry path stereo field is maintained)
-CPU load: Around 101%
-Build: Initial version built with firmware 2.80
-MIDI: All MIDI related modules (in PEACH colour) are on the 3rd page marked MIDI. I always use channel 10.
-CV Inputs: Unused.
-CV Inputs: Unused.
[REVISIONS]
1.0: Initial patch.
[CONTROLS]
All the main controls are on the UI page and are labeled (see below for a “Picture Manual” in the comments).
The Stereo Output module with gain parameter is on the IO page.
BPF (sets the overall cut-off of the bandpass filters)
BPF SKEW (spreads the cut-off of the filters apart)
BPF Q (sets the resonance of all filters)
BPF MOD (sets the amount of random per grain filter modulation)
LVL (sets the level of the synth)
MIDI CLK (toggles MIDI clock sync on; when disabled the internal clock is used, on IO page)
CLK MULTIPLY (sets the multiplication of the main clock rate; from 1x to 32x
RISE (sets the time it takes for grains to fade in)
FALL (sets the time it takes for grains to fade out)
VERB (macro control for reverb mix and time)
HOLD MODE (toggle to hold all notes and sustain them)
SHAPE (macro-control for grain shape; from sawtooth to sinusoid to squarish)
DETUNE (sets the amount of random per grain pitch modulation)
PWM (sets the amount of random per grain pulse width modulation)
OCT UP (sets the change that grains are pitched up an octave)
ZEBU LEFT/RIGHT button = Unused.
ZOIA LEFT / MID / RIGHT stomp = Unused.
=====
[PATCH STRUCTURE]
Alright, we start with a big MIDI notes module with 5 notes. We want to rapidly arpeggiate through all the notes held, so we’re sending them into one big switch to sample the different pitches from (“The Big Pitch Switch”, for nerdy details on pitch routing see section below!). To get pitch info for individual ‘grains’ we use a Random module via a Multiplier into the channel selection of “The Big Pitch Switch”, and all five MIDI gate outputs are connected at 20% to this multiplier, so the nr of notes currently held determines how many notes the Multiplier can reach. The output of that Big Pitch Switch is then sampled via three S&H modules and sent to three oscillator voices.
Three? Yes, three!
Although there is 5-note polyphony at the keyboard side, there’s just 3 voices playing at a given time (one or two would’ve also been fine, but this allows for 3 overlapping grains = a fuller sound). The rate of sampling is a multiple of the (MIDI or internal) clock rate, so the granules are really just fast arpeggiated notes! The voices are square wave oscillators with PWM enabled going through a VCA and then a panner. VCAs are controlled by very short ADSRs that can be shaped via SHAPE control. Then there is a clocked delay that’s in sync with the MIDI clock, so your granules are repeated once or twice, but exactly aligned in the tempo. Nice!
Finally, there’s a whole lot of randomizations happening; there are random modules to randomize grain PWM, grain panning and grain detuning. All Random modules are triggered by the envelope of their respective voice, so each grain has its own unique randomness for its full duration (which will mostly be… very short, but they are triggered at a fast pace so they can still overlap nicely!).
The 3 oscillators each go through their own bandpass filter, also randomly modulated per grain, and the filters can be skewed (one opening, one closing).
MIDI pressure mod is routed to the OCT UP control, pitch bend to BPF Q, and mod wheel to BPF cutoff.
That’s the patch! Now for the nerdy bit…
WARNING: TECHNICAL DEEPDIVE UP NEXT!! – skip to avoid headaches :D
I guess I wrote this mostly for myself while trying to figure out how to make this work, but I’ll post it anyway.
So, MIDI Note1 can go to channel 1 of “The Big Pitch Switch” (aka TBPS), but MIDI Note2 should go to either channel 2 (if Note1 is still held) or to channel 1 (if Note1 is no longer held), and this continues for notes 3, 4 and 5.
Additionally, we must make sure that if Note2 is going to channel 1, then Note1 shouldn’t be going to that same channel, else the pitches are added together!
So, to route all notes to the correct channels corresponding with the nr of notes held, we need a set of CV switches going into the different Big Pitch Switch inputs:
Note1 -> 2-way switch to the following TBPS channels: [X 1]
Note2 -> 4-way switch to the following TBPS channels: [X 1 X 2]
Note3 -> 8-way switch to the following TBPS channels: [X 1 X 2 X 2 X 3]
Note4 -> 16-way switch to the following TBPS channels: [X 1 X 2 X 2 X 3 X 2 X 3 X 3 X 4]
Note5 -> 16-way switch to the following TBPS channels: [1 2 2 3 2 3 3 4 2 3 3 4 3 4 4 5]
(Where X = no connection. I could’ve also used an additional switch per Note but didn’t want to spend the CPU. In hindsight, this wasn’t worth the hassle…)
The gates from the MIDI input module are used to tell these switches where to send the notes:
Switch1 is controlled by: gate1 increases channel by +1 (so 100%)
Switch2 is controlled by: gate2 increases channel by +1, gate1 by +2 (so 33.3% per inc.)
Switch3 is controlled by: gate3 increases channel by +1, gate2 by +2, gate1 by +4 (so 14.3% per inc.)
Switch4 is controlled by: gate4 increases channel by +1, gate3 by +2, gate2 by +4, gate1 by +8 (so 6.67% per inc.)
Switch5 is controlled by: gate4 increases channel by +1, gate3 by +2, gate2 by +4, gate1 by +8 (so 6.67% per inc.)
I cracked my skull on these switches for a while, so let’s test the theory!
Say that notes 2, 4 and 5 are held but notes 1 and 3 have already been released, then those three notes should connect to inputs 1, 2 and 3 of The Big Pitch Switch:
With gate1 low, switch1 is not connected to anything, correct!
With gate2 high, switch2 goes to note input1, correct!
With gate3 low, switch3 is not connected to anything, correct!
With gate4 and 2 high, switch4 goes to note input2, correct!
With gate4 and 2 high, switch5 goes to note input3, correct!
END OF DEEPDIVE!! – your brain can relax again…
=====
[TIPS/TRICKS]
>>> Hold some notes and see how it behaves. Try the HOLD toggle. And don’t forget about the MIDI toggle.
>>> Want a calmer sound, turn down the clock and/or multiplier. Want a milder tone, change the SHAPE or the filter settings.
[THOUGHTS/IDEAS/PLANS]
I quite like this patch, and I had a few variants on this sound on my MicroKorg so I’ll likely make a few variants of this one.
If there’s any bugs/questions/remarks/requests or suggestions for improvement, please let me know!
Enjoy!
(Image: Reuben Wu)

Picture Manual here:
Attachment Manual-Grainforest-v1-664cfc80e58f2.jpg