[Top][All Lists]

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

Re: Lily and Plainsong

From: Juergen Reuter
Subject: Re: Lily and Plainsong
Date: Wed, 1 Aug 2001 11:33:11 +0200 (MEST)

On Tue, 31 Jul 2001, Mark Hindley wrote:

> Juergen Reuter writes:
>  > 
>  > What sort of ligatures are you thinking about?  Neo-mensural style
> I am trying to get vaticana style.
>  > 
>  > I am going to start work on vaticana style ligatures as soon as the
>  > ancient font is (more or less) complete.  Maybe my approach can be
>  > generalized to cover other styles as well, but I do not know yet.
>  > 
> We must try to make sure we don't duplicate.

Uugh!  Maybe we have already duplicated.  The vaticana font is almost
complete now.

> > 
>  > The approach that I thought of for vaticana style ligatures is to write a
>  > ligature context.  The grace context might be a good starting point.  The
>  > rationale results from the following requirements for vaticana style
>  > ligatures:
>  > 
>  > In terms of input syntax, a vaticana style ligature may look like
>  > 
>  >   \ligature { d \pes e d \flexa f g \porrectus a bes g \cephalicus f d },
>  > 
>  > where requests like \pes, \flexa, \porrectus, \cephalicus etc. define the
>  > particular style of ligature and/or the notehead style to use.
> I was aiming for a syntax that made (re)use of existing lilypond
> syntax rather than adding a new layer. 
> So with my implementation of all the single note types and a special
> 4-line staff context you write
> \context Plainsong  { \clef "vaticana_do2"
>       a\punctum b\virga c\quilisma \bar "|/2" b\opunctum a\inclinatum \bar "|"
>       }

You can do all these things already now with existing lilypond syntax with
the patch that I sent on July, 5th.
With this patch, instead of "\puncum b" you have to say
"\property Voice.NoteHead \override #'style =  #'vaticana_punctum b",
but, of course, you are free to define a "\punctum" abbreviation command
for convenience.  There is no need for a special 4-line staff context;
just say "\property Staff.StaffSymbol \override #'line-count = #4".
Rather than saying '\bar "|/2"', you can manipulate the bar size property.

My recent patches concentrate on the 'original' vaticana edition from
1905.  MusixTeX introduces noteheads and ligatures that, as far as I know,
are not part of the vaticana edition (unless I am told otherwise),
e.g. oriscus.  I did not include feta symbols for these for the simple
reason that I do not have any trustworthy references.

> You can also fake a porrectus with <g\puntum b>, although the ligating
> line is missing.

I think you mean a pes or podatus rather than a porrectus.  And this is
one example why there is a need of encapsulation: here you have two
noteheads that are printed one above the other, but performed one after
the other.  This does neither fit to lily's SequentialMusic, nor to its
SimultaneousMusic concept -- it's a mixture of both!  Please also note,
that for reasons of notehead clushes, there are two forms for the upper
notehead; but in both cases, it looks different than a punctum
notehead.  My patch of July 5th includes these variants of punctum

> The note types are implemented as (nominal) durations with name<->duration 
> lookups in an
> alist and a new Note_head::brew_neume_molecule callback.

I added the noteheads with a (dummy) duration of "0" (whole notehead) in
the font.  Why do you need a special Note_head::brew_neume_molecule
function?  Does it output a ligature containing a number of noteheads
as a single molecule?  As I wrote in my last mail, I think it is not a
good idea to encapsulate ligatures into a single grob, since you may get
problems when interacting with other engravers (e.g. staccato marks).

> It all seems to work neatly so far. Lyrics and melismas are typeset correctly.

How does your code interact with lily's spacing and line
breaking engine?  I think that is the really hard part.

> So working in the same vein, I had though of still using the existing
> beam [] syntax to define notes within a ligature. The advantage seemed
> to be that you **don't** have to know the name of the ligature to
> typeset it. IMHO this seems to be a big draw back of your
> suggested implementation.(In my copy of the LU here, there are at least 22
> different ligature types, some with 2 names, and then there are the
> compound ones ...!)

Sorry, seems I was quite unclear on this point.  I do not like the
approach of MusixTeX that tries to introduce a font symbol for each
possible ligature, since you always will find yet another ligature that
is not supported.  My approach is to reduce all complex ligatures
(theoretically, their number is infinite) to a small set of only six
(!) ligatures: pes, flexa, porrectus, cephalicus, epiphonus and an
implicit invisible type.  All other ligatures can then (hopefully) be
composed from these.

"c \pes d" will place "d" above "c" ("d" must be higher than "c") and draw
a vertical line between them.  "c \flexa d" will place "d" right-aligned
to "c" and draw a vertical line between them.  "d \porrectus c" will place
"c" to the right of "d" at some distance and draw a curved fat line
between "d" and "c" ("d" must be higher than "c").  The implicit ligature
"c d" will place "d" close to the right to "c", but draw no line between
them.  By default, punctum will be the notehead that is automatically
typeset.  "c \cephalicus d" works like "c \pes d", but selects a plica
notehead for one of the two notes.  Similar, "c \epiphonus c" selects a
plica notehead for the other note.  The unary prefix operator "\virga" or
"\quilisma" will select the according notehead just for the following
note, and then switch back to default punctum.

More complex ligatures can be created by combinations of the former,
e.g. "c \flexa d \flexa c" (torculus), or "c d \pes e" (scandicus), or
"c \flexa d \porroectus c \pes d", or ...

The algorithm must take special care when selecting a notehead for a pes
to avoid notehead clashes, as already mentioned.  The combination "\virga
d \porrectus c" (used to achieve a left-stemmed porrectus) also needs
special treatment, since a full virga notehead would look strange under
the curved line; in this case, only the stem of the virga is drawn, but
not the full virga notehead.  There may be further special cases that I am
not yet aware of of, but that's all fine-tuning.

> What I thought I needed was a Ligature_engraver that will take all the
> notes (of the 5 basic types) in a [] ligature/beam group and place them next 
> to each other
> and draw relevant lines.

Beams are spanning objects, ligatures are not.

> I have to admit, this is the point at which my familiarity with lily
> becomes somewhat thin. This is my first serious expedition into her
> inner areas. May be this route is not at all feasible. Do shoot me
> down in flames gently :)

Same with me.  But I will try to have a closer look as soon as the still
missing things in ancient-font have been added.  This will still last
three or four more patches.  After that (i.e. in a couple of weeks) I am
planning to work on ligatures.

> All thoughts gratefully received. Of course Han-Wen is right that we
> ought to try to learn from other mistakes in the past.

I agree.

> If people like the idea of what I have done so far I am quite happy to
> send it in.

My quilisma does not yet look very authentic.  Maybe you have a better


reply via email to

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