"H. S. Teoh" <hst...@quickfur.ath.cx> writes:

> I have a Scheme function that returns a music expression. Unfortunately,
> the expression returned depends on the properties of the context it's
> evaluated in. I.e., based on the current setting of
> Staff.dynamicAbsoluteVolumeFunction it will return a different number of
> events in the music expression.
>
> Is this possible?

\applyContext works at the process-music stage.  That's actually a bit
late to generate stream events.

> The background of this is that I'm writing a Scheme function that
> generates single-note crescendos by emitting a series of \set
> Staff.midiExpression = ... events.

Oh, but that's perfectly manageable with \applyContext.  Don't generate
any events, just call ly:context-set-property! directly.  If you don't
want to find Staff yourself, you can just write

\context Staff \applyContext (lambda ...

and then the context passed to the applyContext function will already be
a Staff context.

> Currently I've written a Scheme function that's able to generate these
> events; however, it requires me to specify numerical starting / ending
> values for midiExpression. I'd like to be able to specify dynamics
> instead of numerical values, and have the Scheme function
> automatically look up the numerical values based on the current volume
> function defined for the Staff.
>
> However, so far I haven't been able to figure out how to read the
> Staff properties except using \applyContext with a lambda, and AFAICT
> it's not possible to return a music expression from this lambda?

So far it does not sound like you want anything returned rather than
setting some properties.

-- 
David Kastrup

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to