“Welcome to the black hole of eternal font tweaking” wasn’t really a sentence I had ever expected to read, but I know now what Dan Kreider meant when he congratulated (or commiserated with?) me on a new font I had been working on: Ambitus.
In a way, it was Dan‘s fault that I started down this path. I was fascinated by MusGlyphs, MusAnalysis and MusFrets, three fonts that allowed me to do things in a word processor that I hadn’t thought possible. I bought a license to FontCreator because I wanted to find out how he had achieved this, and I was eager to do something similar myself ‒ but I had no idea for a good project. Then I came across a post on the Dorico forum where a user asked how they could write pitch incipits for timpani players in Dorico:
As a timpani player myself, I knew immediately that I had to do this. Using a font instead of a music frame seemed like a good idea since the notes are only meant as hints, not as actual music to be played, and as comprehensive as MusGlyphs is, it can‘t show different pitches.
So here was my little project.
With a few pointers by Dan, I got to work. Creating all the required notes in Dorico was easy, exporting them (using the brilliant Slices function) took a bit of Lua macro scripting, but that was quite straightforward as well. Converting the exported files to something that FontCreator liked to import was a bit of a headache, but a few small Python scripts did most of the tediously repetitive work for me.
After about a day, all the glyphs I had planned were finished and functional: quarter, half and whole notes, with or without stems, flat and sharp accidentals, spanning the range of a standard five-line staff extended by up to three ledger lines in each direction.
Already, this had been a little more complicated than expected. Ledger lines, for example, are shaped differently depending on the absence or presence of accidentals (and whether it‘s a flat or a sharp), so I couldn’t simply take each note and just add an accidental in front of it. Dorico knows this, of course, but my font needed to learn it first.
Once that was done, everything required to write pitch incipits was in place:
The next issue was spacing. How much space should you leave between notes? Do you place them close together (good for incipits where normal spacing rules don‘t apply), or should spacing be regular (good for scales)? And how do you get regular spacing in a font where the width of glyphs varies dramatically? Whole notes are wider than half notes, notes on ledger lines are wider than notes on the staff, and of course notes with accidentals are even wider. In my first version of the font, I had combined the notes with their staff lines and planned to squish the glyphs together if I needed to save space (“kerning”).
But it turned out that scales just didn’t look right in some cases:
Also, when I presented my initial effort for ambitus diagrams (used to show vocal ranges, for example), I was reminded of an alternative form of such diagrams where the ranges are not drawn from left to right but vertically:
So I reworked the font to separate the staff lines from the notes, making the notes “zero-width”, which means that they are placed at the cursor position without advancing the cursor. This makes stacking easy, and it also allows for consistent spacing between notes since only staff lines advance the cursor, and always by the same amount.
The only drawback is that the user needs to make sure to choose a wide enough staff line, or the notes/accidentals might overlap each other. But if they do, it‘s possible to write nicely spaced scales, no matter the accidentals, ledger lines or type of note.
And this was more or less the point where I entered “the black hole”. Once I had moved from simple ambitus diagrams and pitch incipits to scales, I suddenly needed more features: Clefs with key signatures, naturals, double accidentals (and of course, a double flat is much wider than the others)…
Another challenge has to do with the limitations of a font versus a real music notation program: Entering all those key combinations to build, say, a G♯ mixolydic scale can be rather tedious. Therefore, I wrote a little helper script in Python that can (at the moment) build all the “relevant” diatonic scales, either interactively or as an imported module. Other scales (like blues, pentatonic, octatonic, etc.) will be added in a future update.
So, Ambitus will continue to evolve. Just a few hours after its release, a couple of users made a number of great suggestions, the first of which (percussion noteheads, playing techniques and some new clefs) have already been implemented in version 1.1, which is the current version as of this writing.
More features like parenthesized noteheads are in development. I am confident that Ambitus’s users will continue to provide new ideas about how to extend its functionality, and I am excited about the possibilities and challenges that this will create.
Ambitus is available at Notation Central. It was created and is made available under the SIL Open Font License, and as such it is available at no charge; however, a suggested contribution of $10 or whatever you care to contribute towards this project is greatly appreciated.