[Top][All Lists]
[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