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

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. 

Hint:

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

Sunday, 17 September 2017

ProbablyZ Tutorial

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 MaxForLive.com. 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 MaxForLive.com 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 MaxForLive.com

(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!)


Sunday, 3 September 2017

A Brief 'Alternative Manual' for the Pulsor Synthesiser by Amazing Noises

I recently bought the Pulsor Suite from Amazing Noises, which contains both the Pulsor 1 and Pulsor 2 monophonic MaxForLive synthesisers for Ableton Live. Pulsor is an interesting synthesiser because it has four oscillators (including 2 in a special FM/Ring Modulator arrangement), 3 envelopes and 4 LFO with complex output processing options. In fact, those words: 'complex processing options', apply throughout the Pulsor design. This is not another generic, bland, 'off the shelf', 'me too' synth - Pulsor is powerful, deep, and can make some very expressive sounds. In other words, it is exactly what I look for in a synthesiser!

Whenever I get a new synth, I always 'revoice' it. It's a bit like the ceremony that lab technicians have with a new lab coat: they spill some coffee on it, write on it, fray some of the edges, burn a few holes in it with a soldering iron or acid... Anything to make it looked used and loved. So for synths, I create my own presets to replace the 'factory' default ones. Some people also customise their hardware, and my personal reference is for printed diagrams, tables and other information stuck onto the front panel (or underneath for table-top gear like MIDI controllers) with Blu Tack (other slightly sticky stuff is also available). Programming a new device is a great learning opportunity, and rapid ascending of the learning curve is something I worked hard on when I was doing lots of equipment reviews for Sound On Sound magazine many years ago...

After producing more than 100 new 'presets' for each of the Pulsor synths, I was pretty familiar with how they work, although there is still plenty of scope for further exploration. Now one of the things I remember from before the Internet, when people used FTP sites to exchange information, was the  'alternative manual'. Not a replacement for the real user manual, but an attempt to provide additional detail and clarifications from people who had some experience, and intended to make things easier for newbies. So, here's what I learned about the Pulsors.

Programming model

Sound synthesis at the highest level usually looks something like this:

For actual programming of a synthesiser, it can often help if you have a more detailed 'programming model' to help you understand where you need to make changes to get the desired result. Synthesiser programming may look like just turning knobs and pressing switches (real or virtual!), but actually that 'edit' is really the end point of a whole series of decisions. A programming model shows how the various parts of the synthesiser connect together - kind of 'what is happening behind the front panel'...

So here's my programming model for the Pulsor 1 architecture.


There are some differences between the Pulsor 1 and 2, but they are in the detail, not the overall architecture, and so the same model mostly works for both. The main flow of the 'sound' is in the centre, and happens from left to right. At the top and bottom of the diagram are the modulation sources. The model highlights some of the unusual features of the Pulsor architecture: lots of 'mix' controls between oscillators, lots of wet/dry control around processors, a very flexible 'spectral' section utilising FM with Ring Modulation, and complex post-processing around the Multi-Modulators. 

Programming models are not meant to be perfect in every detail: the idea is to show how it works in sufficient detail so that you can see where to make edits. The Ring Modulator output is particularly difficult to represent in a simple way. The output 'mix' control (to the right of the 'Ring' box) allows a continuous mix between Oscillator 3 (at 0%), the Ring Modulation output (50%) and Oscillator 4 (100%), the oscillator which is FM'd by Oscillators 1 and/or 2. So the 0-100% labelling is slightly misleading... The diagram also misses out the wet/dry mix control around the Multi-Modulator amplitude modulation (the box in the bottom right hand corner of the Ring Mod box).

Hints and Tips 

My first problem was figuring out how the user interface worked. I couldn't get those little 'no' boxes to do anything. 
The Multi-Modulators were easy - they dropped down from the triangle, and so I could edit them easily. But the 'no' boxes took a little more experimentation.

To use the 'no' boxes, you click and hold in the box, and then move UP. So, exactly the opposite to the drop-down Multi-Modulators, the 'no' boxes are 'drop-up'! 

