The GS MIDI X module

The name GS MIDI X is shorthand for Granular Synth MIDI eXpander.

This module enables expressive control of the Granular Synth via MIDI note on/off, velocity and polyphonic aftertouch information. It also provides a simple but effective keyboard split mechanism.

The primary focus of the design is keyboard control but anyone interested in polyphonic sequencing should find something to enjoy.

Introduction

GS MIDI X offers an alternative to the paraphonic control mechanism of the Chord Memory module in live recording mode, The Chord Memory setup relies on real-time quantization and arpeggiation while the GS MIDI X setup is more direct and responsive. Both approaches have their strengths and weaknesses so one isn’t necessarily better than the other but skilled keyboard players will probably gravitate more to the GS MIDI X setup.

It is possible to use GS MIDI X and Chord Memory at the same time to great effect but this is an advanced topic that is discussed later after we have gone through all of the basics.

All of the demonstration presets on this page require keyboard input to work. The Granular Synth excels at bass sounds so do try out the presets using lower registers as well as mid range and higher ones.

Polyphonic aftertouch (also known as polyphonic key pressure) is generally only available on top of the range MIDI keyboards as it requires a pressure sensor for each key (unlike channel aftertouch which works on pressure applied to the entire keybed). However many DAWs allow you to create polyphonic aftertouch data using their piano-roll editors so it’s something you might still be able to use even if it’s not available as a live tactile input. One way to think of it is as being a bit like a CC that’s assigned on a note by note basis.

Terminology

The following is slightly academic in nature so skip to the MIDI input section if you are in a hurry.

Discussing this module involves using terms like monophonic, paraphonic and polyphonic but unfortunately a source of confusion arises because these terms are usually applied to conventional rather than granular synthesizers.

In a typical keyboard-based subtractive synthesizer a voice consists of one or more VCOs that are fed through a VCA and a VCF. One or two envelope generators controlled by a gate signal based on whether a key is pressed then modulate the VCA and VCF to apply volume and filter contours to each note. There are many variations on this theme but I’m sure you are all familiar with this basic model.

In a monophonic synth there is just one voice, only one note at a time can be played and everything is extremely simple.

In a polyphonic synth there are multiple voices (typically between four and sixteen). This means that when chords are played each note can be assigned its own independent voice.

However this can be expensive to implement so a compromise that is sometimes used is a paraphonic setup. Here each note is assigned to a VCO (or perhaps two) and then the combined oscillator outputs are fed through a single VCA/VCF chain with one or two envelope generators controlled by a single gate signal based on whether any key is pressed.

This arrangement allows chords to be played but because the VCA/VCF and envelope generator(s) are shared it’s not as expressive as a polyphonic setup. Individual notes don’t map to individual voices so can’t be independently articulated.

Now this all makes sense in a conventional synthesizer but in the Granular Synth although there is only a single master VCA/VCF chain and one envelope generator shared by all grains, each grain has its own sample oscillator, envelope generator and VCA (actually it’s more complicated that that as each grain voice uses at least eight VCAs as shown in the block diagram below).

Grain voice architecture when buffer content is mono

Note that grain envelopes in the Granular Synth are called “shapes” rather than envelopes in an attempt to avoid confusion with the main envelope generator. The SHAPE and SIZE parameters combined allow envelope control over the amplitude contour of grains. It’s important to realize that the settings of these two parameters (like the other five grain parameters) are remembered by each individual grain when the grain is seeded. So when the grain engine is running flat-out processing 500 grains the cloud has 3,500 different parameteric values in play at once.

Because each grain has its own envelope in the Granular Synth it’s possible to implement something midway between paraphonic and polyphonic operation but there is no accepted term for this. So rather than get into an argument about whether the GS MIDI X setup allows for polyphonic operation or not we will call it paraphonic. Even though in practice each MIDI note can be assigned its own grain stream and the result sounds like its polyphonic.

To manage CPU load you can use the Granular Synth’s MAX GRAINS knob to set the number of voices available to anywhere between 3 and 500.

