Making Notating Microtonal Music Simpler

Posted on Posted in Thoughts

Notating music in alternate tunings is a challenge. First you must make a decision on what notation system you plan to use: “standard” quarter tone accidentals, Helmholtz-Ellis, Johnston, or make your own. Once that is settled you next need a way to engrave it. One obvious solution is to write everything by hand, which is fine, but can end up being difficult to read or at least not as professional as printed music. If you go the rout of using Finale or Sibelius you find yourself in an uphill battle trying to hack your way to something that looks half way decent.

The better solution I can to last September was to use Lilypond, a script based notation renderer. Although generally used for standard notation, it comes with examples of how to work with alternate tunings ( Once you figure out how to make your own tuning file (which can be tricky), writing notes in your new tuning is just as simple as in equal temperament.

A while after switching to lilypond, I found abjad, a Python API for generating lilypond scores. This caught my eye as it allows you to programmatically generate lilypond files rather than inputting everything by hand. Since I had already done a piece where I use SuperCollider’s Patterns to generate some notes and wrote them in by hand, this was obviously a useful tool.

One issue however is that abjad does not currently support anything but chromatic pitches and quarter tones. When asking the user list about this it seemed like there was quite a bit of interest in adding this functionality so I decided to work on it myself. This is a slow (but getting faster) process as I’ve needed to lear much more Python than I’ve ever needed and had to decipher the quite in depth abjad API. So far I’ve managed to hack together minimal support for defining your own accidental names, the nearest chromatic pitch (where it will appear on the staff), and the deviation in cents from that pitch. When I say minimal I mean only the Note class will accept this (almost everything else will still complain that what you typed isn’t a note) and the tuning system is not very modular. However this is a promising start and I hope to expand it enough for it to become generally usefull and hopefully part of the official API eventually.