Showing posts with label Monophonic. Show all posts
Showing posts with label Monophonic. Show all posts

Sunday, 14 October 2018

ProbablyR v011 - Updated MaxForLive Probabilistic Sequencer. for Ableton Live

I have just released a new update to my Probably MaxForLive generative, probabilistic sequencer - this is ProbablyR, and it adds a lot of new functionality, although not everything that was requested has yet been added - there are more updates coming.


The above graphic shows a summary of the main changes:

Memory slot grid


(This memory grid is in 'Setup' mode, only four slots have been filled, and there are no white spots because they don't do anything in 'Setup' mode! They just recall the contents of memory slots when in 'Play' mode.)

The memory slot grid now has 16 steps. Previously this only had 8 steps, and so whilst you could store 12 memory slot (the square grey boxes in the 'black' section), you could only control which one was playing using 8 steps. Using the maximum length of 16 steps, and if you select the maximum number of repeats (16), then you have 256 (16x16) bars before the sequence repeats. Having more steps than memory slots means that it is easier to use a couple of memory slots to allow organisation of slots and their contents.


(This memory grid is in 'Play' mode, and there are four filled memory slots (on the right hand side). The Length is set at four, and so steps 1 to 4 will repeat again and again until you stop Live. The four white spots select memory slot 1, then 2, then 3, then 4, and then 1 again. ProbablyR is currently playing step 2...)

The workflow is intended to consist of:
0. When developing a new sequence, use the 'Clear' button in the lower right hand corner of the 'Length' section (it is deliberately kept well away from everything else). This will wipe the contents of the memory slots forever, and they cannot be retrieved. Only do this if you want to start from a clean set of memory slots.
1. Developing memory slots using the 'Setup' mode, and using Shift-Click into slots to store a snapshot of the coloured sections for each major change.
2. Using the 'Play' mode and the memory slot grid to determine the order in which the slots are played back, with the shortest sequence being a length of 1 bar, repeated once, and then starting again (and the longest being 16 bars, repeated 16 times, and then starting again).
3. Jumping back to 'Setup' again to make an edit to a memory slot. (If you don't do this then the recall of the memory slots will keep overwriting your changes! Whenever you find that your grid edits are being overwritten, check that you are not in 'Play' mode!)
4. Using 'Play' mode to play the memory slot grid.

I'm working on ways to make this workflow more intuitive...


Here is a compressed screen shot of that 'memory clear' action (step 0 of the workflow above). Notice the round red button with an 'X' in the lower right hand corner of the Length section, and the red square memory slots on the right of the Memory section. In the memory section, red squares mean 'empty', grey squares mean that the slot has something in it, and a white square is the memory slot that is currently being played.

Remember that the memory slot grid has the same probabilistic control as all the other grids in ProbablyR, so if you have two white spots in a vertical, then they will be chosen on average 50% of the time. If you have three, then 33% each, and so on. You can use just single spots if you want to know exactly what will happen, but using more than one white spot gives you controlled randomness...


So in the above screenshot, the second set of 4 bars is playing the recalled memory slot 2. When the 9th bar starts, the two white spots in the vertical line (one to the right) will select either memory slot 1, or memory slot 3 - with a 50% probability. After another 4 bars, then the two spots in the right-most vertical mean that either the 3rd or the 4th memory slot will be played - again with 50% probability. So there are 4 ways to play the memory slots: 1213, 1214, 1233, or 1234. Because there are two sets of 50% choices, then each of these possible ways will happen about 25% of the time.

Remember that a memory slot contains all of the settings in the coloured sections (except for the step length and the memory reset!). So those 4 ways of playing are actually 16 bars where there could be additional probabilistic operations set...

Order grid

The 'Order' grid controls the order in which steps are played. The default grid is a diagonal line from the lower left corner to the upper right hand corner. You can set this by clicking on the '1' round button on the right of the purple 'Order' section. The steps will then move from left to right, and the sequence plays 'forwards'.

Forwards

The opposite to this is set by clicking on the '-1' round button, and this puts a diagonal line from near  upper left corner to near the lower right corner - the exact positioning depends on the length of the sequence. In the screenshot the length was 16 steps, and so the last two steps in the grid are not used. The sequence now plays backwards.


Backwards

The round button with '4' in it is a special case that sets just every 4th white spot, and is typically used when you are working with a sparse number of notes per bar. The screenshot shows this situation...


'4': every fourth note

There are 5 white spots because the full grid is actually 18 steps in length, and so an extra white spot is required. In the case of 16 or less steps, then the 5th spot is ignored.


Forwards and backwards in the same bar

By setting the order grid so that it goes forwards for part of the bar, and backwards for the rest (16 steps are shown here), then the order of playback of notes will go forwards for part of the bar, and backwards for the remainder of the bar. This type of control over the order of playing of steps is quite unusual in sequencers (software or hardware). 

Order randomisation

Instead of just forwards, backwards, and any combination of those, there is also an experimental randomisation function that allows the order of the steps to be randomised, every bar, every 2 bars, every 3 bars, etc. This only works on the 16-step grid at the moment (the code to produce different random grids is not straight-forward!), but it has two controls: the small square button containing 'N' or 'R', and the small number underneath it, which sets how many bars have to be counted before a new randomisation is generated. When the button shows 'N', then a new randomisation set is produced every so many bars, and when the 'R' is shown, then no new randomisation is generated (so you can leave one in place if you want). The large white number is the bar count.


A random order grid held by the 'R' button setting.


The random grid about to be replaced (the button has just been clicked to change the 'R' to an 'N' ('No randomisation')) - the bar setting is '1', and the bar count is '1', so at the end of this bar, a new random order grid will be produced.

Note repeat

The order grid can also be used as a shortcut way of repeating a note. If you set up the order and pitch grids like this:


...then the dark highlighting that I have added across the order grid is actually a time plot of the note in step 4 that is highlighted by a vertical bar that I have added in the pitch grid. So the second white spot causes the note to be played again. This can be a very quick way to add little extra 'busy' notes to a sequence, and can be combined with the probability controls via multiple vertical spots. There are lots of ways to exploit this to make interesting patterns with many variations.

Step length

Probably the most important change is the step length. Instead of being locked to 16 steps, you can now choose a step length from 9 steps to 18 steps. This equates to time signatures of 4.5/8 to 9/8. If you put a copy of ProbablyR in more than one track inside Live, then you can have different step lengths for each track. Combined with the probability settings , this can be used to create music with very large numbers of variations (and a long time before it repeats the same music).


Here is the length box, with the length control set to 16. The range of the control is from 9 to 18 steps.

Note that the length control is NOT stored in the memory slots. Experimentation with the beta versions showed that this was not a good idea because it caused nothing but confusion.

That completes this update report for ProbablyR. At some stage, I will gather all the material in these blogs posts on Probably and edit it into the user manual...

Tutorials and further information

The 'Probably' sequencer is a complex plug-in with an unusual user interface. The following online resources are recommended until I produce a full user manual:

http://synthesizerwriter.blogspot.co.uk/2017/07/probably-antidote-to-step-sequencers.html

http://synthesizerwriter.blogspot.co.uk/2017/09/probablyz-tutorial.html

https://soundcloud.com/martinruss/probablyz-tutorial-demo-01

http://blog.synthesizerwriter.com/2017/10/probablys-tutorial-using-newly-added.html

Video Demonstration

Here is a YouTube video that shows how to use ProbablyR.


Getting ProbablyR_mr_v011

You can download ProbablyR_mr_0v11 for free from MaxForLive.com.

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...)

Modular Equivalents

In terms of modular equivalents, then reproducing this functionality in my modulars looked like it would require several sets of four 8-step sequencers (plus additional logic modules), or it would require the use of advanced sequencers that I can't count as 'basic' modules, so I would rate this version as being about 140 ME. This is not something that I would want to make for real in a modular.











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!

Notes

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...)

MaxForLive.com

As usual, ProbablyGEN is available for free from MaxForLive.com. 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?
PaRappa_the_Rapper
5 Minutes of Parappa the Rapper Remastered Gameplay - YouTube 2mins 10 seconds

Updates:


Update: version 0.04: Asynchronous timing generator for Max For Live in ...

Update: version 0.05: Constraint-driven modification grids in asynchronous drum timing generator



Buy me a coffeeBuy me a coffee