On 4/23/15 12:02 AM, "Urs Liska" <address@hidden> wrote:
Am 23.04.2015 um 06:07 schrieb Carl Sorensen:
So now I'm going to jump in on what I think a Voice context is.
A Voice context is a context, which means it can contain engravers,
performers, and music expressions.
...
I'd be happy to try to answer any questions others might have about a
Voice.
Thanks,
Carl
I think this is a good explanation, but it requires some prerequisites
(and that is one of the points I find very hard on the LilyPond learning
curve: There are so many things where you have to understand other
things before, and these again have there required pre-understanding
a.s.o. Sometimes you get the feeling there are short-circuits of the
kind that in order to understand a part of documentation you'd have to
have that much knowledge that you don't need that documentation anyway).
What is a context?
I mean, when I run LilyPond, when does a context "enter" and what is its
purpose?
I think I answered that in my other thread:
https://lists.gnu.org/archive/html/lilypond-user/2015-04/msg00837.html
"Contexts are LilyPond objects that contain properties, music expressions,
and translators. Some contexts, like Score and Staff, can contain other
contexts as well. Other contexts, like Voice, are bottom contexts and
cannot contain other
contexts.
Contexts are responsible for controlling the output (printed or midi) of
the music they contain. They do this by calling translators in the
environment of the context properties."
What is an engraver?
When reading this word I think of a human with a certain profession.
When I try to translate this to LilyPond I think of some module that
"prints" items.
An engraver is an object that is responsible for creating printed output
of a certain type as controlled within a context.
The way an engraver works is to listen for events and create grobs based
on relevant events. When it creates a grob, it announces that creation to
the context.
The events that engravers listen for can be either stream events or grobs
announced by other engravers.
I think these details of how engravers work are necessary for developers,
but not for users.
But as far as I've learned recently an engraver is first an entity that
waits for items to be passed to it from the "context" and that can then
do something with this item, e.g. printing it, modifying it before
printing, writing the event to a logfile or sending an email on its
behalf.
I'm still not really sure about how that fits into the architecture.
What is a performer?
A performer is an object that creates MIDI output, by following the exact
same process an engraver follows to create printed output.
HTH,
Carl