The reason why the Granular Synth architecture is not fully polyphonic is that it would require 500 VCFs and it’s simply not worth spending so much CPU on this as as filtering is not really intrinisic to granular synthesis. The filter in the Granular Synth is just a convenient stereo effects processor applied to the output of the grain engine.

Parallelizing the main envelope generator and VCA is also not really worthwhile as individual grain shape modulation offers plenty of potential. Therefore it makes sense to leave the main envelope/VCA as a paraphonic cloud shaping tool and spend the saved CPU on supporting higher grain density.

MIDI input

MIDI IN

The MIDI IN socket at the top of the module allows for any MIDI signal in Voltage Modular to be used but if nothing is connected then it is normalled to the MIDI From Host socket of Voltage Modular’s I/O Panel. So by default MIDI from any connected MIDI keyboard or DAW will control the module without the need for a cable.

The LED next to the MIDI socket flashes when any MIDI message is received.

If you have any problems try checking Voltage Modular’s Audio/MIDI settings to ensure that your MIDI input device is enabled.

One-shot mode

The simplest possible setup is shown in the image below.

Simple Piano patch

To download the .voltagepreset file click on the button below.

Downloading presets

This uses the Piano 1 test sample with audition trim applied to isolate just the first note. The OFFSET knob has been adjusted so that grains start at the beginning of the sample. The OMDU switch is set to Monophonic to disable any arpeggiation. The SIZE knob is turned up to maximum. The SHAPE knob is set so that the bulk of the sample dynamics are preserved. The RFLCT button is disengaged to stop high-pitched grains bouncing back off the end of the buffer.

The effect of the above changes to the default state is that a trigger pulse to SEED IN of the Granular Synth results in a simple one-shot piano note at whatever pitch is being fed to its V/OCT socket.

In one-shot mode whenever GS MIDI X receives a MIDI note on message it schedules the ouput of a trigger to its SEED OUT socket while simultaneously sending a 1 volt per octave signal to V/OCT OUT.

So if you have a MIDI keyboard attached to your computer then you should be able to hear a piano sound when you play the keys. The notes don’t sustain like a proper piano would when you hold down keys but what you should quickly notice is that you can play multiple notes at once.

There are some major limitations. Beyond not being able to sustain a note by holding down a key, hitting the same key twice doesn’t stop the old note from playing and because all the sample oscillators are playing back the same sample just at different speeds then higher notes have shorter duration than lower notes and the formants sound unnatural outside of a limited pitch range.

Simple improvements

We can make a few changes to improve on this very basic patch.

First we can make each note’s MIDI velocity control the respective grain’s amplitude. This gives us a touch sensitive response that makes the sound more expressive. All that is required is a cable linking the VEL OUT socket of the GS MIDI X module to the CV input of the AMP parameter on the Granular Synth plus some adjustment of the AMP parameter knob and associated attenuvertor to get the right amount of control.

Note that polyphonic aftertouch is only applicable in multi-seeding mode.

Secondly we can introduce some stereo width. There are a number of options here but let’s go for a vaguely naturalistic stereo effect where the stereo location of each note is based on its pitch, with bass notes to the left and treble notes to the right. All that’s needed to achieve this is to patch the V/OCT OUT signal to control grain pan and tweak the PAN knob and associated attenuvertor for the desired spread.

Here is the improved version…

Piano patch

It’s not perfect by any means but if you avoid the higher registers and use it in the context of a mix then it’s a half decent piano that uses nothing more than two modules and a handful of cables. The main point is that this demonstrates some basic principles that you can apply to samples of your own choice.

And although this patch is a bit like a poor man’s sampler one nice thing you can do is bang out some very fat chords. With MAX GRAINS at the default setting of 150 you have in effect a 150 voice synthesized piano at your disposal. You can go all 1960’s avant-garde and slam a forearm on your MIDI keyboard if you want to test this. Although the built-in compressor will kick in and tame things – try turning the COMPRESS knob down to minimum to go fully mental.

