Tuesday, 7 April 2020

Max For Live 'Control Voltage' Smoothing device for Ableton Live...

I admit here and now that I don't know what to call the signals that go from an LFO to a mapped parameter in Ableton Live. If they weren't inside a Digital Audio Workstation (DAW) but were transferred by patch cables in a modular synth, then I would call them 'control voltages'. Ableton call the process 'remote control', but they don't seem to say what the signals are called. So in the absence of any authoritative guidance, I'm going to call them 'control voltages' but in quotes - that way I'm trying to indicate that they aren't voltages, but that I'm hijacking the phrase because I don't know what they should really be called...

But I do know the name of the subject of this blog post: MIDIsmoothR! A combination 'control voltage' smoothing / slew rate limiter, plus a random 'control voltage' source. Here's the story of how it came to be:

The story

When I published MIDIrandomA and MIDIrandomABC, they were intended to be interesting alternatives to the LFOs that are often used as sources for 'remote control' of parameters in Ableton Live. Particularly the 'random' 'noise' waveforms that old-school synthesists like me call 'Sample & Hold' or 'S&H', even though there's a whole unspoken abbreviation in there - we mean: 'the jerky segmented waveform that you get when you apply a Sample & Hold device to a Noise generator' and the source of the resonant filter cut-off sound cliche.

In a world where there seems to be an assumption that noise comes in only three flavours: 'white', 'pink' and 'coloured' (The terminology is derived from the same spectrum-based descriptions as for light. So 'white' light contains all of the visible wavelengths, just as white noise has the same intensity at every audible frequency. Pink light contains more lower wavelengths (at the 'red' end of the spectrum) and so pink noise contains more lower frequencies.) Anyway, just as there are lots of different colours of light, so there are many, many different types of noise - from rumbles to hisses, with wind and 'waves breaking onto the sand' somewhere in there as well.

MIDI effect devices with names containing 'LFO' almost always provide a 'Random' waveform. Sometimes there are two different versions: a pure noise waveform, plus a flat segmented 'Sample & Hold' version. The problem is that having just a single jerky segmented 'Sample & Hold' waveform assumes that the distribution of values is right for your application, and it might be that you do not want each possible level to happen with the same probability. Which is where MIDIrandomA and MIDIrandomABC's remit comes from - lots of different varieties of random, noisy 'control voltages'.

But sometimes that S&H waveform is too jerky, and you need something more rounded, which is where MIDIsmoothR is used. It allows the 'control voltage' 'remote control' of any LFO or other MaxForLive device to be smoothed with a three different processing options. Just map the LFO or other device so that it is 'remote controlling' the 'CV in' rotary control in MIDIsmoothR, and set the 'input/Random' selector switch to 'Input' so that the 'control voltage' will be processed inside MIDIsmoothR.

The 3 processing channels? A allows waveform quantisation and power-law distortion. B allows separate smoothing to be applied to the rising and falling parts of the incoming waveform (plus global smoothing as well). C allows you to remove rapid changes (below the limit set by the 'Delta' rotary control), and then allows that to be smoothed. You can choose which of these smoothing/processing options is sent to the output with the A/B/C switch, and then offset or scale the value that is sent to the parameter which has been selected by the 'Map' button. (Click on 'map' and then click on the parameter that you want to control...).

If you switch the 'Input/Random' selector to 'Random', then MIDIsmoothR behaves very similarly to MIDIrandomA, although the A, B and C channel processing/smoothing is slightly different. As the name suggests, MIDIsmoothR is designed for smoothing!

The big selection box on the upper left hand side chooses how the input is sampled. The 'Not synced' top option uses the LFO clock set by the 'Rate' control to grab the input value. The other options on this selector allow various MIDI messages to trigger the sampling:

- Any MIDI Note,
- Any change of MIDI Note number (so repeated notes will not trigger the sampling),
- MIDI note number 0 (the lowest MIDI note),
- MIDI note number 0 with a velocity of 1 (the lowest note and the quietest velocity value), or
- Any MIDI note with  velocity of one (the quietest velocity).

Three in One

It isn't immediately obvious when you first look at MIDIsmoothR, but it actually allows you to do three different things:

- Process 'remote control' 'control voltages' in various ways, including smoothing (sometimes called 'slew rate limiting' on modular synths)
- Generate random 'control voltages' and map them to controls in other devices (Ignoring the 'CV in' rotary control)
- Sample & Hold 'control voltages' from other devices (LFOs, MIDI Controllers, etc.) using MIDI event triggers and use that to control other devices

If I can think of anything else that I can squeeze in there, it will be in a future update... And on that topic:

Version 0.01 had a bug in channel B, which caused a fixed value to be output. This is fixed in version 0.02.

'Remote control' processing...

MIDIsmoothR is quite unusual - there aren't many 'remote control' 'control voltage' processing devices written in MaxForLive for Ableton Live (or indeed, native devices from Ableton!). Normally, you use the 'Map' button to send 'control voltages' over the 'remote control' system from a device that produces 'control voltages' (like an LFO, or MIDIrandomA!) to a control parameter in a device that you want to control (just about any parameter (rotary controls, sliders, buttons... in just about any device). But MIDIsmoothR goes in-between those two devices, modifying/processing the 'control voltages'. (For a while, I did wonder if I should call it PROCsmoothR...)

Above is a diagram of a 'remote control' connection from an LFO to a Delay device. The LFO 'Map' button would show that it was controlling (for example) the time delay buttons in the Delay device.

Adding MIDIsmoothR to process the 'control voltage' looks like this in Ableton Live:

On the left side, the LFO 'Map' button shows that it is controlling the 'CV in' rotary control in MIDIsmoothR (and note that the input selector in MIDIsmoothR is set to 'Input'). On the right side, the MIDIsmoothR 'Map' button shows that it is controlling the time buttons in the Delay device.

(The 'L' is because this is where the mapping was set up - to the Left channel time delay buttons in Delay. But the 'sync' button is active in Delay, and so the right time delays are the same as the left buttons. You can see two channels of random 'control voltages' mapped to the left and right time delay buttons separately (sync is off) in the blog post about MIDIrandomABC... and you can hear the effect in this SoundCloud demo...) 

So the 'remote control' connections diagram now looks like this:

The LFO controls the CV In rotary control of MIDIsmoothR, which processes the LFO waveform and then controls the time delay buttons in the Delay device. Although you can't see the connections explicitly in Ableton Live, the text that replaces the 'Map' in the 'Map' button gives slightly cryptic clues...

In use

You could apply different random delay times to different notes in a sequence, which sounds really unusual.

Or you can randomise the detune of a two oscillator synth...

Or you can use a smoothed 'control voltage' to change the Size or Decay Time parameters of a Reverb, which can sound a bit like granular synthesis. Randomly changing the 'Diffuse' parameter in a Reverb sounds like a more sophisticated version of the classic 1980s 'gated reverb' effect...

Getting MIDIsmoothR_mr02

You can get MIDIsmoothR_mr02 here:


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


(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 implementing MIDIsmoothR_mr02 requires some quite sophisticated processing of a random noise source, so it probably isn't straightforward to do from off-the-shelf analogue modules, and is probably easier to do digitally. Assuming that a maths/data processing module can do the required computation, then there's one noise generator, one processing module, some triggering logic, an LFO for the free-running version, and a sequencer for parameter storage, giving an ME of 4 or 5!


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

No comments:

Post a comment