microtonal scale explorer / chord arpeggiator / isomorphic grid keyboard

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]

godzilla-9 semaphore-9

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

I’ve encoded my naïve interpretations into Pitfalls - a norns library for exploring microtonal scales and chords, and playing them via Grid as an isomorphic grid keyboard.

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, small s, and optional medium M 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.

Pitfalls let’s you play your scales 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 toggle circle, original, and strings display modes.


Available on maiden, or:

pitfalls v0.4.0 - in progress, may add monophonic pitch-bend live retuning to play microtonal scale pitches on external synths via MIDI.

pitfalls v0.3.0 tutti terpstra - add ability to browse over 3,000 named microtonal scales[1][2][3].

pitfalls v0.2.0 giojoso geola - add circle/string display modes, medium M scale step, and show existing scale name if any.

pitfalls v0.1.0 einfach einem - just one octave, many scale pitfalls.



[0] An Introduction to the Moments of Symmetry
[1] Xenharmonic Wiki
[2] Scala - list of musical modes
[3] Siemen Terpstra - world of musical tuning


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!


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

New release: Pitfalls v0.2.0 giojoso geola … happy new year!

godzilla-9 semaphore-9

  • Add circle display - show intervals on circle spokes.
  • Add strings display - show line lengths proportionate to interval ratios.
  • K3 toggles original, circle, and strings display.
  • Add M medium step to scale sequences.
  • Add more just intervals and chords.
  • Label scale in display with an exisiting scale name when it exists in MusicUtil, the Xenharmonic Wiki, or Scala.

New release: Pitfalls v0.3.0 tutti terpstra … microtonal scales for everyone!

  • Allow users to browse and play named scales via norns screen UI input.
  • Update named scales list from Scala.
  • Add initial pitch-bent MIDI out support (disabled for now - to be completed in a future release).

Over 3,000 names scales can be browsed and played! Or used as a launching point to edit your own custom scales.


This script is great! Having a lot of fun playing in Glacial-7, Lobonian. TBH I don’t really know what I’m doing but it’s a blast :smiley:

Hacked Pitfalls grid code to use @infinitedigits’s mx.samples and this was the result:


Here’s an interesting article about Khyam Allami’s work promoting software support for microtonal music:


I’m really surprised this script doesn’t have more attention. It is really awesome and probably in my top 5 scripts used.
I think features that would be cool to be added(obviously besides midi repitching) is midi keyboard input(my grid is sometimes hard to play) and more control over the sound parameters/better system the engine.

Thanks for the awesome script!


Wow, great to hear you’re enjoying it. Made my day to hear this :blush:

Thanks for the feature suggestions. All sound good. MIDI reptiching I did start working on, using MIDI pitchbend for monophonic playing. The MPE standard allows for increased polyphony, but not much synth hardware seems to support MPE to date.

1 Like

I’ve been working on the next release of pitfalls.

So far I’ve added support for using the Mx.Samples and MollyThePolly engines.

Other things I’m keen to add are:

  • MIDI keyboard input support
  • monophonic pitchbend MIDI out
  • visualisation the scale degree(s) you’re playing
  • display of “chords” in each scale.

I was just thinking today about exploring more scales and now I have this app to play around with.

Looking forward to playing with it.
Thanks for the midigrid support too.

1 Like

I’m just finishing off the next release of pitfalls, v0.4.0 ostinato odington! So far in the next release:

  • Add MIDI in support to play microtonal scales from your MIDI keyboard
  • Add MIDI out monophonic pitch bend note play to play microtonal scales on external hardware
  • Add “MollyThePoly”, “MxSamples”, “Synthy” engine support
  • Autosave params on change
  • Load from saved params on init
  • Add new ratios display - show intervals/chords as played

Any last requests? Crow support perhaps?


Currently I’m having issues with pitfalls respecting clock rate, it seems to arpeggiate at the same rate regardless of clock settings. If this is expected behavior, then some way of slowing the rate would be nice.

Fortuitously my last commit was a change to use clock with a step_div param to time the arpeggio/sequence. This will be in v0.4.

In v0.3 it uses a metro counter, which does not respect the clock.

1 Like

New release: Pitfalls v0.4.0 ostinato odington … microtonal scales for your playing pleasure!


  • Add MIDI in keyboard support on virtual port 1
  • Add MIDI out monophonic pitch bend note play on virtual port 2
  • Add MollyThePoly, MxSamples, Synthy engine support
  • Autosave params on change
  • Load from saved params on init
  • Add new ratios display - show intervals/chords as played
  • Use clock to time the arpeggio/sequence

Thank you to @chrisl, @nattog, and @Zedkah for being an early audience for this release at the Lines Meetup: London. 11th November 2021.

pitfalls v0.4 - grid demo: