lilypond-devel
[Top][All Lists]
Advanced

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

Re: Diatonic notation system


From: Hans Aberg
Subject: Re: Diatonic notation system
Date: Mon, 8 Dec 2008 15:52:38 +0100

On 8 Dec 2008, at 05:20, Graham Breed wrote:
´That is not the problem , but that whole tone is not the double of the
half
tone. M = 9, m = 4, so that there are 5*M+2*m = 53 tonesteps or commas in
an
octave.

How is that a problem?

The rules for computing accidentals and transpositions will be different,
and it will sound differently (see below).

To get it to sound right, you multiply by 6.  If accidentals and
transpositions don't work you may need to define a different grid from
them.  The worst is that you need one init file to define the notation
-- so that the accidentals are distinct where you want them to be --
and another init file to define the true pitches.

When I fiddled around with it, intermediate pitches were always computed against those six M, so there will always 2 m to the M, or E12.

In the Turkish file, M is divided into 9 parts I recall, but that makes 6*9 = 54 divisions to the octave. But then each m gets 4.5 parts, so in effect, one is in E108.

The difference to E53 is probably small, but it is still a fix, and not the real thing.

I was then thinking about letting M, m being rational numbers, with 1 = the octave, but that then only admits n-equal temperaments.

Then I made the diatonic key map, and used it for active playing, led me to think it right. And it is simpler to store integers than rational numbers in a computer.

When I looked at it, it computes accidentals as an offset from the
whole-tones, which are six to the octave. That forces E12, and for
intermediate pitches a multiple of 12.

Oh, this looks like a problem.

And this is what causes the problems. If done properly, the offsets should be computed properly, it should be done towards a scale that also involves
m, as only in E12, there are six M in the octave.

Meaning Lilypond still has a way to go for microtonal output.  It is,
at least, improving.

The m M model I gave, I think makes the most of the Western notation system - it is what it actually notates. And it focuseS on musical function, writing notes, not pitches, the latter that can vary with interpretation.

Even if the pitch specifications were accurate,
they'd have to be converted to pitch bends.

Even this may not work correctly, because a pitch bend may require change in tone color (timbre). When playing say E31 in Scala, I noticed on some sound patches changing erratic in timbre.

Then all kinds of
problems come in.  Most of the time it's simpler to talk of "half
steps" and program the synthesizer to do the tuning.

So therefore I think that MIDI is not a suitable format for a microtonal output, leading to the idea of an intermediate formate that can preserve the original diatonic structure.

Yes, and that is essentially what I am saying. The Western musical notation system is diatonic in the sense I described it. This is very clever, because it then work, regardless if it is Pythagorean, E12 or meantone tunings used:
these latter are just differently intonations of the music.

The trouble is the output is still MIDI.  If you could get Csound
output it could all work properly.

Csound is probably much better - though I could not get it working on Mac OS X. :-)

Is there a way of using the
Lilypond parser and writing different output?  If you have patches to
make Lilypond do what you want that's something you could show the
developers.

Once one has written a MIDI file, then the information needed fro retuning is lost, as one needs to know the underlying diatonic structure, and the difference between frequency and pitch bend. Also, there is the problem of scale stretch on inharmonic instruments, like plucked strings.

Csound is a much better place to start for microtonal output.  I'm
working on a custom format that can be processed into either Csound,
ABC, or Lilypond.  That way I don't have to fight MIDI.  Lilypond
could be very flexible for printed output if it had arbitrary
accidental glyphs.

There are also Scala .seq files.

Yes, I discussed this a bit with Manuel Op de Coul. The LilyPond MIDI files cannot really be retuned. So one needs some intermediate format is needed.

But I think LilyPond should make its own format that optimizes the information that can the Western notation notation system produces. Also SCala tend to treat scales as pitches. So therefore it might to convert to Scala files from another format.

So I think this system of defining an interval by a number and then looking up accidentals does not work. Instead, the pitches should be recorded as written, imposing any ET relations at need. But even then, it is common to stick to diatonic notation conventions, and only apply E12 conventions
selectively.

Even chromatic runs may be notated in E12, but in a meantone tuning, that is selectively choosing flats and sharp to make up 12 in the octave. This is the difference between the 12-note "meantone", and the in general infinite
"extended meantone" tunings.

Are you saying that doesn't work now?  You always specify the nominal
the alteration is relative to.  The diatonic pattern should be
preserved with transpositions and if sharps and flats get swapped it's
a bug.  All the information for extended meantone is there.

