microtonal scale explorer / chord arpeggiator / isomorphic grid keyboard

Firstly many thanks to inspiration from Stephen Weigel, Sevish, Erv Wilson, and other explorers of microtonal/xenharmonic scales.

item: There are pitfalls in using equal division within which
         to calculate 2-interval-patterns which the unwary traveler
         will most certainly fall into.
                                                                              - Erv Wilson [0]

I’ve invested several weeks encoding some of my naïve interpretations into Pitfalls - a norns library for exploring microtonal scales and chords.

If there’s interest I can hone pitfalls into a library for reuse - anywhere microtonal scale pitches are desired.

Already there are some concepts forming:

scale = Scale:new(2, 1, "LLsLLLs")
intervals = ScaleIntervals:new(scale)
pitches = Pitches:new(scale, intervals, tuning = 432, midi_start = 60)


  • norns
  • optional:
    • grid (64 or 128 varibright)
    • or midigrid (see edit settings to change grid lib)


Explore & play your own microtonal scales.

Set interval structure as a sequence of large L and small s steps.

For example, C Major diatonic scale:

   LLsLLLs  L: 2  s: 1  base: C

A 19 EDO, 7 note scale:

   LLsLLLs  L: 3  s: 2

Toggle note/chord arpeggiator to hear scales.

Optionally play scale via grid as a isomorphic keyboard.


-- E1 change cutoff filter
-- E2 change value
-- E3 select step or parameter to change
-- K1 
-- K2 toggle arpeggiator
-- K3 


Available on maiden, or:

pitfalls v0.1.0 einfach einem

pitfalls v0.2.0 fuoco fawkes

  • in progress
  • may add monophonic pitch-bend live retuning
    • to play microtonal scale pitches on external synths via MIDI



[0] An Introduction to the Moments of Symmetry


microtones!!! this looks like an amazing way to start reprogramming my brain. can’t wait to try.

1 Like

enjoy! I learnt a lot about structuring Lua from reading your arcologies sourcecode!

1 Like

Interesting - I was just discussing microtonal electronic instruments with someone and Pitfalls appeared…

By the way, anyone who is wondering how to add midigrid to this script just needs redacted (EDIT: ignore me, because @delineator cleverly allowed for midigrid already!)

Any chance we can begin to potentially add crow to this as well? Analog oscillators could match beautifully with this!


Actually you don’t need to alter the pitfalls sourcecode to use midigrid.

Instead I’ve added a grid_lib parameter.

You can change the grid_lib parameter option, and save a default PSET file like so:

K1 -> E1 right -> Parameters EDIT -> PITFALLS -> grid_lib -> choose between grid, midigrid/lib/midigrid, and midigrid/lib/mg_128

K2 -> PSET -> SAVE -> OK


Fantastic! That’s really great and I can confirm it works with mg_128. Nice!

I don’t have a crow setup myself. I could take a peek at other libraries to see what’s required code-wise.

1 Like