lilypond-user
[Top][All Lists]
Advanced

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

Re: Scheme: change duration of NoteEvent


From: David Kastrup
Subject: Re: Scheme: change duration of NoteEvent
Date: Sun, 09 Aug 2020 15:59:53 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Lukas-Fabian Moser <lfm@gmx.de> writes:

> Hi Pavel,
>
> Am 09.08.20 um 12:30 schrieb Павел:
>> I want to write simple function that will be change duration of
>> note. But I stuck on the first step: I can't "extract" (or "see")
>> the duration property:
>>
>> \version "2.20.0"
>> mynote = c'
>> \displayMusic \mynote
>> #(display-scheme-music
>>     (ly:music-property mynote 'duration))
>
> Try setting mynote = c'8 from the start.
>
> LilyPond interprets your mynote as a naked pitch (and you obvioulsy
> can't extract a duration from a pitch). This can be seen by doing 
> #(display-scheme-music mynote) which yields (ly:make-pitch 0 0), or
>  simply by #(display mynote) which yields #<Pitch c' >.
>
> It seems using \displayMusic hides this fact by first upgrading
> #mynote to a full-fledged NoteEvent; these implicit conversions happen
> all the time in LilyPond.

It's not really \displayMusic which does it but the parser.  The parser
would pass the pitch to \displayMusic as-is, but the predicate for
displayMusic's argument is ly:music? which refuses taking it so the
parser instead checks whether it can interpret \mynote in a manner more
acceptible to \displayMusic.  When it finds a valid interpretation
passing the predicate, it ultimately calls displayMusic with it.

-- 
David Kastrup



reply via email to

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