GS MIDI X doesn’t do much that’s novel in one-shot mode apart from enable the keyboard split mechanism discussed later and guarantee that multiple MIDI note on messages always produce serialized seeding but in multi-seeding mode things get far more interesting.

Multi-seeded goodness

The Granular Synth isn’t a sampler so we can’t do things like set looping points to add a sustain segment to the piano sound. But we can generate sustained sounds by seeding a stream of grains. We’ve been doing this most of the time already with the Granular Synth.

Normally the Granular Synth produces just one grain every time it is seeded either by its internal clock or from an external trigger.

With GS MIDI X in one-shot mode each MIDI note on event seeds a grain with the pitch of the note (when pitch modulation, quantization and arpeggiation are disabled).

However feeding a seeding clock signal to the GS MIDI X’s SEED IN socket switches it to multi-seeding mode. Then rather than the Granular Synth producing a single grain on each seeding operation it instead generates a very rapid burst of grains – one for each note that is currently held. So if you play a five note chord then five grains with the correct pitches are generated every time the SEED IN socket recieves a trigger.

This grain burst is so quick (one grain per 24,000th of a second) that it appears that all the grains are created simultaneously and that the Granular Synth’s grain engine is playing polyphonically.

Here’s an example of a pad using multi-seeding.

Dark Pad patch

The technical term for what’s going on is time-division multiplexing. So even though the cables sending data from the GS MIDI X module to the Granular Synth are mono cables they are in fact each carrying up to 128 channels of polyphonic information. i.e. seed clock, 1 V/Octave pitch, split logic, 0 to 5 V velocity and 0 to 5 V polyphonic aftertouch for each possible MIDI note number.

In multi-seeding mode GS MIDI X remembers the velocity that each note had when it was pressed (or sequenced) so each time a seeding operation occurs each grain stream retains its own unique velocity value. What the velocity information actually does depends on how you patch the VEL OUT signal to the Granular Synth. In the example above VEL OUT is patched to AMP so the amplitude of each grain is controlled by the velocity of the corresponding note.

Polyphonic aftertouch likewise works on a note by note basis but unlike velocity it can change over the lifespan of a note depending on the pressure applied to individual keys. So each time a seeding operation takes place the current pressure applied to each note is transmitted in multiplexed format to the POLY AT OUT socket. As with velocity it depends on how you patch this signal as to what effect it has on the sound.

The multi-seeding capability is really useful for relatively conventional playing styles but it can be used more experimentally too. Perhaps you prefer something slightly more psychedelic…

Strange patch

This combines audio-rate seeding with some unusual and chaotic types of modulation. It’s a good demonstration of some of the unique capabilities of the Granular Synth.

Or something slightly atonal…

Tempest

To tweak how crazy this gets adjust the pitch attenuvertor. To tame it plug the Chord or Chord Memory module into the QUANTIZE socket.

Using with the Mighty Piano Roll module

By default the MIDI IN socket of GS MIDI X is normalled to the MIDI OUT on Voltage Modular’s I/O Panel but you can bypass this normalization simply by plugging in some other MIDI source such as the MIDI OUT from Cherry Audio’s Mighty Piano Roll sequencer.

Granular Synth controlled by Mighty Piano Roll

Modulation destinations

Note that because velocity and polyphonic aftertouch apply to individual notes (and are therefore multiplexed) the VEL OUT and POLY AT OUT signals should normally only be used to modulate grain parameters rather than global parameters. This is because only grain parameters apply to individual grains. The grain parameters are OFFSET, PITCH, AMP, SIZE, SHAPE, PAN and REVERB (FX).

The Grain Parameters

One typical assignment might be VEL OUT to AMP and POLY AT to OFFSET. Then the volume of each note in a chord would be proportional to the speed you hit each key and the timbre might alter in a complex fashion as you vary pressure on each key (providing that your keyboard supports polyphonic aftertouch) .