I think there are at least three ways to notate chromatic runs, and I do not know which ones work in LilyPond. Looking into scores of older music, 19th century or older (like Beethoven's "Für Elise" suggest one can take meantone tuning accidentals and stick to that, that is, one chooses 12 pitches to the octave with a transposition jump somewhere, called a "wolf".

Then one might make a transposed version of that, say taking all pitches of major and minor scales one fifth up and down. In key A, that would be
  A Bb B C C# D D# E F F# G G#
This requires that one is knows the key A. I do not know if that is done, but those are the pitches in the chromatic runs in a score of Für Elise.

Finally, one can notate in E12, just minimizing the number of accidentals needed, so it is different going up and down.

And engravers in the past may have simply changed it enharmonically, so scores may not be reliable.

The MIDI will always be a mess because there are 7 nominals and 12
notes.  You could define alterations relative to your synthesizer's
tuning table, and even alter the size of a pitch bend.  But it'll
break when Lilypond assumes a "half step" between consecutive notes.

The problem is complicated also by E12 enharmonic equivalence. If F# and Gb appear in music and are returned, they will no longer be the same. In Pythagorean tuning (or E53), F# is higher that Gb, and in meantone tunings (like E31), F# is lower than Gb.

But the diatonic playing is the same, regardless whether F# is higher or lower than Gb.

Yes, the intermediate pitches are specified as fractions of a whole
tone.

For music without intermediate pithes, as integer pairs (p, q), referring to
the abstract combination p m + q M.

If the music has abstract combinations instead of pitches, what is
Lilypond supposed to do about it?

It should extract the octave, note name, accidental (possibly look up for called for enharmonic equivalences), and then typeset that. There is an easy way to do that.

First compute the scale degree p + q, and compute the octave and note name by dividing by 7: octave is the fraction, remainder the note name. Then subtract octave and note name from p m + q M; the result is of the form (-r)m + r M, where r if > 0 is the number of sharps, and if < 0, the number of flats is -r.

Take an example: take reference note A below middle C. Then compute 2m + 7M above this A. Scale degree is 2 + 7 = 9, so dividing with 7 gives one octave and two notes above A, that is, note name C. This pitch C is (m+M)+(2m+5M) = 3m+6M above the given A. The difference of the original note and this C is (2m+7M) - (3m+6M) = M - m. So there is one sharp, and the original note is one C# one octave above the given A.

This works in the generalization with more scale degrees, if one has one note name per scale degree.

That is, there has to be letters A B C D E F G ... filling up the octave, and such that their scale degrees p+q are 0, 1, 2, ..., (n-1), where n is the number of diatonic notes in the scale.

So when one has implemented it for 7 notes per octave, it is not much more difficult to do it for any number.

If stores the notes as octave, scale degree within the octave, and number of accidentals, then, in order to compute the p m + q M, one needs to know these values of the octave and names. So the m M model is a notation independent abstraction.

For music with intermediate pitches, one extends this to sequences (p, q, r_1, ..., r_s), referring to the abstract interval combination p m q M + r_1
n_1 + r_s n_s.

How else do you suggest that be done?  You can write a function
that converts from your chosen units into fractions of a whole tone
with whatever precision you choose.

Only if one knows m and M in advance, and it will generally destroy the
musical structure.

If you don't know M and m in advance, how is Lilypond supposed to
guess them?  What's the problem with the musical structure?

LilyPond should not care about them unless explicitly called for. One is situation is computing enharmonic equivalences. But most music is typeset diatonically, only calling for enharmonic equivalence in certain situations. The other is when producing a sound output.

Now that fixation is not only a problem for MIDI files, but may cause transposition problems, as a half-flat may be erroneously altered to a
half-sharp on the semi-tone below.

Could it? Define the "half-flat" as a bit less than half a semitone,
then.

The problem is that one does not agree on what it should be, and the music may drawn towards E53 in some interpretations, so one is back to the problem of changing m. But the notation is still the same. So it would be better to
keep underlying model preserving the musical intent.

That's why you have init files.  Supply a different init file, or
alter the tuning specifications.

The notation does normally tell what the tuning should be, so one would want to retune it, even if the typeset output is the same. Think of an archive with Medieval tunes - as it is now, they MIDI files will be in E12. But in those times one used E53. And if set in E53, they may not work with instruments in E12.

A more immediate concern would be fixing Arab music. The guy who didi it fixed it at E24, because they use such symbols, but everyone agrees that
the
intermediate pitch is not an exact quarter-tone.

So change the init file.


There is the personal interaction problem: even though one agrees what the notation should be, one does not agree what the tuning should be. So as it is, set in E24, people may typeset a lot music that can be hard to retune.

Why are you so worried about what "people" might do?

The problem is what the official version are. If the official version sets a specific tuning, then it is not possible to change that.

A similar problem appear with music typeset in E12: if it should be retuned,
one must first resolve enharmonic accidentals.

Music isn't typeset "in E12".  It's typeset in a diatonic notation
system, exactly as you wanted.  The problem is that it tends to be
heard in E12.

Sorry, typo: if the sound output is in E12, then it cannot be retuned without the underlying diatonic structure.

By contrast, properly notated music works in any tuning.

No, not any tuning.

Any diatonic tuning: any choice of m and M. It may not sound good, but it is possible.

So the current system invites poor notation that cannot be easily retuned.

It depends on how the pitches are specified, which depends on the init
file.  If a half-sharp above C is the same as a half-flat below C# you
may as well say so.  If you want them distinguished you have to write
an init file that gives them different names.  Given that, the music
can easily be retuned so that the two pitches are different.  And the
two pitches can be written differently.

The problem was that even if one gives them different names, LilyPond seems to compute them by checking nearest offset to the six M's. So if they are set in E24, then such confusion can arise. - I do not know if this is the way, or how, LilyPond is computing intermediate pitches.

  Hans






reply via email to

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