[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