Here's are the two 'no' boxes expanded as if they were normal pop-up selectors:

So as you move upwards, you get 'm1+' (the LFO on the left hand side, in the top bar of the front panel layout), then the inverted version: 'm1-', etc., then all the way up to 'e2-', the inverted second 'attack-release (AR)' envelope on the right hand side of the top bar. 

Intrigued by the 'no' in the box? It just means 'none' - so it indicates 'no modulation selected'. 

Note that on some monitors (mine, for example), the 'm1i' and 'm2i' interpolation output labels tend to look like an 'l'. The significance of the 'i' output is covered in the Pulsor Reference Manual, but here's another way of thinking about it (and this shows the deep thinking hat has gone into the design of Pulsor):

Each of the two 'top bar' LFOs has two outputs: the '+' and '-' are just the ordinary and inverted versions of a sine wave that you would expect (although 'Amazing Noises' use the word 'reversed' where I would say 'inverted'... Perhaps 'upside-down' is a less technical explanation), and the 'Rand' control makes the LFO frequency wobble or 'jitter' randomly, whilst the 'i' output turns the 'Rand' control into another mix control - this time between the sine wave and a random waveform. So the '+' and '-' outputs are a fixed sine wave where you can control the amount of randomness in the frequency, whilst the 'i' output is a fixed frequency where you can control the amount of randomness addd to the sine wave. Of course, I would like a third option, where I can control the randomness in th frequency and in he output, but maybe we will see that in Pulsor 3...

