gregorio-project / gregorio

The Gregorio Project
http://gregorio-project.github.io
Other
164 stars 43 forks source link

Improvement of flats line by line #157

Open eroux opened 9 years ago

eroux commented 9 years ago

Flats can have convoluted meanings, and occur until the end of the line, so Gregorio should know be able to add flats or naturals at beginning of line.

More details explanation, from a mail on the mailing-list.

Currently this is the part of score production that is most laborious for me, because the flats and naturals have to be readjusted manually each time depending on the width and text/chant size of the score. If we were able to have a more absolute system of flats that could appear or not appear depending on the context, that would go a long way towards making an individual GABC file much more flexible.

As far as I know, there are two different systems in 19th/20th century chant books for notating flats and naturals.

1) In the Vatican edition, a flat applies until a natural, or a division line, or a new word.

2) In Dominican chant books, a flat applies until a natural or the end of a line.

I think that the best way to notate flats in GABC should be to put a flat indication on every note that ought to be flat, and then have Gregorio determine when to actually print the flats in relation to the rules of the flats. If this change was to be implemented, perhaps it could be done in a way that left that current system in place (and would thus be backwards compatible) but which added a flat or natural to a note in a way analogous to the notations that add a rhythmic mark to a note, i.e., by putting a letter after the pitch/height indication. As an offhand suggestion, you could use % for flat: [e.g.: A(i%)men.(j)]

A specific letter-notation for natural would not be necessary because a natural would be added automatically if the flat was not present in the notation.

eroux commented 9 years ago

This feature is currently just impossible to do. I'm lobbying for the LuaTeX team to release the code to build paragraphs in Lua, as it would make it possible (but not obvious at all!) to do this... Or maybe there would be tricks with discretionary... nothing obvious...

henryso commented 9 years ago

While it can still be handled by explicitly flatting all flats, it might be worth considering a natural if the clef includes a flat.

henryso commented 9 years ago

Also, I think the Vatican edition rules are doable with the gregorio executable. As for the Dominican rules, I'll take your word that it's impossible with the current LuaTeX.

eroux commented 9 years ago

Indeed, we could implement the vatican rules in a next release... what about a flat-system in gabc header, with none, Vatican and Dominican possibilities, defaulting to none (current behaviour)?

henryso commented 9 years ago

Sounds like a good way to do it to me.

henryso commented 9 years ago

Thinking about this, the Vatican edition rules actually does not change depending on how the score falls on the page, so it requires no tweaking at all when the lines break. The only reason to add this complexity for the Vatican edition rules is if you want to switch the rule sets by changing a single property. Therefore, I don't think it's necessary to implement this until we know what needs to be done in some future version of LuaTeX to support the Dominican rules.

rpspringuel commented 9 years ago

I think that the Dominican rules could be supported. We can tell when a new line begins because GregorioTeX needs to print the staff lines at the beginning of each line (as well as the clef that goes at the beginning of the line). By piggy backing onto an event like this, we can reset a visibility tracker which determines whether or not an accidental needs to be shown.

eroux commented 9 years ago

It's not as simple as you might think... Again, can you show a minimal example writing something like printing clef for line 1, printing clef for line 2, etc.?

henryso commented 9 years ago

I think the line ending detection for variable line heights may be a useful start for the Dominican flatting rules.

eroux commented 9 years ago

Absolutely!

henryso commented 9 years ago

Thinking about this, if we use the current algorithm, which detects line endings at the end of the score, when the callback is called, it seems we would need as many passes as lines with flats on them. Each pass would get one line right which would displace the following lines, requiring another pass, unless we happen get lucky because of word spacing. Any thoughts on a better way with the current algorithm, or is it infeasible?

eroux commented 9 years ago

As this is not an emergency, maybe it's best to wait for Hans Hagen to release the lua paragaph builder from ConTeXt, this would make this feature feasible in a more deterministic and straightforward way. I don't know when that's going to happen though (I recall it to him from time to time).

olivierberten commented 8 years ago

It seems Solesmes Graduale considers the flat valid only until the end of the word (but still being canceled by a line break). See: http://gregobase.selapa.net/chant.php?id=713

Graduale Romanum, Solesmes, 1961, p. 401 Graduale Romanum, Solesmes, 1961, p. 402

That said, I wonder which rule is to be applied to the first line of page 402. Are the bs of populi and nostri supposed to be flattened?

The question of the automatic flattening comes on the 4th line of the GregoBase retranscription: depending on how the music falls relative to line breaks, a flat would be needed or not.

GregoBase chant 713