If you patch VEL OUT to say the FILTER CV input of the Granular Synth then because the filter cut-off is not a grain parameter it won’t control the filter on each note. Instead it will make the filter cut-off that’s applied to the entire synthesizer’s output proportional to the velocity of the last key pressed. If you use POLY AT instead then the filter cut-off will be proportional to the pressure of the highest pitched key pressed. Neither of these assignments are recommended in multi-seeding mode though as the CV will have a brief burst of noise at the beginning of each seeding operation due to the multiplexing. Use the monophonic VEL or channel AFTER TOUCH ouputs from Voltage Modular’s I/O Panel instead.

Keyboard split

GS MIDI X provides a simple mechanism for keyboard splitting, where the pitch range is split into lower and upper parts and the Granular Synth produces different sounds for notes in the two ranges.

The split point defaults to C3 but to change this all you need to do is click on the LEARN button and then press the key that you want to be the lowest note in the upper part of the keyboard split.

For MIDI notes occuring in the upper range the SPLIT OUT signal is 5 V while for those in the lower region it is 0 V. As with V/OCT OUT, VEL OUT and POLY AT OUT this signal uses time-division multiplexing to transmit polyphonic data for each of the 128 possible notes and therefore this signal is normally only used to control one or more grain parameters as only grain pararmeters apply to individual grains.

It might seem a little strange having just an on/off output signal for this function but you can make it work by patching the SPLIT OUT socket to one or more of the grain parameter CV inputs on the Granular Synth. Then use the parameter’s main knob to set the lower split value and the parameter’s attenuvertor knob to set a positive or negative offset from this value for the upper split.

The most obvious use of the SPLIT OUT signal is to control the OFFSET parameter of a Granular Synth as this enables notes played in the lower and upper range of the keyboard to have radically different timbres. So for instance in the following example the lower part of the keyboard triggers a guitar sound while the upper part produces an electric piano sound. The split point is at F2 so notes below this will use the guitar sound while notes of pitch F2 or above use the piano sound.

Importantly these sounds are available at the same time and “paraphonically”.

Guitar EP Split patch

As the SEED IN socket of GS MIDI X is not connected the patch above is in one-shot mode.

The sample was created by chopping up a couple of the test samples using START, END and EXPORT then joining the clips together using LOAD and APPEND. Offset ATQ and Size ATQ are used to make it easy to select between the two sounds.

Keyboard split using two Granular Synths

By using two Granular Synths at once it’s possible to gain far greater control over keyboard splits.

Twin Split patch

This patch uses the multiplexed SPLIT OUT signal to enable one or the other Granular Synth module for seeding by modulating their AMP parameters. This switching happens at such a high speed that the process is imperceptible.

The Granular Synth at the top of the screen responds to the upper portion of the keyboard split and the Granular Synth beneath responds to the lower portion. This is achieved by setting the upper module’s AMP knob fully CCW and the attenuvertor fully CW while setting the lower module’s AMP knob fully CW and the attenuvertor fully CCW. The two modules then behave in opposite ways to the multiplexed SPLIT OUT signal.

From a CPU efficiency point of view it’s important to set these controls at their extremes as then the Granular Synths can optimize their performance by not seeding grains when their amplitude parameter is zero. However you can adjust things so that there is some “leakage” for creative reasons if you wish.

Gate out

The GATE OUT socket produces a signal that is 5 V when any note is on and 0 V otherwise.

It could be connected to the GATE input socket of the Granular Synth to control the envelope generator.

Because the grain streams are gated by which notes are pressed and each grain has its own envelope (shape) then you aren’t forced to control the cloud amplitude with the envelope generator/VCA but it’s there as an option. It’s most useful when grains last a long time as for instance a slow release won’t have any impact if all the grains have already decayed.

You might also find controlling the envelope generator with the gate signal useful for other types of modulation. For instance to create a filter sweep at the beginning of a cloud as in the example below.

Slow Filtered Saws patch

Quantization

When the Chord Memory module is used for paraphonic control then, by the very nature of the mechanism, grain pitches always match the chords being played (unless the OMDU switch is in Off mode). This is very useful as one can experiment with pitch modulation and arpeggiation while keeping everything “in tune”.

