lilypond-devel
[Top][All Lists]
Advanced

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

Re: Ancient notation: spacing, ligatures, bar lines: some ideas...


From: Till Rettig
Subject: Re: Ancient notation: spacing, ligatures, bar lines: some ideas...
Date: Sat, 15 Dec 2007 12:42:53 +0200
User-agent: Thunderbird 2.0.0.6 (X11/20071022)

Hello Juergen,

thanks for the reply! Again, as almost one year ago, your mail is full of really good hints! I should just know a bit more about programming -- hope I will be able to learn something about it...

address@hidden schrieb:
Hi, Till!

Very nice to hear that there are people still interested in ancient notation! And sorry for my late reply: my job at university unfortunately ran out, and now I have to re-organize a lot of things, inlcuding my internet connection (though I hope to get around in the next couple of days).
You see, my answers also take their time... :-)

I had similar problems. These problems are partially documented in the lilypond code of the ancient notation template A.5.1 in the learning manual. Even more comments are in the file ly/engraver-init.ly in the VaticanaVoice and Vaticana/Mensural Voice/Staff context definitions. See also the comments and SpacingSpanner tweakings in ly/gregorian-init.ly.
Yes, I had a first look at these files, which gave me some initial thinking I would start understanding lilypond... I will look at them again, though.

My experience is that as an (unwanted) side effect, you get better spacing, if you do _not_ completely remove everything related to bars and allow line breaking everywhere (with "barAlways=##t"). The reason is, that if you have bars (even if they are invisible), the line breaking algorithm will by default break lines at (possibly invisible) barlines, thus getting much more tight spacing. If you allow the line breaking algorithm to break the line _anywhere_, lily tends to put much more space between the notes.
Well, but so far I was about _really_ tight spacing, so it sounds with invisible barlines there would be better results. Actually I discovered that for the barlines, Werner had posted a bug report already, issue 462 -- and the response by Han-Wen didn't sound too encouraging... In the MensuralVoice/Staff you removed the barlines engraver totally, doesn't this mean that I cannot print any barlines anymore? Isn't it then better to not remove it but just hide it so the final barline would be possible to be printed?

By the way, once we had the two global properties "packed=##t" and "ragged-right=##t" (actually, I once introduced ragged-right specifically for ancient notation), to get tight spacing. Unfortunately, the spacing was still unsatisfactory.
I will see for this packed-property. ragged-right, as far as I can see, doesn't do much on spacing, if the line would be full anyways (that ist if there is enought music to be put on more than one line).
So my naïve idea would be to count the amount of space of all
ligature heads minus the real head-width and subtract this amount from
the space of the ligature.

The problem is that you still have multiple columns, each of them taking up some space >0. And setting all of them except the first column to have width=0 will IIRC just generate lots of warnings by the spacing engine and give some unexpected result. :-(
Hm, I didn't know about this column system, but sure it makes sense. On the other hand, as a non-programmer, do warnings harm? What if we just hide them for this case? Where would you set the width of note columns?

Actually, also the ligature brackets in the normal notation get badly
cruched by the tight spacing: suddenly they appear in some cases to be
too short and won't cover all the notes actually included in the
ligature.

Hmmh, I did not know about that; maybe this problem was introduced recently? Or I just did not come across this problem by now...
Yes, it is only when setting the spacing-increment to 0, I think, and then only if you use the Candenza. That was why I didn't want to use that. But maybe it is just about 0 and some other number like .1 makes the spacing behave well? I will investigate. Might be that the collecting of ligature heads and putting them together expects the spacing to be somehow bigger?

If assuming that my ideas about the spacing engine are correct I
thought to implement the tight spacing somehow into the MensuralStaff
which automatically should call mensural voice -- there could be
differently named staves and voices containing the different notation
style that are available for ancient notation.


Sure, but I think that ultimately the c++ code needs to be tweaked to gain satisfactory spacing.
Yes that's true. So far, I can only play with the "surface" properties, since they are documented. And somewhat all I read about c++ made me afraid that it will be too difficult for me without proper
background.

Actually, a while ago, I isolated those parts of the c++ codes that need to be tweaked for enhanced ancient notation spacing. The attached diff refers to some 2.9.x release of lily (according to the VERSION file, it must have been 2.9.29). If I recall correctly, this patch fixes most spacing problems, but completely breaks the spacing for modern notation. Of course, lily has changed much since then. However, if you want to dig in the c++ code of a current version of lily, the attached diff may give you some hints where to start.
Thanks, I will see what I can do. I will probably have really time only in January, but hope that I might then figure out some of the problems.

There are actually some other issues I came about:

-ancient clefs are smaller than the normal ones, but so far spacing is counted for the normal clefs. I don't again know where the spacing gets reserved for the clef sign, but thought we should have a ancientClef that puts the right spacing. The naming could then also be somehow made easier? Or maybe not, since the style has to be indicated anyways. The spacing is probably only a problem with the mensural and petrucci style (and the neumes?), the neomensural c-clef, at least, is so wide spaced that it won't be a problem.

-General approach of ligatures: If I will understand lilypond internals/c++ code some times I would really much like to widen up the support for different styles of mensural notation. There should then be an interface to change the style. And then I thought, that wouldn't it be maybe easier to have a non-musical ligature function for the mensural style? Something like \ligature { aB cB dB } or \ligature BBB { a c d }. It would just produce a single sign taking up one column. Different styles could then be assigned to the \ligature function. And when printed in normal style it would translate to \[ a\breve c\breve d\breve \].

Well, only thoughts so far.

Greetings
Till




reply via email to

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