MidiScale scale processor

MidiScale transposes incoming MIDI notes, constraining them to one of the 86 music scales. The output MIDI notes are quantized according to the selected scale and root note.

Transposition occurs on the selected or all MIDI channels. The latter  makes MidiScale MIDI Polyphonic Expression (MPE) compatible.

Firmware (.syx and .hex) midiscale_102 (use _pal.syx if your device has MIDIpal bootloader).

User interface

MidiScale user interface consists of pages which are selected by encoder rotation. Each page displays a single parameter value.

Click the encoder to activate parameter change mode in which parameter value is enclosed in square brackets and encoder rotation changes it. Click the encoder again to save the value and leave the parameter change mode.

Double click the encoder to save all parameter values to the currently selected persistent memory slot. The Main page also allows you to save the current settings into a different persistent memory slot.

Pressing the switch temporarily disables the note scaling. Pressing the switch again re-enables it.

Main page

Click the encoder to enter persistent memory slot selection mode. Brackets appear around the slot name. Rotate the encoder to select another slot. Click the encoder to load the selected slot into memory.

Pressing the switch while the slot name is enclosed on brackets activates slot name editing mode. Rotate the encoder to change the character under the blinking cursor. Press the switch to move the blinking cursor to the next character. Click the encoder again to exit name editing mode.

Saving the slot on the Main Page is slightly different from that on all other pages because it allows you to save into a different location: double click the encoder, turn it to select target location, then click it again to save. Press the switch to cancel the save operation.

Scale page

Click and rotate the encoder to select one of 86 available scales. Click the encoder again to confirm the scale selection.

Root note page

Click and rotate the encoder to select the root note for the scale. Click the encoder again to confirm the root note selection.

If a MIDI note is received while selecting the root note, that MIDI note will be ‘learned’ as the root note.

Transpose page

Click and rotate the encoder to select the transpose mode. Click the encoder again to confirm the transpose mode selection.

Transpose mode defines the note transposition direction:

  • near – transpose to the nearest scale note
  • root – transpose to the next scale note towards the root note
  • up – transpose to the next scale note 
  • down – transpose to the previous scale note 

Channel page

Click and rotate the encoder to select the MIDI channel. Click the encoder again to confirm the MIDI channel selection.

If a single channel is selected, only the notes received on the selected channel will be constrained to the scale. Notes on all other channels will be passed through as is.

If the selected channel is set to ‘all’, all the received notes on all channels will be constrained to the scale. 

If a MIDI note is received while selecting the MIDI channel, the channel that MIDI note was received on will be ‘learned’ as the device MIDI channel.

Resources

MidiScale runs on MidiGAL hardware, however you can also run it on MidiBUD and, with some limitations due to the lack of the switch, on any Mutable Instruments MIDIpal compatible hardware.

Available scales

