Friday 28 February 2020

Low-latency MIDI Note Filter (& Monitor) in Max For Live for Ableton Live...

I can't remember where I saw the question.

But, anyway, here's the answer. A Max For Live plug-in that does MIDI Note filtering (maybe sieving is a better word), polyphonically, with quite low-latency (in the MIDI path, there's a single look-up table, no multiplies, and definitely no modulus or division operations.) and it even monitors the incoming MIDI notes so you can see what notes you might then want to filter. It might be possible to speed things up more using Gen, but that's for another day or two...


(What usually happens with these things is that despite me diligently searching around, I won't have found any examples of this type of utility... But the moment that I publish one, I then discover that there are zillions of them already out there, normally with one standard 'classic' that 'Everyone' uses. So I will apologise in advance, now, up front, for releasing Yet Another MIDI Note Filtering Utility. (YAMNFU) I think of this as a 'discoverabilty' paradox, and I nearly got a patent based on something related, but that's another story, and this isn't that type of blog...)

MIDIfilterNOTEmr


The screenshot above shows MIDIfilterNOTEmr actively filtering C3 and D#3 out of a MIDI stream. Here's a conceptual diagram of what it does:


Imagine all the notes being sorted and separated into separate flows, and then going through tubes: one tube per note. Unfortunately, the C2 and D#2 tubes are sealed up with rubber bungs, and so no C2 or D#2 notes will get through. MIDIfilterNOTEmr is like a 'sieve', really.

So those two highlighted light purple notes mean: 'remove these note from the MIDI stream.'


Here's a diagram that shows the filtering or sieving process happening with piano rolls:


And in detail for MIDIphiles... (One thing does intrigue me about the timestamps in the screenshot below - the time delay through MIDIfilterNOTEmr seem to be negative. I would love to know what is happening!):


Finally, a screenshot of what you would see in Ableton Live during debugging or testing:


The MIDI flow is from left to right, so the first MIDI Monitor shows the six notes that are coming from the clip. These then pass into INSTfilterNOTEmr, where the D, D# and E are highlighted, and finally, the MIDI flows into the right hand MIDI Monitor plug-in, which  shows that the highlighted notes have been removed.

(I changed the highlighted notes because the MIDI Monitor plug-in starts at C, and I wanted a gap in the block of notes!)

Walkthrough



Probably the first thing to do with INSTfilterNOTEmr is put it in Monitor mode, so that you can see the notes which are passing through it (When it isn't Monitoring, it is Filtering or Thru'ing). Notes that are detected are highlighted in what I will call light purple - the phrase 'light blue with a hint of purple' is too long.

Based on those notes, you then select the ones that you want to pass through, and you press the 'Run' button. So whilst it technically is a 'filter', a better description might be to call it a 'sieve' - because you can set individual notes to be removed. The notes you have selected (one note is fine, too!) will be shown as light purple in colour, and they will then be removed from (filtered out of) the MIDI stream that is passing through the plug-in - actually, if you look at the MIDI stream, then you will find lots of MIDI Note Off messages, which is something that I previously exploited in the MIDIprob devices. Basically, if you set the velocity in a MIDI Note On message to zero, it becomes a Note Off message. To stop the filtering, then you press the 'Clear' button, and all notes will then pass Thru the plug-in, unimpeded.


If you want to add or remove notes, then click on them in the keyboard graphics so that they are no longer light purple, and then click on the 'Run' button again to update the filter.

If you want to turn off the filtering then you can just use the 'Power' button in the top left hand corner. If you click on the 'Clear' button then that does indeed put the device into 'Thru' mode, but it also clears the notes! I did wonder about adding another button called 'Thru/Filter' that doesn't clear the highlighted notes, but the 'Power' button does this already!

(Because I'm using Max For Live and Ableton Live here, then I'm using the 'C3=60' MIDI Note numbering convention. I know there are other conventions, and the whole 'MIDI and Middle C' topic is one that I steer well away from.)


In Monitor mode, incoming notes are shown as light purple.

In Run / Filtering... mode, notes that will be filtered out are shown as light purple.

In Clear / Thru... mode, all notes should be white or black as usual.

The '!' button is a  panic button that should stop any stuck MIDI notes. My usual 'borax-object-based 'held notes' prevention stuff is built-in, so hopefully you should never need to press this button.

The block of squares are 18 preset memories. Shift-click to store a filter. Click to recall a filter. Shift + (option/alt) to delete. MIDI Program Change messages (0-17) can be used to recall presets (1-18).

The presets are stored with the plug-in when you save a Set in Ableton Live.

MIDIfilterNOTEmr01 does something that I'm not very keen on with its user interface. Instead of being modeless, there are several different 'states' that it can be in. Now I know this is bad design, but in this case the alternative would be real coding, and Max For Live is quite tricky enough for me.

Using it.


Please. Try it on the output of arpeggiators, on the output of drum clips (to save muting with those little buttons), or on the output of clips that have too many notes! You can thin out pads or melodies, or even create motifs from blocks of notes that are too dense and unstructured to be usable conventionally. You can bring order to chaos by restricting the output to just a few notes, even though the input is lots of notes (so perhaps in installations and performance...).

You could even use it as a huge version of the factory Scale plug-in that isn't restricted to a single repeated octave - with MFNMR the entire MIDI Note range is available to you. (Ah, and that's an important consideration - one way of doing a similar type of filtering/sieving is just to transpose the notes that you don't want to note number zero, or note number 127, and to rely on most synths not being able to make a noise that low or that high. MFNMR allows you to create music for whales and for bats, and anything in between, with no restrictions.)

So, nothing much in the way of applications then... I'm kind of intrigued that there isn't something like this in the Ableton factory set of MIDI plug-ins - and I know that you can do this by using a MIDI Effect Rack and having 128 Velocity plug-ins in it, and 128 rows (one per note), and a lot of time and effort, and you get a 'less than perfect' user interface for your time and trouble. But you can do it - I just prefer something a little neater. (but don't look inside: I'm not noted for my tidy M4L coding...

Inside

Oh, and here we are inside.

The Max For Live code to do this 'sieve' or 'filtering' process is quite simple:


1. Clicking on the keyboard graphic object highlights the notes in light purple, and these are sent to a 'list'. The 'list' is the contents of the grey box full of 127 '1's: one per MIDI note number. Highlighted notes would replace the 1 with a zero in the list. In the case shown, there are no highlighted notes, so there are no zeroes in the list - but imagine that there are one or two!

2. MIDI arrive at the input of the device.

3. Only MIDI note and program change messages are needed for processing in this device, so the 'midiselect' object extracts those from the MIDI stream and sends the remaining MIDI messages to the 'idiot' object, which acts as a MIDI 'Thru' to the next device in the chain in Ableton Live.

4. The MIDI Note messages are decoded into 'note number' (the left hand output) and 'velocity' values (the right hand output).

5. This section processes the MIDI velocity value. The 'zl lookup' object takes the 'list' and treats it as a look-up table: it 'looks up' each MIDI note number and sees what value is stored in the list at that position, and then outputs that number. So if MIDI note number 0 had been highlighted, then the first number in the list would be a zero. The output of the 'zl lookup' object goes to the 'select 0' object, which does one of two things: if the input is a zero, then the left hand output activates, and that little grey box will output its contents: a zero. if the input is a 1, then the right hand output will be activated, and this time the little grey box will output the value of the velocity from the 'unpack' object. So when there is a zero in the list, the velocity is going to be zero, but when there is a 1 in th list, the velocity is going to be left unchanged. So when there is a zero in the list, whatever the velocity value was is replaced with a zero, and a zero velocity value means a Note Off, so the Note On is changed to a Note Off, and the note has effectively been removed, filtered, sieved...

(Those little grey boxes are very useful. Notice how one of them is just a store for the value zero (which never changes), whilst the other is a store for the velocity (which changes all the time). So the same little grey box does two different things!)

6. The MIDI note number and the processed velocity value are turned into a MIDI Note message and sent to the MIDI output, thus going to the next device in the chain in Ableton Live.

Getting MIDIfilterNOTEmr

You can get MIDIfilterNOTEmr here:

  https://maxforlive.com/library/device/6023/midifilternotemr

Here are the instructions for what to do with the .amxd file that you download from MaxforLive.com:

     https://synthesizerwriter.blogspot.co.uk/2017/12/where-do-i-put-downloaded-amxd.html

(In Live 10, you can also just double-click on the .amxd file, but this puts the device in the same folder as all of the factory devices...)

Oh, yes, and sometimes last-minute fixes do get added, which is why sometimes a blog post is behind the version number of MaxForLive.com...

Modular Equivalents

In terms of basic modular equivalents, then MIDIfilterNOTEmr is tricky. I'm not aware of a MIDI processor utility module or CV processor module that does this type of filtering for more than one note at once, and so we enter the awkward territory of needing 128 pretty-sophisticated utility modules, plus loads of parameter storage, and an ME of over 150-ish. Using programmable utility modules then you might be able to customise something, but that tends to be at the 'specialised skills' end of the modular user spectrum. Of course, someone is now bound to let me know about a new bit of 'under the counter' custom firmware for the OxyProceyBlue75 module that makes this sort of thing a complete doddle...


If you find my writing helpful, informative or entertaining, then please consider visiting this link:







Tuesday 25 February 2020

256 oscillators (I mis-counted) plus Detune control...in a Max For Live plug-in.

My excuse is that I was distracted. On Twitter I under-stated the number of oscillators in my INSTframeOSCmr Max For Live plug-in for Ableton Live 10. There are actually 256: 64 per frame, but there are two parallel pairs of frames, and if you select the 'Stereo' button, then there are two separate oscillator banks per channel, so what you hear is 256 oscillators in total.


But whilst I was looking at the design, I saw a better way of doing the stereo routing, and so I added that. I also figured out a way to solve one of the biggest problems that I had with the user interface - drawing lines in the Frequency grid. The result is INSTframeOSCmr02, as usual a free upgrade from maxforlive.com.

I also realised that the frequency grids aren't easy to understand, so here's a guide to using them, plus details of the new 'Detune' control.

First we need to see how the frequency grid and the spectrum plots align...

Spectrum plots and frequency grids


1. Single low frequency

Here's a spectrum of the basic frequency grid setting - a horizontal line. This gives a single frequency at the output. (Note that the 'Detune' rotary control is set to zero.)



One way to think of how this is working is to just take the frequency grid and rotate it clock-wise - that horizontal row of orange blocks turns into a vertical line, which is the single frequency shown in the spectrum (Okay, so spectrum analysis always turns frequencies into these weird spikes that are narrow at the top and wider at the bottom, but that is just the way that the maths works). Now that the frequency grid is rotated, low frequencies are on the left, and high frequencies are on the right - just as in the spectrum:



2. Single high frequency

If we re-draw the orange blocks at the top of the frequency grid, then we get a single frequency 'spike' at a high frequency in the spectrum:


And if we rotate the frequency grid, then you can probably see how the two line up...:



3. Two frequencies: Low and High

If we draw low and high frequency horizontal lines in the frequency grid, then we get two lines in the spectrum. (Notice that the oscillator index doesn't matter to the spectrum - you can try it yourself by drawing the two horizontal lines with different positions, and the spectrum will stay the same):


And the rotated frequency grid now looks like this (the blue cursor just happens to be where the two orange lines change frequency - this isn't significant!):



4. Three frequencies

So what about three frequencies? Well, we just draw three horizontal lines in the frequency grid:


And the rotated version looks like:


At which point you may notice that the spacing of the three frequencies in the frequency grid and the spectrum are different! This is because the frequency grid horizontal axis is 'linear', where the frequency goes up in equal steps, whilst the spectrum's horizontal axis is 'logarithmic' where the frequency goes up in steps that keep doubling. This is exactly the same way that notes double in frequency when you transpose them by an octave. So a C2 at 110 Hz, becomes C3 at 220 Hz, and a C4 is 440 Hz, whilst a C5 is 880 Hz. So the spectrum's 'logarithmic' horizontal axis is a good way of showing musical intervals: a C2, C3, C4 and C5 would all have the same horizontal spacing. Unfortunately, the Max 'multi slider' object that I'm using for the frequency grid does not have a logarithmic axis option.


5. Detune

You can see how the logarithmic horizontal axis works by adding 'Detune' to the 'Two frequency' example. Notice how the low frequency (the right-hand orange horizontal set of blocks in the frequency grid) gives a wide band of frequencies in the spectrum, but the high frequency (the left-hand orange horizontal set of blocks in the frequency grid) gives a much narrower band of frequencies. The detune values that are applied are the same in both cases - the frequencies that are added or subtracted are the same, but the way that the spectrum shows the resulting band of frequencies is different. Actually, to sound correct musically, then the detune values should be larger for higher frequencies, but that's not how I programmed it...


Okay, that completes the tutorial on the alignment between the frequency grids and the spectrum plots.

How to use the frequency grid...

1. Single frequency

Now that you have a better idea of what is happening on the frequency grid and the spectrum, let's look at that single frequency example again. When you look at the frequency grid and spectrum now, then you should see that the horizontal orange set of blocks in the frequency grid corresponds to the single 'spike' in the spectrum plot:



2. Rising ramp

And next, the plot that seems to confuse people. A rising ramp on the frequency grid... Remember that the horizontal axis is the oscillator index, so what the rising orange line means is that the frequency goes up as the oscillator index goes up - each oscillator will produce a different frequency. So this will produce a block of frequencies:




3. Chords

Next, some horizontal lines drawn by dragging the mouse horizontal across the grid. This gives four different frequencies (a chord!), because all of the oscillators along the horizontal axis are set to the same vertical frequency:




4. Wobbly lines give bands of frequencies

And now to that problem I mentioned. If you aren't good at drawing horizontal lines with the mouse, then you actually don't get single frequencies, but you get broader 'bands' of frequencies. if you look, you can see that the lines are not horizontal, they are 'wobbly' in the vertical direction, and this produces the bands of frequencies in the output:



5. Detune...

Now for Detune. Here's that first 'single frequency' setup, but with the 'Detune' rotary control turned up past half-way, it is as if that horizontal line was very wobbly up and down vertically. So now you don't need to try to wobble the lines, you just turn up the 'Detune' rotary control. What you get is bands of frequencies instead of single ones:



6. Detuned chords

Finally, a nice neat horizontal 'chord' grid, but with quite a lot of 'Detune' - so you get several bands of frequencies all mushed together (The screenshot doesn't capture the dynamism of the spectrum that you get here - it is going up and down all over the place!):


The Detune rotary control saves you the hassle of trying to draw wobbly horizontal lines - and most importantly: you can quickly adjust the control, instead of having to redraw wobbly horizontal lines with more or less wobble.

Detune?

The 'Detune' rotary control applies little frequency offsets to the oscillators. It does this with different values for each grid - each grid has a captured list of random values that it uses to apply the detuning to the oscillators. Which brings me to this post's 'Max' content, and it concerns the 'vexpr' object.

Vexpr works on lists. Give it a list like (1,2,3,4) and it will process the 1, then the 2, then the 3, and finally the 4. So one object in Max allows you to change four values at once. So in INSTframeOSCmr I use it to process the frequency grid, which is a list. I'm going to use a single diagram with numbered 'points of interest':



1. This is a 'bang' event that indicates that a frame has been activated, and that the oscillators should load new values for their frequency and amplitude.

2. The frequency grid outputs a list of 64 frequency values.

3. This message box contains a list of 64 different randomly-generated 'Detune' values.

4. The 'Detune' rotary control controls how much detune is going to be applied to the frequency grid output values (which is a list of 64 frequency values).

5. This is the first of two 'Vexpr' objects. This one has 'Scalar Mode 1' set, and so it multiplies every value in the list of detune values by the single value from the Detune control. In this case, the Detune is set to zero, so the output of this Vexer object will be a list of 64 zeroes.

6. This is the other 'Vexpr' object. This one does not have Scalar Mode 1 set, and so it works on two lists. It adds the list of frequency values from the frequency grid (2) with the list of Detune values, so if you imagine that the 'Detune' rotary control was set to something other than zero, then the list of detune values would be 64 different randomly-generated values, and they would be added, one by one, to the 64 frequency values from the frequency grid output. If lists were not used here, then there would need to be a lot of * and + objects in this Max For Live Patch! (As a quick aside, what would happen if this '+' object was a '*' (multiply) object instead? Would this affect how the detune is applied to the frequency values?)

7. I have cheated here by pasting in a message box containing the 64 frequency values that would have been output if the Detune control was higher than zero!

8. The 'detuned' list of frequency values eventually gets to the 'ioscbank~' object, which contains the 64 oscillators for this frame.

Note that the two different versions of Vexpr do very different things.

  • The Scale Mode 1 version takes a list and processes every item in the list with a single value (from the Detune rotary control in this example).
  • The other version (without the Scale Mode 1) takes two lists, and processes every item in one list with the same item in the other list. 

Getting INSTframeOSCmr

You can get the updated version of  INSTframeOSCmr here:

     https://maxforlive.com/library/device/6012/instframeoscmr

Here are the instructions for what to do with the .amxd file that you download from MaxforLive.com:

     https://synthesizerwriter.blogspot.co.uk/2017/12/where-do-i-put-downloaded-amxd.html

(In Live 10, you can also just double-click on the .amxd file, but this puts the device in the same folder as all of the factory devices...)

Oh, yes, and sometimes last-minute fixes do get added, which is why sometimes a blog post is behind the version number of MaxForLive.com...

Modular Equivalents

In terms of basic modular equivalents, then INSTframeOSCmr would require two LFOs, and 256 VCOs, a lot of stored parameters (blocks of 16?) to do the frame loads, a mixer and a Ring Modulator, giving a total of well over 260 ME, which is the biggest count so far, I think. You might want to use some specialist additive oscillators instead of brute-force VCOs!

If you find my writing helpful, informative or entertaining, then please consider visiting this link:




Sunday 23 February 2020

DAWless or Ableton Live Only - Inspired by a Ricky Tinez YouTube Video

There are a lot of electronic music resources available on YouTube, and some of the best, in my humble opinion, are the videos published by Ricky Tinez on his channel:

Ricky Tinez channel screenshot

It was a video from Ricky published on the 4th of January 2020 that caught my attention recently, and it inspired a series of exploratory experiments. The video starts out by looking at the 1010 Music Blackbox sample player (and more - almost any short description is going to be a total understatement of what that box can do...), but it segues into a live jamming session using Ricky's live-performance-oriented modular synthesizer, where he syncopates a melody line, and uses rhythmic timbre variation to give a compelling groove with lots of easily accessible variations.

Ricky Tinez Video screenshot

Ricky's video uses the 'live performance, hardware only: no computer' buzz-word 'DAWless', which got me wondering if you could do something similar in Ableton Live 10 Suite, because I'm a contrariwise sort of person. As even more of a challenge, I wondered what would be possible without using Max For Live, because my immediate thought was that I could program up a Max For Live plug-in to do a lot of the rhythmic control. (I'm using the 'Suite' edition of Live because I like and use the software instrument plug-ins a lot, but you could easily replace them with VSTs or samples via Simpler, the sample player included in the Standard and Lite editions of Ableton Live.)

Limitations are the spur of creativity. That's what they always tell you in moments of desperation - like when the only sound source you have is a referee's whistle and you have to produce a TV soundtrack. So by deliberately limiting myself to the factory presets in Ableton Live 10 Suite and with no Max For Live, I was removing all of my usual 'Get Out of Jail Free' cards. Well, prop-less and some time later, I'm pleased to report that a DAW can produce some interesting emulations of some of the workflows that you would normally associate with a small modular synth. That strange whooshing sound that you can hear is me swimming against the tide, because this is the opposite of 'DAWless' - more like 'DAW Only'.

There's a YouTube video that shows a screen capture of me showing the results here (and I have made the Ableton Live .als file available for download as well). I'm going to follow approximately the same flow as the video in this blog post...

DAW Only

I started with a basic drum underpinning using the factory 'Core 808' drum kit the comes with Ableton Live 10, followed by a factory reverb, and just in case, a factory Auto-Filter that I might use later to give some variation to the drum sound (As it turned out, I didn't need to do this, but the effect is there, ready and waiting if I do ever need it.).

Drum synth screenshot

The drum pattern itself is not sophisticated, and is a single bar, repeated - for tech demos then I think the detail should only be where you need it.

Drum notes screenshot

The bass line is just more underpinning, and is just four notes, single bar, repeated. Just for fun, there's a little bit of MIDI velocity variation, but that's something I do automatically without thinking, and once I'd done the clicking and dragging, I left it in place.


The bass is just a modified factory preset for Ableton's 'Analog' VA 'Virtual Analogue' synth from AAS (Applied Acoustics Systems), followed by a little bit of factory reverb. I know that there's a specific factory 'Bass' synth plug-in, but I just like Analog... In front of the synth, there's a factory Velocity MIDI plug-in the is turned off, but it is there so I can rapidly give a bit of extra velocity variation if I feel that it is needed. Again, this is just an insurance policy against boredom setting in. Confidence in live performance is all about knowing that you have done the preparation, and you are ready for any eventuality. Foreseen difficulties mean that you can have pre-prepared mitigations waiting to be activated, and everything can procede calmly and smoothly.

Bass notes screenshot

The bass line isn't going to win any prizes, but it is just background supporting material, and so the more it lurks in the background, the better.

The final part of the backing tracks is a couple of chords, so that there's more character to the background than just drums and bass. I used a factory preset for the AAS Collision physical modelling synth that you get in Ableton Live 10 Suite - because I love marimbas and their ilk. (Let me know when you get sick and tired of me putting 'factory' in front of everything!)

Marimba synth screenshot

There's a MIDI 'Random' plug-in in front of the Collision PM synth, set up so that I can add random octave transpositions if I think that the chords are too boring.

Marimba synth effects screenshot

After the Collision PM synth, there are three effects, a delay to give the chords a bit of rhythmic interest, then a factory chorus to round the marimba sound out a bit, and finally a factory reverb to put the chords back in the mix.

Marimba synth notes screenshot

I so wanted to use my Max For Live chord utility here! But that would have been total overkill for two simple chords. Once again, there's nothing complex or clever here, just plain C major and an inverted C sus 4 (I've always had a weak spot for suspended chords!). That completes the backing tracks.

Syncopation


Which brings us to the start of what I hope is going to be the interesting bit, where I try to get the same sort of syncopated notes and rhythmic timbre variations as Ricky got using his modular synth. My starting point is a factory AAS Analog VA synth again, using a factory preset, and preceded by 'if I need it later' factory Random for octave variation, 'if I need it later' factory Velocity for MIDI velocity variations, and another factory Velocity plug-in for doing the gating for the syncopation:

Melody synth screenshot

After the synth plug-in, then since I'm going to only be using monophonic sounds, we can go West-Coast and have a factory Saturator plug-in to do 'wave-shaping' timbral changes, then a limiter to keep volume under control, followed by a factory Ping-Pong Delay and a factory Reverb. Once again, just in case, there's an LFO in there, but I'm not going to use it now since that would break the 'No Max For Live' limitation.

Melody synth effects screenshot

The 'Melody' line, and I hesitate to promote it to such dizzy heights, is more of the 'straight-forward' mind-set - just eight notes with an interval of an octave:

Melody synth notes screenshot

For the syncopation function, we need to be able to turn these notes on and off easily, using a simple control mechanism. For this, one easy approach is to use the factory MIDI Velocity plug-in, and to control the 'Out Hi' parameter. The 'Out Hi' rotary control sets the maximum MIDI velocity for a not that passes through the Velocity plug-in - but it you set it lower, then the maximum velocity goes lower, and if you se it to zero, then no notes pass thru - because a MIDI velocity of zero is the equivalent of a Note Off message. So if the 'Out Hi' parameter is set to 127, then all notes will pass through unchanged, whereas if it is set to zero, then no notes pass through.

The clip envelope is one of the newest features of Ableton Live, and is the key to doing the syncopation. All you do is create an up and down rectangular set of steps, gong between zero and 127, and set this to control the 'Out Hi' parameter in the Velocity plug-in:

Clip envelope note gating diagram 1

The diagram shows the clip envelope that is controlling the 'Out Hi' parameter in the 'Velocity plug-in, and just jumps up and down between zero and 127. The Velocity plug-in then processes the MIDI notes going to the Analog synth. If I annotate the clip envelope with ticks for when the value is 127, and with crosses for when the value is zero, then we get a clearer picture of what the clip envelope is doing:

Clip envelope note gating diagram 2

So the clip envelope drives the Velocity plug-in, which 'gates' the notes, and in the example shown, the fourth and eighth notes in the melody never get to the synth. So the clip envelope shape is 'gating' the notes before they are received by the synth. If the clip envelope shape changes, then the gating will change - and editing clip envelopes is easy!

One really easy way to change a clip envelope is to 'Unlink' it and then change the length:

Clip envelope example screenshot

In the screenshot above, the clip envelope is set to a length of slightly less than a bar: 3 beats and 3 'ticks'. So each time the bar repeats, the clip envelope will be a tick early. After four bars, the clip envelope will be a beat early, and after 16 bars, the clip envelope will be back in sync. As the clip envelope moves around in the bar, the notes that are allowed through the 'gating' function will change, so there will be 16 patterns of notes gated from the melody: one per bar.

If we set the clip envelope length to 3 beats, then there will be four patterns of notes gated from the melody, and so on. Just setting the clip envelope length, or moving one or two of those '127' high values, will change the notes that will be produced by the 'Melody' synth. And if you hover the mouse just underneath the top of one of those high clip envelope values, it will change colour (to blue) and you can then move it vertically as if it was a slider, so moving it between zero and 127 is easy. You can hear this note gating happening live in the video, as various lengths of clip envelope give changing patterns of notes played from the melody.

Timbral changes


For timbral variation, then a second clip envelope can be signed to the 'Drive' parameter in the factory Saturator plug-in audio effect. This time, the clip envelope looks much more conventional - just a sloping line or two:

Clip envelope example screenshot

Note tha this clip envelope is also unlinked, and it is set to 1 bar and 1 tick, so it is going to be later by one tick for each repeat of the bar, which gives 16 different times during the bar when that 'rise and dip' is gong to happen. Once again, changing the length of the clip envelope is going to give different timings for when the Saturator Drive hits the maximum value from the clip envelope.

Clip envelope example screenshot

The screenshot above shows a clip envelope with a length of one tick less than a bar, so this time the peak is going to happen earlier and earlier in the bar. The two clip envelopes (gating and saturator) are separate, so you can set them to different lengths and they will just repeat away, giving complex rhythmic changes in timbres and syncopated melody notes gated from the melody.

Controlling these variations is easy: change the length of one of the clip envelopes, or edit the clip envelope. All of this can be done, glitch-free (unless you over-drive the Saturator!), live during performance - which can be seen and heard in the video.

Marimba delay...


The Marimba chords have a little 'busy' or 'pickup' motif added by using a clip envelope to control the Wet/Dry mix of the Delay plug-in:

Clip envelope example screenshot

The blue highlighted section can be moved up and down as if it was a 'slider'-type control:

Clip envelope example screenshot

So turning it on an off is easy! But what is it doing?

Delay screenshot

 The clip envelope is controlling the Wet/Dry mix of the factory Ping-Pong Delay, and is the first time that a clip envelope has been 'linked' so that it runs at the same rate as the main bar timing! So for most of the bar, the wet/dry mix is set low, and so you only get faint ping-pong echoes, but for the last beat, the wet/dry mix goes very high and there are lots of echoes, and then at the end of the bar they all go away again. It adds an interesting variation to the playing of the chords. Can you figure out what would happen if this clip envelope was unlinked?

(In the .als file, there's a double 'pickup' example!)

Getting the YouTube video and the Ableton Live .als file


You can see the video here.

You can download the .als file here.

screenshot of ALS file contents


Modular Equivalents

Ricky's video is a good source for seeing one way to do similar transformations using a modular synthesiser, but there are many ways to achieve similar results in a modular or a DAW, and so assigning ME values is not a good indicator in this case.

Links in this blog post

1010 Music Blackbox

AAS (Applied Acoustics Systems)

My YouTube video

Ricky's video

Thanks

I must thank Enrique Martinez for his help in making the video and this blog post possible. His reply to my initial email happened amazingly quickly!


If you find my writing helpful, informative or entertaining, then please consider visiting this link: