lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Lilypond's internal pitch representation and microtonal notation


From: Hans Aberg
Subject: Re: Lilypond's internal pitch representation and microtonal notation
Date: Tue, 21 Sep 2010 14:16:32 +0200

On 21 Sep 2010, at 11:46, Joseph Wakeling wrote:

A sharp is M-m and a flat m-M.

If I understand right, this is a key "trick" of your system, since such representations allow you to raise or lower the pitch without affecting
the degree.

Yes - accidentals do not affect the degree: they are of degree zero. One can add notes and intervals on this abstract level, and the degrees add as well. In mathematics, a function f is called a homomorphism (of abelian groups) when f(0) = 0, f(x + y) = f(x) + f(y), f(-x) = -f(x). The degree, which is the sum of the coefficients is a homomorphism.

So by extension, if we say that q is a quarter-tone, to raise or lower
by a quarter-tone would be to add (m-q) or (q-m); and to raise or lower
by 3/4-tone would be to add (M-q) or (q-M).

Typically, one might set the neutral second n between m and M, so there two choices: m + q and M - q. For an exact quarter-tone they would be the same when plugging in values, but algebraically they are different. So set n = m + q:

.... but where/how in that system do we distinguish between for example
natural + 1/4 and sharp - 1/4 .... ?  Presumably the former is (m-q)
whereas the latter is (M-m)+(q-m) ... ?

The whole pitch system is i m + j M + k n, where i, j, k are integers. If k = 1, then one needs two accidentals n-m and n-M: the amounts needed to go from the i m + j M to reach the n. If k = -1, then the other pair is needed: m-n and M-n. If k > 1, then one needs k of the first pair of accents, and if k < -1 one needs -k of the second pair of accents.

In the traditional typesetting, one has a minor second m and a
major second M, so it is all combinations p m + q M, where p, q
are integers, which can be identified with all pairs (p, q).

... so if we extend this vectorial representation to a 3D case for
quarter-tones, (x_M, x_m, x_q), (NB my q is different from yours:-)

Yes, some mathematicians do that error, too, though in print, q as a variable might be typeset in italic, whereas as constant in upright type.

we
can think of natural+1/4 as being (0, 1, -1) while sharp-1/4 would be
given by (1, -2, 1).

No: this is the tricky part. Introduce a neutral n = m + q. Then the two accidentals for k = 1 are n - m = q and n - M = n + q - M. In coordinates, this is (-1, 0, 1) and (0, -1, 1).

The reason is that you want to express a pitch i m + j M + n and notate it against a pitch of the staff system which is of the form i' m + j' M. So the difference has coefficient 1 on the n.

Depending on the notational system desired, those could then be
represented by the same accidental (the half-sharp symbol) or different
ones (natural-with-up-arrow and sharp-with-down-arrow).

If you are carful not writing any music which introduces the -n, you will actually only need two accidentals for raising and lowering the quarter-tone. I find the following example helpful for remembering:

In Persian music written (in one interpretation) in E53, one sets m = 4, M = 9 (Pythagorean tuning), n = 6. The raising accidental is called sori and is n - m = 2, the lowering is called koron and is n - M = 6 - 9 = -3. The point is that the koron lowers with more than what the sori raises. The algebraic system keeps track of this.

Suppose now that I wanted to extend the quarter-tone system to one
including eighth-tones (I'm thinking here of Ferneyhough's "La chûte
d'Icare" which uses the "standard" quarter-tone accidentals supported by Lilypond plus up- and down-arrows to indicate raising or lowering by an approximate eighth-tone). Would I have to add an extra dimension to my
vector space,

  (x_M, x_m, x_q, x_e)

... or is there a cleverer way of dealing with this which lets you keep
only 3 dimensions?

The algebraic system allows you to do both are any number of extra pitches, and also change the scale of the staff system.

The reason I ask is that I can't see a means of raising/lowering by an
eighth-tone without altering the degree, unless I have the possibility
to have forms (q-e) and (e-q).

... or did your term "neutral second" mean "something that does not
alter the degree by definition"?

It works just like in the Persian music example above. If your eight tone is e, introduce a neutral n_2 = m + e. When the coefficient of n_2 is 1, one accidental raises 1/8 and the other lowers 3/8, and when the coefficient is -1, one accidental lowers 1/8 and the other raises 3/8.

These are then algebraic relations. If you really want to have exact 1/8 notes, then just introduce quarter-tone glyphs when the coefficient of n_2 is 2 or -2.

Incidentally, if I understand right I think your system offers a way of
separating out the definitions of staff pitches and accidentals, since
one can define the former merely in terms of degree values, while the
latter can be defined independently in terms of different zero-degree
"vectors"; ...

Yes, the values of the staff scale does not have anything to do with the accidentals: accidentals are only needed in order to express a difference between a note and the note value in the same degree on the staff.

And the accidental is a sum of pairs of seconds, which can be computed without any knowledge of available glyphs. The algorithm computes (relative an order of the seconds) a minimum of accidentals. So I think that if one wants to have a different representation, it would be easier to start off with the minimal one.

...although I wonder whether it might be better from a
representational view to think of maps rather than vectors, e.g.

   "Major second" -> 0
   "minor second" -> 1
   "quarter-tone" -> -1

for quarter-sharp, since this kind of representation allows you to
maintain different "neutral seconds" without risk of overlap.

Yes, this is how I wrote the Haskell code, as maps. I actually started with the vector representation, but when defining Just Intonation, one uses two major seconds: the Pythagorean M = 9/8 and the Just JM = 10/9. One might want experimenting with them.

So therefore I made them maps from strings. This way, the system does not have any reference to any traditional scale or seconds m, M - they are chosen as special cases.

A drawback is that one must keep track of these seconds m, M when doing traditional typesetting. But one can write an interface hiding it away.

(Forgive me if this kind of stuff is dealt with in your code; I haven't
looked, because my Haskell knowledge is extremely basic and these days
are extremely busy in my day job...:-)

If you have more questions, just let me know.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]