{ 0b111111111111, "Chromatic " }, // 0
{ 0b101011010101, "Major " }, // 1
{ 0b101101011010, "Natural Minor " }, // 2
{ 0b101101011001, "Harmonic Minor " }, // 3
{ 0b101101010101, "Melodic Minor " }, // 4
{ 0b101010101010, "Whole Tone " }, // 5
{ 0b101010010100, "Pentatonic Major " }, // 6
{ 0b100101010010, "Pentatonic Minor " }, // 7
{ 0b100101110010, "Pentatonic Blues " }, // 8
{ 0b101001010010, "Pentatonic Neutral " }, // 9
{ 0b110110110110, "Octatonic (H-W) " }, // 10
{ 0b101101101101, "Octatonic (W-H) " }, // 11
{ 0b101011010101, "Ionian " }, // 12
{ 0b101101010110, "Dorian " }, // 13
{ 0b110101011010, "Phrygian " }, // 14
{ 0b101010110101, "Lydian " }, // 15
{ 0b101011010110, "Mixolydian " }, // 16
{ 0b101101011010, "Aeolian " }, // 17
{ 0b110101101010, "Locrian " }, // 18
{ 0b101101111001, "Algerian " }, // 19
{ 0b101101101101, "Arabian (A) " }, // 20
{ 0b101011101010, "Arabian (B) " }, // 21
{ 0b100110101001, "Augmented " }, // 22
{ 0b101101101101, "Auxiliary Diminished" }, // 23
{ 0b101010101010, "Auxiliary Augmented " }, // 24
{ 0b110110110110, "Auxiliary Diminished" }, // 25
{ 0b110100011000, "Balinese " }, // 26
{ 0b100101110010, "Blues " }, // 27
{ 0b110011011001, "Byzantine " }, // 28
{ 0b100010110001, "Chinese " }, // 29
{ 0b101010010100, "Chinese Mongolian " }, // 30
{ 0b101010010100, "Diatonic " }, // 31
{ 0b101101101101, "Diminished " }, // 32
{ 0b110110110110, "Diminished, Half " }, // 33
{ 0b101101101101, "Diminished, Whole " }, // 34
{ 0b110110101010, "Diminished WholeTone" }, // 35
{ 0b101011010110, "Dominant 7th " }, // 36
{ 0b110011011001, "Double Harmonic " }, // 37
{ 0b101001010010, "Egyptian " }, // 38
{ 0b110111101010, "Eight Tone Spanish " }, // 39
{ 0b110010101011, "Enigmatic " }, // 40
{ 0b101011010101, "Ethiopian (A raray) " }, // 41
{ 0b101101011010, "Ethiopian Geez Ezel " }, // 42
{ 0b110101101010, "Half Dim (Locrian) " }, // 43
{ 0b101101101010, "Half Dim 2 (Locrian)" }, // 44
{ 0b101101010101, "Hawaiian " }, // 45
{ 0b101011011010, "Hindu " }, // 46
{ 0b101011011010, "Hindustan " }, // 47
{ 0b101100011000, "Hirajoshi " }, // 48
{ 0b100110110110, "Hungarian Major " }, // 49
{ 0b101100111001, "Hungarian Gypsy " }, // 50
{ 0b110011011001, "Hungarian G. Persian" }, // 51
{ 0b101100111001, "Hungarian Minor " }, // 52
{ 0b110001011000, "Japanese (A) " }, // 53
{ 0b101001011000, "Japanese (B) " }, // 54
{ 0b101011110101, "Japan. (Ichikosucho)" }, // 55
{ 0b101011110111, "Japan. (Taishikicho)" }, // 56
{ 0b110101010110, "Javanese " }, // 57
{ 0b111101010110, "Jewish(AdonaiMalakh)" }, // 58
{ 0b110011011010, "Jewish (Ahaba Rabba)" }, // 59
{ 0b110110101011, "Jewish (Magen Abot) " }, // 60
{ 0b101100010100, "Kumoi " }, // 61
{ 0b101010101011, "Leading Whole Tone " }, // 62
{ 0b101010101101, "Lydian Augmented " }, // 63
{ 0b101010111010, "Lydian Minor " }, // 64
{ 0b101100110101, "Lydian Diminished " }, // 65
{ 0b101011101010, "Major Locrian " }, // 66
{ 0b101101011001, "Mohammedan " }, // 67
{ 0b110101011001, "Neopolitan " }, // 68
{ 0b110101010101, "Neoploitan Major " }, // 69
{ 0b110101011010, "Neopolitan Minor " }, // 70
{ 0b101110111101, "Nine Tone Scale " }, // 71
{ 0b110011101010, "Oriental (A) " }, // 72
{ 0b110011100110, "Oriental (B) " }, // 73
{ 0b101010110110, "Overtone " }, // 74
{ 0b101010110110, "Overtone Dominant " }, // 75
{ 0b110100011000, "Pelog " }, // 76
{ 0b110011101001, "Persian " }, // 77
{ 0b101010100110, "Prometheus " }, // 78
{ 0b110010100110, "PrometheusNeopolitan" }, // 79
{ 0b101101011010, "Pure Minor " }, // 80
{ 0b110010111001, "Purvi Theta " }, // 81
{ 0b101100110110, "Roumanian Minor " }, // 82
{ 0b110011001100, "Six Tone Symmetrical" }, // 83
{ 0b110011011010, "Spanish Gypsy " }, // 84
{ 0b110110101010, "Super Locrian " }, // 85

One thought on “MidiScale scale processor

  1. This looks great. My gear is all packed away at the moment so I’ll have to wait to try it out – I’ll get back when I do.

Leave a comment