On 8 July 2010 23:20, Joseph Wakeling <joseph.wakel...@webdrake.net> wrote:

> Can you explain more precisely ... ?  This seems like something I should
> understand very well in order to provide an effective solution.

Context properties (using \set & \unset) are tied to engravers: they
provide information relevant to the generation of graphical objects.

Since transposition occurs at the music interpretation stage, it has
no direct connection with engravers: the pitch of a note is fixed
before a notehead is created.  Consider the following minimal snippet:

{ c' }

This generates (simplified) a NoteEvent, with its pitch and duration
as event properties,

(make-music
  'NoteEvent
  'duration
  ly:make-duration 2 0 1 1)
  'pitch
  (ly:make-pitch 0 0 0)

which the Note_heads_engraver hears.  It passes this information on to
the NoteHead grob it creates from the event, so the head's correct
position and duration-log can be determined once it's ready for
printing.

If we transpose the snippet,

\transpose c d { c' }

the pitch is changed before it reaches the engraver (in fact, it
happens just after the parsing stage with the creation of a
TransposedMusic music object):

(make-music
 'NoteEvent
 'duration
 (ly:make-duration 2 0 1 1)
 'pitch
 (ly:make-pitch 0 1 0)

You can see an example of a music property relevant to transposition:
untransposable.

\transpose c d { c'2 \withMusicProperty #'untransposable ##t c' }

-> the second c' remains untransposed.

Take a look at lily/music.cc to see where the transposition takes place.

Cheers,
Neil

_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to