At the beginning of the last post,
I listed the three timbral components that make up each note. In that post,
we dealt with the first two: dynamic and pitch. Now, we’re left with the final
component: phoneme sound/quality.
For the vowel lines, the natural sound of the letters provides a sustained sound
rather than the more percussive consonants. To start providing some variation,
the vowel parts (not including Y) will modulate back and forth between
the long and short (American English) versions of the vowels. These are
[æ] (cat, apple)
[ei] (late, make)
[e] (let, tell)
[i:] (be, see)
[i] (tip, pick)
[ai] (ice, find)
[o] (not, rock)
[ou] (go, note)
[ʌ] (cut, love)
[u:] (rude, June)
For the consonants, let’s give them a bit of sustaining power, so they will
modulate through the long vowel sounds: [ei], [i:], [ai], [ou], [u:].
In order to decide when each part modulates, we’re going back to the original
coordinate sets we generated in the first post
To determine the inflection points, in English:
and in Elixir
So this means that the A part would begin by singing [æ] in the first measure, and
by measure 19 (the list of measures above, like all lists in Elixir, is 0-indexed),
the part would have modulated to singing [ei], and then would stay on [ei] until
modulating back to [æ] by measure 46, and so on.
For the consonant parts, I want to do something a bit more involved, to make sure they’re not
all modulating between vowels in the same order. To wit, I want it to work like this:
This is almost identical to above, except that we assign vowel phonemes while they’re
still sorted by Y value, so that each part, when sorted again by X value, would
have its own ordering (or, at least, not a universal ordering) for the vowel additions.
As in the description above, in the Elixir code this is simply
a matter of changing the order of operations:
And as we can see, this does indeed provide us with some amount of phoneme variation
between the consonant parts:
Cool! Now let’s add it into the score.
Let’s look at a few sample pages
Great! This has come a long way from the first draft. With the musical elements, and
the code that generates them, in place, it’s time to move on to some refactoring, both
of the code and the resulting LilyPond output. Stay tuned!
The code I’ve written thus far, in almost exactly the same form it has appeared in in these posts, can be found
here on GitHub. Future blog posts will include
links to refactored code as appropriate.
Thanks for reading! If you liked this post, and want to know when the next one
is coming out, follow me on Twitter (link below)!