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.