If you want to play fully manually with the Granular Synth producing exactly the pitches you are performing on a keyboard then use the GS MIDI X module as described above but without any pitch modulation and with the OMDU switch set to Off (or Monophonic providing that nothing is plugged into the QUANTIZE socket and you are not using pitch bend).

If you want to quantize your keyboard input while using GS MIDI X then you can feed an appropriate S-Poly signal to the QUANTIZE socket and set OMDU to Monophonic. So for instance you could plug in a Chord Memory module, program a scale and then whatever you play on the keyboard will be adjusted to fit that scale.

If you are a skilled keyboard player then such an idea will seem useless but what it does allow is the option to use pitch modulation (and arpeggiation if the OMDU switch is set to Down or Up) to offset what you are playing while still keeping the results in key.

The patch below provides a good introduction to the complex interactions possible when using GS MIDI X for gated multiplexed seeding and V/OCT control and Chord Memory as the source of both quantization and the data used by the Granular Synth’s arpeggiator.

Hybrid Guitars patch

To understand what’s going on begin by holding down a single key. What you will hear is a generative tune based on the interaction between the note you chose, the notes in the sample (it’s just the Guitar 1 test sample), the offset modulation and the chord programmed into the Chord Memory module.

The seeding rate is set pretty low so the seeding is happening once per beat. The PROB knob is set so that rests are introduced now and then for some rhythmical interest. Offset is being modulated by the Envelope Generator in loop mode and this cycles at a different rate to the seeding which adds variety whilst not being random.

Both Offset and Size ATQ are engaged and the ATQ SENSITIVITY has been adjusted so that the transients match the four guitar plucks. This means that the offset modulation from the envelope generator locks on to the beginning of the plucks and the grain size automatically adjusts so that each grain lasts the length of the pluck.

The OMDU switch is set to Up mode so each time a grain is seeded the Granular Synth’s arpeggiator jumps to the next note in the chord programmed into the Chord Memory module but the results are rather more complicated than with a conventional arpeggiator. Here’s the diagram from the main Granular Synth page as a reminder of how pitch control works when the OMDU switch is in Down or Up mode…

Once you feel familiar with what’s happening hold down two keys rather than one. Then you will hear two guitars playing in time each with its own base pitch but with each pitch offset by different adjacent chord notes. The arpeggiation runs in pairs as there are two grains being seeded in a burst for each seeding operation. Because it’s a five note chord we get the pattern 1+2, 3+4, 5+1, 2+3, 4+5 repeating. Take some time to figure out how this all works and experiment with different intervals between the keys you are pressing. It sounds complicated but because everything passes through the quantizer the results are highly musical.

Then hold down three keys at once. With a five note chord programmed into the Chord Memory the pattern is 1+2+3, 4+5+1, 2+3+4, 5+1+2, 3+4+5 repeating.

Experiment with playing different chords on the keyboard and reprogramming the chord in the Chord Memory to understand how the two interact. No doubt you have already figured out that if the number of notes played on the keyboard matches the number of note programmed into the Chord Memory then the pattern becomes fixed.

A more complex setup involves using the Chord Memory module in live record mode fed to the QUANTIZE socket while simultaneously using the GS MIDI X module for the main pitch and seeding control.

This more complex hybrid approach is rather quirky and at first it’s difficult to get one’s head around the potential when combined with pitch modulation and arpeggiation. The result is mostly based on what notes you are currently playing but part is based on what notes you have played since you last lifted all of your fingers off of the keyboard. It’s a bit confusing but kind of magical!

Hanging notes

As with any module that uses MIDI connections, if you unplug cables while notes are playing it’s possible to end up with notes that are stuck on. This occurs because a module receives a note on message but not the corresponding note off message. If you get carried away repatching stuff and end up with hanging notes you can reset things using the free Adroit MIDI Panic module. Simply plug it into the GS MIDI X MIDI IN socket and press the ! button.

Availability

The GS MIDI X module is included in the Granular Synth bundle. Click here to visit the Cherry Audio store page.