Sunday, 3 December 2017

Complex timing generator for Max For Live and Ableton Live

The first presentation at Loop 2017 was Andrey Smirnov's wonderful talk and demo of Leon Theremin's 'Rhythmicon', ending with a superb live performance piece. It was an inspiring opener to a wonderful event, and it got me thinking...

Probably GENerator

If you've been following my 'Probably' series of MaxForLive devices, then you may have noticed that they have gradually been influenced more and more by modular synthesisers. ProbablyLFO could easily have some radical graphics, a name suggesting 'West Coast' influences, and be a hardware module in a rack, except that it is only in software in Ableton Live at the moment. Producing hardware is a time-consuming process, and I'm still considering what my next device will be...

But, as we have just passed through one annual winter 'holiday' event, and with another looming, this seemed like a good time to release yet another unusual giveaway, and with the 'Rhythmicon' still tucked away at the back of my mind, I wondered what I could do that was exploratory rather than just a dull copy... And, trust me, some of my previous M4L giveaways at this time of year have been useful, but just a little bland. 

The result is ProbablyGEN, (GEN is short for Generator, not Max's 'gen'!), and it is a three channel (after dFreez_mr, I've temporarily given up on trying to squeeze four channels in!) asynchronous / synchronous note generator. Each channel has a choice of free-running (async) or synchronous (divided from Live's transport), a probabilistic 'velocity' grid (with a special variation on the previous user interface specially for this type of application), length control per grid, direction controls (forwards, backwards, scanner), and completely straight-forward (gasp!) MIDI Note output selection. So you get three note polyphony (or use the 'Chord' MIDI plug-in) which is ideal for simple drum sounds, or simple three-part monophonic music.

The screenshot above shows three synchronised channels, all running at 1:1 (i.e., the same as Live's transport), and all playing 16 column grids (more on this in a moment). The far right hand side shows the MIDI Notes which are being generated, which is a giveaway for what this is doing: 36 is Kick, 38 is Snare, and 42 is Closed Hi-Hat. I did consider calling this ProbablyD, or ProbablyDrum, but then I realised that you could use it for other purposes than just drums, and so I went for the generic name of 'GENerator'.

The 'Columns' setting and the direction buttons on the right might need some explanation. Why is the middle channel 'Columns' control set to 17 instead of 16? Actually, this is a consequence of it running back and forth in a 'scanner' type pattern - the little '+' is there to remind you that when you choose the 'scanner' direction then you need to increment the 'Columns' control by 1 (or not, as you prefer!). So, actually, all of these channels have 16 columns in the active part of the grid - but there's more later on this... 

With these settings, from the lowest channel upwards: the bass drum is playing four 'on the beat' hits, with the final column (or the 16) exploiting the new UI twist that I have added: the upper white cell is indeed a '66' velocity. but the lower white cell is a '0' velocity on the black row, which doesn't mean 'zero velocity' (that would be a Note Off...), but means 'don't play this note. Now because the probability grid takes multiple instances of white cells in a vertical column as providing choices for that event, this means that there are two things that can happen here: a kick drum played at a velocity of 66, or no kick drum, and with each having the same probability - so the kick drum will play about half of the time. When you listen to this, then you hear that 'the drummer' keeps putting in extra little appoggiatura ('pick-ups') at random, just before the main beat at the start of the bar. So here we have a software emulation of an impatient foot...

The middle 'snare' channel is scanning back and forth, and so we get a single snare (at 33,66 or 99 velocity) or a cluster of 2 or 3 snares on alternate repeats. Again, the 'zero' bar is used to make that middle snare in the cluster happen about half of the time.

The 'hi-hat' channel has 'on the beat' hits, with off-beats at half probability using the 'zero' row again, and a cluster of 'sometimes' at the end of the bar, followed by an end of bar tick that always happens.

A rhythm less ordinary... 

The screenshot above shows a slightly more unusual setup. This time, the bass is as before, whilst the snare is playing slower, at 0.889:1 to Live's transport, and the active part of the grid is only 15 columns long (wide?). The hi-hat is now faster, at 1.333:1, and there are 22 columns in the active part of the grid. In this example, I have deliberately chosen the values of Divide and Column so that the lengths are the same duration in time, but this does reveal an interesting side-effect. It is quite difficult to change the Divide control and the Columns control at the same time, and so you will find that the timing gets out of alignment, as you can see by the three vertical cursor lines not being aligned in a vertical line. There are two ways to fix this: stop Live's transport and restart it; or hit the 'In' button in the top left hand corner, just underneath the 'start' light circle. This forces a reset of the internal counters, but doesn't sync it back to the bar or beat of Live's transport, which can be a useful effect. Either way, you get to control the channel timing alignment as you want.

The hi-hat is also busier in this last few columns, with 25% and 33% probabilities from the page of the 'zero' row. But you've probably not got the time to concentrate too much on this, with all of the timing complexity that this setup gives. Each of the channels is outputting notes in its own synced time, but the timing isn't the 'four-to-the-floor' many ears are used to hearing. Nope, this could perhaps be interpreted as being simultaneously an emulation in software of the best AND/OR the worst software drummer in the world...

This is only scratching the surface of the timing options that ProbablyGEN gives you - the 'Divide' range is deliberately set wide, so you can go fast and very slow (try increasing Live's tempo too!). And if you use the 'Free' button, then the tempo of that channel is completely independent of Live's transport, and so is totally asynchronous. For hi-hats, this can sound pretty cool! (This is also where tempo-aligned echo can be useful to explore...) But hey, that's enough presents given away in one blog article!


If you replace a drum kit with a synthesiser, then ProbablyGEN becomes a three channel monophonic step sequencer with potentially independent timing of the three channels (or any degree of sync that you want). As I said earlier, this is the sort of thing that many people associate with modular synthesiser racks, and not a laptop running Ableton Live.

By using the 'Chord' MIDI effect plug-in, then one, two or all of these notes can be expanded into chords. Depending on how you set this up, it can be described with words like 'jazzy', or 'obtuse'... (and if you've ever listened to the 'ChromatixT' demos on SoundCloud, then...)

As usual, ProbablyGEN is available for free from Enjoy doing interesting things away from 4:4 timing as we move into 2018!

Unexpected surprises!

ProbablyGEN outputs all three notes when you first instantiate it in a track, so beware!

Did someone mention a Parappa the Rapper reference?
5 Minutes of Parappa the Rapper Remastered Gameplay - YouTube 2mins 10 seconds

Thursday, 30 November 2017

Probabilistic flexible LFO for Ableton Live

ProbablyLFO is not an ordinary LFO, although it can be used to produce the usual simple repetitive, predictable modulations that are expected from this type of slow modulation oscillator. But it goes much further than that, into more unusual areas, and so it allows deep, complex and often unexpected and unpredictable control over parameters in ways that can be very musically useful.

LFOs normally provide a speed control and a waveform selector, and LFOs for use in Ableton Live add a way of mapping the output to a parameter. ProbablyLFO has all of these, but the way it approaches each of them is intended to extend and enhance what it does. So there are four ways to control the speed, a small number of preset waveforms which can: be edited live; have random values added; can be filtered/smoothed; and output, in various ways. The most conventional bit is the parameter mapping, which works exactly the same as in any other LFO - and that's because that bit of code is taken from the Ableton example M4L LFO!


ProbablyLFO is part of the Probably series, and is a companion plug-in to all of the step sequencers (Probably, ProbablyZ, and ProbablyS have been released so far). The common feature is probabilistic control, and so the sequencers do not produce static repetitions of the same sequence (unless you set them to do so, of course) - instead you can control how they produce variations in pitch, octave, probability of a note event happening, velocity and length (and more...). ProbablyLFO brings probability to LFOs...

So what does ProbablyLFO do differently?

The speed of an LFO sets the timing of the modulation that it controls. So a typical use might be the  vibrato of an oscillator, or a slow sweep of a filter or phaser. ProbablyLFO has four sources for its basic underlying 'Speed':
- a free-running oscillator (i.e asynchronous to Live's tempo clock)
- a synced divided version of Live's tempo clock (i.e. synchronous)
- Note events (so each incoming note from a clip causes the LFO to run)
- Poly events (the LFO runs faster or slower depending on how many notes happen at once)

The 'Free' setting is the simplest. There is a 'Speed' control that sets the basic frequency (in Hertz or cycles per second) that the LFO runs at. (You will see why I call it the 'basic' frequency later on...) This speed is not synced to the main Ableton Live tempo clock (i.e. it is asynchronous) and so can b used when you want a modulation to happen with no connection to the main tempo - slow sweeps are one example that work well.

The 'Sync' setting allows you to synchronise to the main Ableton Live tempo clock, but you can control the division ration - so the control is called 'Divide'. If you set the 'Divide' control to 1:1, then ProbablyLFO runs at the same speed as the Ableton Live tempo clock. Set it to 2:1 and it runs at twice the speed of Live (the fastest is 4:1, which is 4 times Live's tempo). Conversely, if you set it to 0.5:1 then it runs at half the tempo of Live, and you can go all the way down to 0.125:1, which is one eighth of the tempo of Live. There are other ratios as well between these limits, but they are all locked to Live's tempo.

The 'Note' setting has no control - or rather, the control is in the incoming MIDI notes. It takes any note events in the clip on the track, and uses them to run the LFO. So the more notes there are, the faster the LFO goes. So this is another type of 'sync' - the LFO is locked to the notes, but if you add extra notes to the clip, then the LFO reflects that by running faster. Simultaneous notes count as one note when using this setting.

The 'Poly' setting also has no front-panel control, and is a variation on the 'Note' setting. In 'Poly' the number of notes that are present simultaneously controls how quickly the LFO runs, so chords make it run faster than single notes. Once again, this is 'synced', but it is another type of sync.

The 'Note' and 'Poly' modes can be very useful musically, because the LFO is tracking the occurrence of notes, and it not tied directly to time or tempo. You may need to spend some time getting used to these two settings, because this type of sync may be quite unusual (I've not seen it anywhere else before, but I haven't seen everything!).


LFOs traditionally have  predictable selection of waveforms (or wave shapes: LFOs arguably have wave shapes, whereas audio oscillators should have waveforms, but this is just semantic detail, and waveform is often used interchangeably with waveshape): sine, triangle, sawtooth, square, pulse and some sort of random or 'sample & hold' waveform (and sometimes a 'draw-your-own' waveform as well...).

ProbablyLFO has a similar selection of waveforms provided as presets, but has a much larger possible set of waveforms (very large numbers of them: many millions). The waveforms are provided as starting points for you to edit to suit your own purposes, and so some of them may appear weird at first.

The 'Flat' waveform is the first unusual waveform. It looks like a thick line across the screen, and you may be wondering why it is included at all.

To understand what is happening, then you need to know what is happening in the waveform grid. The 16x16 grid in the middle of ProbablyLFO shows time horizontally, and value vertically. Single white cells in a column produce that value as the output, but when there is more than one white cell in a vertical column, then the output value will be chosen randomly from those values. In this case, there are three rows of white cells, and so the output waveform can be any of those three values...

So the 'Flat' waveform is actually anything but flat: it is a sequence of values chosen from the middle three: a kind of random ripple. You can change the smoothness of the ripples using the 'Smooth' control (sorry about the obviousness of the naming here!): lower values make the output 'jagged and step, whilst higher values smooth it out. But take care: if you apply too much smoothing then you will miss the peaks and troughs. You can see the smoothed output of the grid on the right hand side of the grid - in the big vertical bar.

To hear this modulating a parameter, you will need to use the 'Map' button on the right hand side of ProbablyLFO to select a parameter. It is normally a good idea to 'undo' or 'clear' any pre-existing mapping by clicking on the 'X' button first, an then clicking on the 'Map' button, followed by the parameter that you wan to control. When you have selected a parameter to control, then the name of hat parameter should appear in the 'Map' button. The final things you may need to tweak are the 'Offset' and 'Depth' controls, which set how the smoothed output value from the grid affects the parameter. The best starting point is to set the Offset to zero, and the Depth to 100%, and see how this affects the parameter you have chosen. Starting with a filter frequency parameter in a synth is a good starting point for exploring how these controls work. You can invert the way that the value goes by using the 'Normal/Invert' button. The 'Flat' setting can be a bit subtle, so you may not hear much effect on the filter, so you could try increasing the filter resonance, or you could click the little '+R' button to add some randomness and give you more range of values in the output.

Clicking on 'Flat' again will give you the original, clean waveform again, and you've probably already clicked on the '-R' button to see if that removes white cells - which it does. 'Clear' clears the whole grid. Hopefully, you've just realised that there are a huge number of possible waveforms in ProbablyLFO, and exploring them all could take a long, long time...

The 'Both' waveform looks like just slight ripples at the top and bottom of the range of values. But, in practice, this produces an output which makes big jumps up and down, or little jumps in the ripples. You can control the smoothness and size of the jumps with the 'Smooth' control, of course. This tends to sound a bit like the 'Sample & Hold' or 'Random' waveforms that you get in conventional LFOs, depending on the setting of the Smooth control.

'SineH' is the traditional sine waveform that you were expecting to find in an LFO, except that it is horribly quantised! The 'Smooth' control can remove as much of the blockiness as you want, so the grid is slightly misleading. 'SineV' is not normally found in LFOs, and gives an interesting output: not random, but structured, and with lots of variation each time it repeats.

'RampU' (Up) and 'RampD' (Down) are the usual sawtooth waveforms, but they also provide a good opportunity to explore some additional controls. The 'Direction' controls on the right hand side shows '<', '<>' and '>', and ProbablyLFO normally defaults on first use to '>', which equates to 'forwards' or moving from left to right across the grid. If you select '<' then the cursor line moves across the grid 'backwards' from right to left, and if you select '<>' then it 'loops' back and forth from left to right, and the sawtooth or ramp waveform becomes a triangle waveform at half the speed. You may have already figured out that if you want a full speed triangle, then you click on 'Clear' and then draw in a single cycle and select '>' or '<'...

'Rect' provides various rectangular waveforms: from square to pulse. Just keep clicking on the button until you get a waveform you like. (I did consider making all of the 'waveform' preset buttons work this way, but decided against it in this version. I also wondered if I should make all of them 'add' without clearing... I'm still considering the best UI to use in a future version...)

'Bars' gives you four vertical bars, whilst 'Blobs' gives four blobs. These are intended (as all the presets are) as starting points for editing, or adding (or removing) random white cells with '+R' or '-R'.

The final control in this version is the Columns control, which sets the number of columns in the grid. This is normally set to 16, but you can set it to smaller values if you want to change the length and waveform that the grid produces. The final parameter-affecting version of the grid output, after smoothing, offset and depth, is the small vertical bar on the far right hand side.

And that concludes this quick description of ProbablyLFO. I hope that you like and enjoy exploring its many and varied creative modulation control possibilities (and probabilities).

ProbablyLFO is available, for free, from

You will get a '.amxd' M4L device file. You need to add this to Ableton Live so that you can add it to the track device chain.

How do I add it to Ableton Live?

Live 9 provides two ways to add a .amxd M4L device file:

1) Drag the .amxd device file into a track, and then click on the save icon (right: floppy). This will automatically save the device to your ‘User Library’ folder in ‘Places’ (the ‘head outline’ icon)

2) Put the .amxd device in a folder you have allocated to M4L devices, then add that folder to the Browser. Just scroll down to the bottom of ‘Places’ and click on ‘Add Folder’ . Then select the folder where you have saved the .amxd device file. (The ‘power user’ technique is to just drag that folder into ‘Places’)

Sunday, 26 November 2017

dFreez_mr - M4L live performance utility

Sometimes, inspiration hits you at interesting times. There I was, in Studio 4 at the Funkhaus at Loop 2017, giving the second of three Open Space Lightning Presentations (one per day), when I realised that sFreez_mr was missing a vital set of functionality. sFreez_mr is an M4L Audio Effect that provides 4 parallel loop audio players whose output is slowly mixed between using a 4-phase LFO. I made it to produce complex mixes for background atmospheres and special effects - so put four wind and rain loops into it, and you can generate non-repeating 'atmosphere' tracks for installations, stage and theatre usage.

What I realised mid-presentation was that every time I used sFreez_mr, I would raise the channel fader for the track it was in at the start, and lower the fader in that channel at the end. My headset mic was going direct to the PA mixer, and so I didn't have that signal to duck the channel volume inside Ableton Live. What I needed was an automatic volume fade in and out control...


dFreez_mr is the result of taking that idea and working on it for a few days. It it often happens that what seems to be a simple idea is more complex to implement, and this was definitely one of those cases. I quickly realised that I needed to have four different states:
1. Off. Zero volume.
2. Fading up. Volume goes from zero to maximum at a defined rate, using a non-linear curve.
3. On, Maximum volume.
4. Fading down. Volume goes rom maximum to zero at a defined rate, using a non-linear curve.

I also realised that I wanted a minimum of controls, whilst also providing lots of feedback to the user. I ended up with a single button, which 'starts' the fading upwards from the 'Off' state to the 'On' state, and which then 'stops' the audio by fading downwards from the 'On' state to the 'Off' state. I added two controls for setting the times to fade up and down (twist the dial to set the Seconds and Minutes), and some indicators to show the progress in the fade process, and finally, a state indicator, which says which state is currently active.

In practice, you load up four samples into the players in the 'Off' state, then when you are ready to go, you press the 'Start' button.

You wait whilst it goes through state 2 and eventually gets to state 3: fully 'On'. It then stays in this state until you do something. In dFreez_mr, this is where you would wait for the 'Load' lights to go 'bright' (showing it is safe to change the sample in the player because the volume is zero at that point) and you swap samples...

When you want to stop the audio, then in state 3, you press the 'Stop' button, wait through state 4, and it eventually gets to state 1 ('Off') again.

Now, if you've ever been to a 'Drone' music concert, then this is more or less what happens during one of those performances, so there may be ways of using dFreez_mr for more than just background atmosphere effects.

As usual, you can get dFreez_mr from Like many of my ideas, at this stage, it is not perfect, not production ready. In fact, it is quite some way from being properly finished, needs some tidying up inside, parameters naming, etc, and so it is free. I hope you enjoy using it.

Sunday, 29 October 2017

sFreez_mr - 4-phase LFO looped sample live performance tool in M4L for Ableton Live

When I programmed gFreez_mr, I was exploring granular synthesis, and so an 'atmospheric sound generator' was a logical way to use the results of my experimentation. sFreez_mr takes the underlying  'live performance' framework of gFreez_mr, and turns it into a sound generator based on looped samples. So the way you work with both M4L plug-ins is the same, but the sound sources are different. Maybe in the future I will make a hybrid of the two...

So this blog entry is a rambling user manual for sFreez_mr...


sFreez_mr allows the simultaneous playback of up to four separate samples in a way that is designed for live performance, but it can also be used in the studio as well. Instead of manually mixing between the sound samples, it uses a four-phase LFO with variable 'overlap waveforms' to control how the mixing happens. A simple sine wave just mixes between three sounds at any one time, whilst other waveforms can mix between pairs or even all four. (My original plan was to make the phase shits between the four LFO outputs user-controlled, but this required three controls, and actually, there weren't that many useful sets of settings, so (unusually for me) I went for the classic audio plug-in design approach of 'less controls is better').

There's a clear design decision here. DJs normally mix between and process (with effects) two main sources of sounds (vinyl, CDs, decks, sample players... (insert your favoured technology here)), and fly in additional sounds from other sources - and they do this live. This treats the sound sources as components in a music instrument that works at the level of samples of audio, and there's enough abstraction from the one detail (down at the sample level) to allow them to 'play' those samples expressively in a performance that has structure and connects at an emotional level. sFreez_mr removes just the mixing part and automates it, leaving the performer/DJ free to work with 4 separate sources of sound at once - and actually, by changing the LFO rate or using the On/LFO/Mute buttons, the mixing is controllable too. So you can think of the 4-phse LFO as a 'helper' that enables the assembly of more sound sources into a live performance by reducing the loading on the performer/DJ. I'm expecting great things from talented performers /DJs when they start to get the hang of what sFreez_mr lets you do...

Now this wouldn't be one of my M4L creations if it didn't have LFO-controlled panning, and here four separate LFOs are used to animate the four LFO-controlled samples components into a constantly shifting atmospheric sound. sFreez_mr is particularly good for slowly evolving background sounds, and it has a number of functions that are specifically designed for live use.

Let's look in detail at each of the sections that make up sFreez_mr:

Sample Players

There are four looped sample players, which can be 'Load'ed with AIFFs (or WAVs), or you can drag and drop samples onto the four waveform displays. The four samples are each colour-coded: red, yellow, green and blue. Each sample player waveform display has several sections: there's the central waveform display, the sample name on top of that, and two rows of buttons (above and below). That's a lot of functionality in a small space!

Left-most are four big 'Load' buttons that allow direct loading of samples. On gFreez_mr, these were the record or 'capture' buttons for grabbing the source material for the granular players, and I did consider  having the same functionality here, but eventually went for providing dedicated buttons AND drag & drop. These buttons cycle at the rate set by the 4-phase LFO, so you can always see which sample track is not currently in the mix. When the button is bright, then the LFO has set that tracks fader to off or very low, and so you can make changes to that track without being heard. So when the button goes bright, that is when you replace the sample (or drop a new sample in the waveform display - one technique is to grab the sample and hover over the waveform display, waiting for the button to light up!).

The top row of little buttons transpose the sample, whilst the lower row of buttons stretch or shrink it. The range of transposition is limited, so I made some decisions about the available settings, and so you get fifths purely for usability (a future version might allow these to be customisable). The centre setting is the 'no transposition, real time' setting, and either side of this the sounds get more and more altered. In the centre default, then you get a mildly conventional sample playing device that operates in what many people would class as 'DJ' territory, whilst away from the centre, you get more atmospheric and experimental sounds - but I encourage everyone to break through any barriers, recommendations or preconceptions of use. I debated for quite a while if I need a Play button, and eventually decided to leave it in, (although for me it stays on all the time, and so need not be there, but I wanted to leave the control there for other performance styles...). The 'Play' button is the rounded edge button next to the 'chevron' forward (to the right) or reverse (to the left) buttons. You can use the chevron buttons to change the sync of samples by reversing for a time and then going back to forwards. I use this for rhythmic samples where I want to change timing relationships , and I do it when the 'Load' button is bright so that the next time that sample track gets back into the mix it is different.

Track controls

The next three buttons are linked and only one can be selected at any time for each coloured sample 'track': On (the sample plays all the time), LFO (the sample volume is modulated by the 4-phase LFO), or Mute (the sample audio is muted). These buttons fade the sound quite quickly, and so shouldn't cause too much audio hassle (like zipper noise), but they are intended to be 'played' live, so don't just dismiss them as being used in setup (especially since 'setup' can be happening live during a performance, not just beforehand).

The thin buttons in the middle are 'group' controls that affect all four sample tracks simultaneously - once again, this is intended for live performance use - so you can quickly stop everything happening by muting all four small tracks, or alternatively, you can blast all four tracks full on by using the 'On' button. Normally, the 'LFO' middle position is where the buttons will be set, and having a single button that restores this can be very useful. On you have learned this user interface, then you may find yourself wishing that other button-based UIs had similar shortcuts...

The final part of the track controls are the LFO displays, which show the 4-phase LFO as four colour-coded virtual faders. Left is off, no coloured bar) and right is full volume (full coloured bar) - just listen to a single track to get your head around this (press the thin central 'Mute' button, then the 'LFO' button for the sample track that you want to audition...). Remember that when the fader bar vanishes, then the 'Load' light will be bright, and you can make changes to that sample track without being heard in the output mix. In performance, your head needs to be in sync with the 'Load' buttons or the LFO fader displays.


The next section is kind of a 'mixer', but very specific to what is needed in this context.

First, there's a display of the audio level for each sample, which helps you keep track of what is playing, and which can be very useful to all you if a track is playing a slow continuous sound, or a bouncy rhythmic sound. I'm never sure if this display should be part of the previous 'track control' section, or if it should be included in the mixer...

Then there are trims for volume for each sample track, and then the Pan LFO controls; frequency and phase. To fix the pan position in the stereo image, you low it right down and use the phase to set where you wan the pan position to be. Note that the phase does NOT map directly to L and R (i.e. All the way left on the has control is not necessarily hard Left panning) - watch the little pan display blob to see where the actual position is in the stereo image.

4-phase LFO

The 4-phase LFO has a rate control that is how you interact with the LFO, but the main number that is shown is how long it takes for a complete cycle (in seconds). The wo things are inversely related - the 'how long' display number is, again, designed for use in live performance. The LFO has additional 'waveforms' that set how the samples are faded in and out, and so I suspect that 'transfer function' is a more accurate description. Anyway, try the new waveforms out: they allow you to vary the number of samples that are mixed at any time. Each waveform gives a different 'feel' to that way that the sample tracks get cyclically mixed together.

Finally, the 'Makeup' control adjusts the overall output volume, whilst the 'Mute' button and 'Gain' control are inherited from gFreez_mr, and allow you to monitor the input audio - which adds to the live performance possibilities...


sFreez_mr is intended to be a live performance tool that can also be used in the studio. To get the most out of any tool when performing live, you will need to have spent time learning how to use it effectively. Also, don't forget that this is 'work in progress'...

sFreez_mr can be downloaded for free from

SoundCloud demo1 - wind
SoundCloud demo2 - rain
SoundCloud demo3 - seq
SoundCloud demo4 - loop
SoundCloud demo5 - fx
SoundCloud demo6 - fx2
SoundCloud demo7 - drum
SoundCloud demo8 - drum

Sunday, 22 October 2017

ProbablyS tutorial - using the newly added memory sequencing

Probably was my first attempt at an 'antidote to step sequencers' - a simple monophonic step sequencer that took a different approach to step sequences by adding probabilistic control over events, as well as legato note lengths.

ProbablyZ added extra time features, a well as separating the octave transposition from the notes in an octave. The controls that you get over time allow probabilistic control over time-warping, which isn't a common feature of sequencers...

Since I first released ProbablyZ, I have fixed the state memories (the little grey squares)(thanks to Cory at Ableton for his help on this!) and improved the sync with Ableton Live's transport. Whilst I was fixing the memories, I tried out one of my further extension ideas, and this is now ready for release...

ProbablyS (available from

ProbablyS adds extra control over the state memories. There are now 12 'State' memories (each grey square can save the state of all the grids to the right - just Shift-Click in one of the grey squares in the black 'Memory' section). To recall a state then just click on the grey square, and it will turn white.

The 'Memory' grid on the left of the vertical bar of memories allows you to sequence thee. Each row corresponds to the associated memory on the right, and so if you set all of the memory cells to the top row only (white cells all along the top of the grid), then ProbablyS will play back just the state stored in that memory. Here's an ASCII text illustration of the layout:

State Grid  OOOOOOOO []  State Memory
            OOOOOOOO [] 

The default setting for the state grid should be similar to the basic setting for the other grids - a horizontal line o white 'cells'. (As with the time grid, the 'cells' are round, not squares...). Time scans horizontally across the cells - and this is shown by a darker cursor line.

If you set the 'repeat' to 1 and the length to 2, and set the second grid position to a different memory, then the memory grid will cycle between those two memories. If you set the 'repeats' to 4, then each memory will play for four times, before moving to the next memory. If you set the 'length' to 8, and the 'repeats' to 8, then it will play each memory 8 times.

The two screenshots above show the 2nd and 8th stage of the 8 step state sequencer (which drives the underlying 16 step grids). The 2nd stage is playing the top memory (see the white square in the vertical memory bar in the 'Memory' section?), which has a very simple set of grids, whilst the 8th stage gas chosen one of 9 possibilities, and has chosen a memory four steps lower, with a much more complex set of grids controlling the output.

As with all the other grids in Probably, you can have more than one white cell in a vertical column, and the choice between the two cells will happen at random. This means that you now have probabilistic control over which memory is playing at any time.

(I'm still working on providing a separate way to store the 'State' grid - and I may provide a preset state in the next version, plus some new functions...)

Looking at just the state grid (plus the time grid so you know where the new Memory section is positioned):

The first two stages (which could each be from 1 bar through to 8 bars long), are set to play the top memory. The next two stages play the next memory down, and the same for the firth and sixth stages. The final two stages are different - they each provide a choice of any of the remaining 9 memories for each stage. So the first couple of stages could be simple introductory patterns, the next two could add some extra detail, and the next two might add some more detail. The final two stages are chosen from a range of memories, and could provide lots of variations of the basic patterns. 

In this state grid, the second repeat stage for the first six stages provides a choice of 1 of 3 memories. As you may be realising, the key to using the state memories effectively is to fill them with fried patterns, and to keep track of where you store each pattern, so that you can then sequence them into builds, breaks and other pats of your song structure. 


Here's a hint derived from hours of playing with state memories:

"Keep shift-clicking to save your work!"

The sinking feeling you get when you click on another memory and you realise that you have just lost that brilliant pattern you were working on, is not a good one... Save, save, save...

My recommendation is that you start with Probably, then try ProbablyZ, and then ProbablyS - the features increase each time if you try them in this order, and this should give a smoother learning curve. ProbablyS is the most complex step sequencer so far in this series, and I have more ideas in the pipeline. 

New to this?

(If you are new to Probably's way of working, then don't forget to set the transpose by setting the record focus to the track with ProbablyS in it, and then playing a note - otherwise you just get very low MIDI notes. Transpose from a clip in the track can still be used to transpose ProbablyS, of course...)

Tutorial for Probably (1st in the series):

Tutorial for ProbablyZ (2nd in the series):

SoundCloud demo for ProbablyZ:

Sunday, 17 September 2017

ProbablyZ Tutorial - adding time warping

When I released Probably, my Max For Live 'antidote to step sequencers' MIDI Effect for Ableton Live, I included some details on how to use it, particularly the way to use the probabilistic 'more than one white square in a column' interface metaphor that it uses. ProbablyZ, the first 'expanded' version, adds in some new grids, and these extend the control possibilities, so I thought it was about time to produce a tutorial...

Programming ProbablyZ

ProbablyZ is an unusual step sequencer that breaks some of the usual rules. Here are the main features:

*NEW* A 'purple' 'Order' grid that allows time to be re-ordered and repeated, with the usual vertical column probability-based control (one white cell in a column means that note plays every time, two white cells means each plays 50% of the time, three cells equals 33% of the time, etc.). 

The red 'Pitch' grid is the same as in Probably, and allows notes to be entered over a one octave range.

The old orange 'Probability' grid has been moved downwards slightly, to make way for a new grid. It allows the probability of a note being played to be controlled, independently of the pitch, octave, velocity and length, and once again, the choice between possibilities can be controlled by having more than one white cell in a vertical column.

*NEW* The newly added, small, red 'Oct(ave)' grid controls the octave shift of the notes, and it is independent of the 'Pitch' grid. The default white cells in the Oct grid are in the middle of the five octave range, so you can shift the note in the 'Pitch' grid up or down by up to two octaves, and the usual probabilistic column control applies, so if you fill all five cells in  column, then the pitch of that note will be shifted to one of those 5 octaves at random each time the column is scanned. 

Having the Pitch and Octave of the notes controlled independently like this provides very precise adjustments to be made to what actually plays. If you have a fixed Pitch grid, but put a bit of variation in the Oct(ave) grid, then the sequence will play those notes, but the octave can vary. You can use this to create lines where just the leading note plays different octaves, or the 'on the beat' notes play a choice from a set of octaves, etc. If you do it the other way round, and put the variability in the Pitch grid, with  fixed Octave grid, then the notes will only play in the ordinary one-octave range. Remember, that this range can always be transposed sing a MIDI keyboard or the Virtual A-L keyboard on a laptop - or by the notes in a Clip. (Oh, and don't forget that you need to set the transposition when you first start ProbablyZ by sending it a note event, other wise it thinks the transposition is right at the bottom of the MIDI range, and you get very low notes!)

The green 'Velocity' grid controls the velocity of the notes in the sequence, and as usual, is independent of any of the other grids.

The blue 'Length' grid controls the length of the notes produced, and is not only independent of the other grids, but it also allows the length of the notes to be controlled, which means that you can have notes overlapping in the output. This is quite unusual for a step sequencer...

Getting Started

I'm still trying to get ProbablyZ to start up with a special default state, and this doesn't always happen. It should look something like the first screen-shot above...

From that starting position, then edit the Pitch grid so that there is only one white cell in the first column, and the Oct(ave) grid so that there is only one white cell in the first column.
I chose a very basic Electric Piano preset for this track, followed by a little reverb - simple percussive sounds are often good when starting work on a step sequence. If you set Live to play, then you get a 'ting', followed by silence for the rest of the bar, and then another ting. So far, so good, and if not, then you did remember to set the transpose by sending a note event, didn't you?

Next, let's explore the Oct(ave) grid. Add four extra white cells in the first column:
Playing this gives us one of five things, dependent on the octave that ProbablyZ randomly chooses for each repetition. If you are used to ordinary step sequencers that always play exactly the same notes every time, then this is your first glimpse of the hidden depth inside ProbablyZ.

When you are bored with those slow tings, then add in some more notes on the beat in the Pitch grid, and give them the same 5 octave choices in the Oct(ave) grid:
This gives us a ting on each beat, with a random choice of octave. This is probably a little too extreme for most purposes! (Used live, it can give the impression that something is about to happen, and can give you time to set up your next song... In the 80s, some bands used Sample & Hold into VCF for the same sort of tantalising effect. )

Next, change the last two Cs to Fs, and adjust the range in the Oct(ave) grid. this is also a good time to tweak the Velocity grid so that the beats are louder, and alter the Length grid so that the beats are longer too:
Okay, so now we have the start of something that has a bit of variation in it, and we can now add in some choices for the second and fourth beats, adjust the Octave so that it feels like a descending line on average, and make the first and third beats longer:
What we are really doing here is defining probabilities. The Pitch grid has set the first note to be a C (always, so 100% probability), and the Oct(ave) grid provides a choice of the upper four octaves (So each octave will happen 25% of the time on average). The second note can be a C or a D#, with a three octave range that doesn't have the top octave included any longer. The third note is always an F, with the four octaves shifted downwards, and the final note is either an F or an A#, with a three octave choice. Taking the final note as an example, then there are six different notes (two notes, three octaves) that could occur, so a specific note will occur 1/6th of the time, on average. Over the course of six repetitions, you might get all of these, and you might not. It is rather like throwing a die (or several dice): you will eventually throw all of the numbers from 1 to 6, but getting them all in 6 throws, or in a specific order, doesn't happen very often...

When you set this sequence playing, then what you hear might be difficult to reconcile with what you see on the grids. There may not seem to be enough white cells to create the variations that you are hearing! If this happens, then read the previous paragraph again, matching the chosen note that you can hear, with the white cells in the Pitch grid and the Oct(ave) grid. As I said earlier, ProbablyZ has hidden depths that are not immediately obvious, and a little time spent getting familiar with the way it works can be time well spent.

At this point, ProbablyZ is playing stuff that is not quite your typical robotic, repetitive step sequence. Now, let's add in some extra notes away from the beat:
You should be able to figure out that these new notes have a fixed pitch and a fixed octave. The lower velocity makes then sound like grace notes or ornamentation. You can experiment with reducing the velocity, or giving a range of velocities, or making these notes very short.

Bending time

So, far, we haven't explored the new 'Order' grid, so let's add a few extra choices to the ornamentation, tweak the octave choices, and increase the length of the beat notes. Then, let's edit the Order grid so that the diagonal is broken, and add in two 'off-the-diagonal' cells: 
 The ornamentation is now chosen from a D and a D# in the first part of the bar, and an F, G or A# in the second part of the bar... Except that the Order grid changes the order in which time happens in all of the other grids. So the first column plays as normal, but the second column jumps to the ornamentation in the second part of the bar, then jumps back to playing the middle part of the bar, and then swaps back to the first little bit of ornamentation just after the middle beat note, and the back to 'time as usual'.

This means that the time order of the columns in all the grids that you see to the right of the Order grid has been changed. Time no longer scans across the grids evenly. Instead, it now follows the Order grid. Watch the dark vertical cursors jump back and forth when this plays...

In detail, this means that after the first C, we will now get a random choice from F, G or A#, then a C or D#, and then the choice of D or D# that we got before. We then get an F, followed by the ornamentation that used to follow the C at the beginning of the bar.

If you want to, you can replace the standard 'lower left to upper right' diagonal in the Order grid with one that goes from upper left to lower right, and the sequence will play backwards. You can adjust the ordering of the sequence in any way you like, live!

If you don't remove the white cells on the diagonal, then things happen a little differently. (In fact, tings happen a little differently! :) ):
The Order grid has exactly the same probabilistic behaviour as th other grids, so when we put two white cells in a column, then it makes a choice between the values. In the Order grid, this means that we have control over the probability that time will be warped. In the above Order grid, there is a 50% chance that the first ornamentation will be swapped to the later one, and a 50% chance that the later one will be swapped with the earlier one. So there are now four ways that time can be warped in the bar: no warping, early ornamentation repeated later, later ornamentation repeated earlier, and ornamentation swapped in time (early moved the later, later moved to earlier). Thos two extra white cells have a big effect!

(As before, feel free to experiment, and to re-read the previous paragraph whilst listening to the output. ProbablyZ can be tricky to get your head around at first!)

Finally, what happens if we extend the time warping to all of the ornamentation? Here's what it looks like inside Ableton Live:
What we have set ProbablyZ to do here is this: Whenever we have an ornamentation note choice, choose from one of the four possibilities and play that. Because the ornamentation is just two sets of notes, then we are only using half of the available possibilities - you can try changing the fourth and eighth columns to give a different 'pool' of notes if you want, and then listen to the output.

You can listen to the output of the above grid setup on Soundcloud here. Remember, this is a single step sequence, produced using only the setup shown above.

I hope that this quick tutorial has shown you some of the possibilities (!) of ProbablyZ.

Warning - you may find it hard to go back to the step sequence that you used previously...

ProbablyZ can be downloaded from It is FREE!

Saturday, 9 September 2017

Mapping MIDI Velocity to Two Ableton Live Parameters

Dual Velocity Mapper_mr

Whilst there are quite a few M4L 'Velocity-to-Parameter Mapping' utilities available, I couldn't find many multi-channel versions, so I made a two channel utility, called 'Dual_Velocity_Mapper_mr' (DVM_mr), and available from as usual. DVM_mr has an easy setup mode, that lets you quickly set the offset and depth of the 'velocity to parameter' mapping, and re-uses the Ableton parameter mapping control from their LFO device. 

To use DVM_mr, you click on the 'Setup' button (in between the two big blue buttons near the centre) and then map each of the blue buttons to a parameter inside the synth you want to control. You then move the mouse from left to right and this causes notes to be generated at different velocities, so that you can see and hear the effect of the velocity changes on the parameters. Moving the mouse up and down (on the screen, forwards and backwards from the mouse-viewpoint!) changes the pitch of the notes. This speeds up the setup phase quite a lot, and makes it quick and easy to map velocity to two parameters. To clear the mapping, you just click on the 'X' buttons. The 'Invert' button inverts (turns 'upside-down') the MIDI velocity, so that higher velocities produces lower values. 

The mapped parameters shown in the DVM_mr screenshot might be a useful starting point for further exploration...

The Velocity Mapper_mr M4L MIDI Effect is available from

(Yes, this is extracted from a previous blog post, because it was hidden away at the end, and I thought that it deserved better visibility!)