( As before, to keep things simple, this isn't shown on the programming model diagram above. )

The Pulsor Reference Manual uses an unusual abbreviation: 'F.i.'. It took me an embarrassingly long amount of time to figure out it meant: 'For instance' of 'For example' (e.g.). 

Spectral Control

One of the most powerful parts of the Pulsor architecture is in the central box, where a complex mix of FM and Ring Modulation takes place. Ring Modulation produces sum and difference frequencies, which tend to produce bell-like sounds, whilst FM produces a different set of frequencies determined by Bessel functions. Combining the two together produces a 'spectral' processor that can add a wide variety of additional frequencies to the sine waves produced as the base for the 4 oscillators (although there is some oscillator output wave shaping available as well). Harmonics and inharmonics can be controlled in a variety of ways via the LFOs, envelopes and Multi-Modulators.  if only there was a polyphonic version!

One of the side effects of FM can affect tuning, and my preferred setup when programming Pulsor was to have the 'Tuner' effect after Pulsor, so that I could keep the presets in tune. Using the shift key when changing the frequency controls is very important when fine tuning control is required. 


With all of the available control over the spectral content of the output, there is one area where Pulsor needs a little help, and this is dynamics/velocity control. The only dynamics control is the main AR envelope, where MIDI velocity can control the volume of the output over a 40 dB range. 

Now, having been raised on Mini Moogs, where the keyboard is not velocity sensitive, I have maybe over-compensated in some of my programming by adding too much velocity sensitivity (e.g. some of my FM sounds for the Yamaha DX7 and SY99), but with polyphony I do like being able to control the expression whilst playing with two hands, even though it means that I fall into the 'rigid' keyboard player syndrome. On a mono synth, then one hand for playing and the other for mod wheel or cutoff frequency (etc.) is okay, and does look good on stage - but in a DAW, then the ease of use of velocity is often much better than other controllers, and so velocity control is a natural choice to control expression. 

There isn't enough space here to go into the details of how you program velocity-controlled expression into a synth. Just changing one parameter with velocity is the baseline, and there are lots of possibilities above that, which is one of the reasons that I like FM! 

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 one, called 'Dual_Velocity_Mapper_mr' (DVM_mr), and available from MaxForLive.com 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. 

In a blog full of hints and tips, the mapped parameters shown in the DVM_mr screenshot might be a useful starting point of further exploration...

Downloads

Pulsar 1 and 2 Presets

My Pulsor 1 and 2 presets are available here. There are two sets of 12 folders (no velocity sensitivity, and full (-40dB) velocity sensitivity) for each synthesiser. Each folder contains 12 presets. To install the presets, then you need to put them into this folder:

User Library/Presets/Instruments/Max Instrument/Pulsor by Amazing Noises/

or

User Library/Presets/Instruments/Max Instrument/Pulsor 2 by Amazing Noises/

Here's what it looks like in the Ableton Live Library window:
 The '_MR' folder contains the presets without velocity sensitivity, whilst the '_MR bel' folder contains the presets with velocity sensitivity.

Note that the default place for the 'User Library' folder is here on a Mac:

/Users//Music/Ableton/User Library

and here in Windows:

\Users\\Documents\Ableton\User Library

( See this article from Ableton for more information: 209774665-The-Live-Browser-and-Library-Locations )

An easy way to open the install directory from inside Live is to select the User Library window in Live's 'Browser', right-click on 'Pulsor by Amazing Noises' (or 'Pulsor 2 by Amazing Noises') in the right-hand 'content' pane, and then choose "Show in Finder" (Mac) or "Show in Explorer" (Windows) in the little pop-up menu that should appear:

Dual Velocity Mapper_mr


The Velocity Mapper_mr M4L MIDI Effect is available from MaxForLive.com







Sunday, 20 August 2017

Using Chromatic Remapping To Generate Musical Inspiration

Previously, I looked in some depth at the Ableton 'Scale' effect, one of the quieter backwaters of the 'built-in' MIDI effects. That blog started out concentrating on how to invert a keyboard, but ended up producing lots of chromatic maps that take incoming notes and map them to different outgoing note pitches. Which led to another investigation, the results of which you are now reading...

While I was producing the variations on chromatic inverted scales for the previous blog, I realised that these were all specific cases of a much more general set: the set of remapping of incoming notes to single outgoing notes on a one-to-one basis. In other words, each and every incoming note is converted to one, and only one, outgoing note. There are a lot of these maps: there are 12 input notes and 12 output notes, so I think that means that there are 12! combinations, which is just under 480 million. So me making 30-odd of them available is a tiny fraction of the whole set! And that's where I realised that I could make them all available in a MaxForLive plug-in utility, and MIDI_ChromatixT_mr was born.


In the screenshot, MIDI_Chromatix_mr is shown in its normal location in the MIDI processing chain - just in front of the Scale effect (Alternatively, you could use any of the many available MIDI Scale-type effects available in MaxForLive). The diagram below shows how everything fits together:


Incoming notes are mapped to different pitches by MIDI_ChromatixT_mr, and then restricted to the chosen notes in the scale set by the Scale effect. In the example screenshot above, the C minor preset scale has been altered so that only 5 output pitches can occur. This constrains the output notes to just the pitches C, D#, F, G# and A#. Incoming notes can be at any pitch, and they will be mapped to new pitches by the map. So an incoming A might be mapped to C, whilst an F could be mapped to a D#, etc. 


The grid in MIDI_ChromatixT_mr sets the mapping of incoming notes. In the screenshot above, the vertical cursor line is showing an incoming D (moving across from left to right), whilst the orange marker is in the A# row (counting up from bottom to top). Now, whilst it is possible to edit the mappings (Click on the 'Auto/Fix' button so it shows 'Fix', and the mapping will be fixed and editable), the 'Generate' button creates new random mappings with a single click. So it is easy to just keep clicking on the 'Generate' button until it has created a random mapping that you like - the usual M4L store/recall buttons on the left can be used to save it if you wish. 

But the really interesting part of MIDI_ChromatixT_mr is the 'Auto' button, when it is set to 'Auto' then the 'Generat' button will be pressed every time the bar count to the left of the 'Auto' button matches the number set in the pop-up selector on the far left. So if the selector is set to 4, then every 4 bars, a new chromatic mapping will be produced, and incoming notes will be mapped using that new mapping instead of the one used in the previous 4 bars. This then repeats every 4 bars.

What this means is that every time the bar count reaches the number of bars shown by the selector, then incoming notes will be mapped differently, using a new one of the millions of possible chromatic mappings. So whatever notes are in the (monophonic is recommended) track sequence that is driving MIDI_ChromatixT_mr, the output will be a scale-constrained version of the remapped versions of them. The D to A# mapping in one set of bars could be replaced with a D to G# in the next set of bars, then a D to F mapping in the next set of bars. 

It's a bit like shuffling cards and then dealing them out for a card game. The shuffling means that you get a different hand of cards each time, but the number of cards you get (and the game you are playing) are fixed. So whilst the notes get remapped to new pitched notes, they are still constrained to just the notes in the scale you have set. 

What this does musically is take a monophonic sequence in a track, and play those notes, remapped to new pitches whilst still being constrained by the scale, and yet the timing and velocity of those new notes remains exactly as it was in the original sequence. So it's a bit like an randomiser and a bit like an arpeggiator, but until that 'Generate' button is activated, the mapping is fixed, so if you find a mapping that you like, click on the 'Auto' button so that it says 'Fix', and then session record the output with the 'doughnut' session record button in Live. Of course, an easy alternative is just to let it free run, generating new mappings every 4 or 8 bars, and to record everything, and then just extract the bits you like. 

In a few minutes, MIDI_ChromatixT_mr will run through lots of variations of your monophonic track sequence, all following the timing and the velocity exactly, but with different pitches every time the 'Generate' happens. It's a bit like having an assistant who can keep running through variations, one after the other, and who never gets tired or bored, and never loses patience. MIDI_ChromatixT_mr is an automatic 'Can you just do that twisted around a bit?' generator.

Demonstration 1



The problem with random music generators is the they are often too random, and when they do come up with something interesting, then it has happened and gone almost before you realise. MIDI_ChromatixT_mr repeats each random variation for the number of times that you set the bar selector, and so if it is set to 4 bars, then you will hear the same variation 4 times, before it moves on to the next one. This is probably best heard rather than described in words, so here's a demonstration of a simplee piano and bass duet produced entirely from an 8-note track sequence and a 4 note bass track sequence, with MIDI_ChromtixT_mr producing all the variations every 4 bars. Once the 12 notes have been set in the track sequences, everything else is just a straight recording. 

Demonstration 2


This second demonstration has the same bass, and has two independently variations piano lines using the same technique, spaced an octave apart. 


The top line adds a 16 note sequence, but with a random velocity added to provide additional variety. Again, once set running, the recording has had no user manipulation. 


Download

As usual, MIDI_ChromatixT_mr can be downloaded from MaxForLive.com. Enjoy!

The Name?

Why such a weird name? Well, I thought about all sorts of variations (!) on chromatic remapped, or even diffuser (cryptographers call this type of device a 'diffuser') and the first version was completely manual and was 'Chromatix. When I then added the automatic 'every n-bars' generation feature, then it needed something to indicate time, so I added a 'T' at the end. As a result, you aren't likely to forget this M4L device.

Monophonic?


Yep. Try poly tracks and see what happens...





Sunday, 6 August 2017

Scale Inversion of MIDI Notes...

Hidden away inside Ableton Live are some interesting comments. One that is in plain sight is in the presets for the 'Scale' MIDI Effect. If you look carefully at all of the sometimes exotically named scales, you will see one that is named 'Inverted and Useless'.

Now that got my interest immediately. Inverted keyboards have always fascinated me, and I had already done a MIDI Effect that could invert a keyboard, and lots more besides: MIDI f(x)_mr. But why would Ableton describe one of their own presets as 'Useless'? Here are the default 'Scale' settings, which pass notes through unchanged:


The mapping of input to output is very straight-forward:


Here is the 'Inverted' version, which takes the diagonal mapping and just reverses it, which intuitively ought to be fine - after all, all that has happened is that the diagonal now goes the other way, so the notes should too...


Unfortunately, when I tired playing the MIDI output of a keyboard through the Scale MIDI Effect using the 'Inverted and Useless' preset and driving a piano instrument, then I quickly learned why it was described as useless. Some arpeggios work ok, but others have sudden jumps of just under an octave, and some chords sounded very weird indeed, even when I deliberately adjusted them for the inversion. Something was definitely wrong... This needed deeper investigation with a specialist setup.

Investigation Setup


First, I created an arpeggio clip stretching over about three octaves, and then I surrounded the 'Scale' MIDI Effect with some display tools: two MIDI HugeNoter_mr 'big' note displays, and a variation of one of my favourite tools, the MIDIKeyMon_mr, which I described in a previous blog entry. (MIDIKeyMonFull_mr shows the whole MIDI keyboard range and has a summary scrolling window showing the notes played.) HugeNoter is great when you need to display notes in a way that is difficult to miss, and is available from MaxForLive.com.

But the important part of this setup is the Ableton 'Scale' MIDI Effect in the middle. As you can see, in the case shown in that screenshot a C3 note input has become a B3 output. So there's obviously some pitch changing going on, but C3 inverting to a B3 seems strange. So I wrote down the input and output of the Ableton 'Scale' MIDI Effect with the 'Inverted and Useless' preset:


After noting down all those inputs and outputs, here's part of what I got:


It isn't easy to see what's actually happening here, so here are plots of the input and output:


So the purple input is a rising series of notes, and appears as a sloping line going up from left to right. The blue-green output does have a series of descending notes, from 71 (B3) to 60 (C3), but either side of that descending series is a sudden jump - the output jumps from 48 (C2) to 71 (B3) when the input changes from 59 (B2) to 60 (C3), and the output changes from 60 (C3) to 83 (B4) when the input changes from 71 (B1) to 72 (C4). Both of these intervals are 13ths, which my head (and ears) don't really think of as an octave plus a semitone - they just sound wrong.


The results show why the 'Scale' effect only shows an octave grid - it is just working on an octave at a time, and mapping the notes in that octave to new values. For any rising scale then this is fine, but when you have an 'Inverted' scale, then you get jumps because each octave map is being transposed to try and do an inversion across the whole range. 

If we look at the whole range, then it looks like this:


And what the 'Inverted and Useless' scale effect preset is trying to do is turn those descending blue-green segments into an inversion of the rising purple line, and the effect is a broken series of invited scales with discontinuities at the ends of each octave:


What is really needed is an inverter that inverts properly over the whole range, of course! The 'Scale' effect is designed to provide a way of mapping rising scales to other rising scales, and it was never designed to invert the complete MIDI keyboard range.

But since I had started investigating, I wondered if there was any way to improve on the existing 'Inverted and Useless' preset. C3 mapping to B3 seemed wrong to me, so I looked at the theory behind inverting MIDI keyboards...

Theory: Inverting MIDI Keyboards

The limits of the MIDI keyboard range are:

Lowest Note. 

The lowest note on a MIDI keyboard is number 0, and this is normally referred to as C-2. (But it can be C-1 or C0 - see the next entry)

Middle Note.

There is some variation on MIDI note octaves (the '-2' in the example above) and the middle of the keyboard, because the original MIDI specification isn't very precise about which pitch is MIDI note 60, and so as a result Middle C can be C3 or C4 or even C5, and may be assigned MIDI Note Number 60, 72 or 84. MIDI equipment tends to use C3 = 60 and so that's what I will use here. (Look up 'Is Middle C C3, C4 or C5' or 'Is MIDI note number 60 = C3?' on your favourite Interweb search engine to see lots of people politely failing to agree...)

Highest Note.

The highest note on a MIDI keyboard is number 127, and this is normally referred to as G8 (or G9 or G10 - see the previous entry)

Keyboard ranges.

Most musical keyboards do not have 128 notes, and so they only provide a sub-set of the available notes. 5 octave, 61 note, C-C keyboards are common for professional synthesisers, but monosynths tend to have less notes (44 F-C on a Minimoog), and top-of-the-range workstations tend to have more (88 or more, and often not C-C). 

Octave numbering.

If you go up from A2, you get A#2, B2, C3, C#3... Octaves change when a new C starts (not when you go from G to A as you might expect!). Because the lowest MIDI note is a C (number 0), and the top note is a G (number 127), then the half way point happens in the 3rd Octave, and is between D#3 and E3. 

if we ignore the notes above 120, and consider MIDI as having a range from 0 to 120 (C-2 to C8), then the middle of these 121 notes is number 60, C3. By using sub-sets of the full 128 notes, then any note can be used for inversion, although maximising the usable keyboard range seems to be a good goal, and inverting around D#3 and E3 gives 127 usable notes, whilst inverting around the D#3/E3 (63/64) boundary gives 128 notes. 

Exploring inverted scales

The 'Inverted and Useless' preset is just the opposite diagonal to the default chromatic diagonal scale grid.


Because the grid used by the Scale effect is just one octave, then the lowest note when the Base is set to C is a C, and the highest note is a B - this can be seen by looking at the second row up on the grid - the pattern of darker notes reflects the 2 and 3 groupings of 'black/enharmonic' keys on a piano keyboard. If you plot one keyboard against another, then you get a useful diagram of the corresponding keys:


Which explains why the C3 gives a B3 output. Note that this has all white keys mapped to white keys, and all the black keys mapped to black keys, except for the F to G# mappings.

However, there is an extra row in the grid, and if you use this, then you can do a different diagonal: shifted one cell upwards. This gives a different output for a C, and a different diagram.



This time, the mapping is almost all opposites (back mapped to white), except for the G, G# and F keys. Here are the two grids, side by side:

                                         Inverted and Useless                                          Scale Invert mr1


When you play these, then the 'Inverted and Useless' is obvious because it shifts the C downwards to a B. Otherwise they are both chromatic inversions over an octave, and both have a jump at each end of the octave. For someone like me, who likes a C to play as a C, then I prefer 'mr1'.

Alternative inversions

Here are some alternative inversions that I experimented with, trying to minimise the discontinuities, or perhaps, trying to spread them out across the octave.

                                                                                Scale Invert mr2


This scale moves the C from the top row to the bottom row, and so the octave jump is between the C and the C#, instead f the B and the C. It's a different feel, but still an inversion.

The interesting results so far then inspired the following explorations.

                                             Scale Invert mr7                                        Scale Invert mr 8n

The above scales put the jump in a different place on the keyboard, but there are now two discontinuities per octave...

                                          Scale Invert mr1m                                         Scale Invert mr1s

The above scales spread the discontinuities wider... Scale Invert 1s puts the  main discontinuity between E and F, whilst Scale Invert 1m  puts it between F and F#. It really depends on what key you are playing in, really. Having a set of different inverts is actually a great way of creating new melodies, chords or chord progressions, because it removes any bias or preference your fingers have for well-worn scales or fingerings. 


                                                 Scale Invert mr1w                                   Scale Invert mr1q 

The above scales spread the discontinuities wider and in different ways.

                                                                                Scale Invert mr1x

And finally, almost not an inverting scale at all!

Now it is possible to input these scale grids into the Scale effect, but that is a lot of work, and so here's a shared 'Scale Invert' folder containing all of the chromatic scales above, plus several extras, and they are all free for you to download: Scale Invert

MIDI HugeNoter_mr 


HugeNoter_mr is just a way to show MIDI notes and note numbers in a big way. I use it when developing utilities or doing investigations, as in this blog. It shows, from top to bottom, the MIDI note number (in dark blue), the note and octave (in white), and the note and octave split, as described in this blog. The three small grey buttons at the top let you set the justification of the displayed note and octave. MIDI_HugeNoter_mr is available from MaxForLive.com.

MIDIKeyMonFull_mr


MIDIKeyMonFull_mr is a variant of the MIDIKeyMon, but adjusted so that you can see the whole of the MIDI note range without needing to select a range. It also has a scrolling display of previous notes played. A useful utility when working on scale effects... MIDIKeyMonFull_mr is available from MaxForLive.com.

Where's the dark version?


Available at MaxForLive.com.