I understand the Scheme language at intermediate level, but am not adept at
processing Lilypond data structures.

I'm looking into Snippet 465:

http://lsr.dsi.unimi.it/LSR/Item?id=465

I have the following in my Lilypond code, for typesetting a common guitar
strum pattern:

rhtOne = #(rhythm-template #{ s16 s16 r8 s16 #} )
\relative c' { r4 \rhtOne <f a d>1 r2 }

This works fine.  However, this does not:

rhtOne = #(rhythm-template #{ s16 s16 r8 s16 #} )
Dnine = { \relative c' { <f a d>1 } }
\relative c' { r4 \rhtOne \Dnine r2 }


The problem is that the snippet constructs a single chord event to apply
the rythm to, by walking down the 'elements property of the first
parameter, and collecting their pitches into a list with (map):

http://pastebin.com/tSm1tw65

The data structure this sees from my first Lilypond example is like this:

http://pastebin.com/Tx8qhz6u


However, the data structure created by my second Lilypond example looks
more like this:


http://pastebin.com/FuCRHDyK


In the first example, it sees an 'EventChord, so we properly fetch a list
of all its children's 'pitch properties.  In the second example, it's
'SequentialMusic, not  an 'EventChord.  What I want to do is walk down the
data structure and find the first EventChord or NoteEvent.


That doesn't seem too hard, actually.  Need to define a function
first-non-sequence, and conditionally drill farther into the data structure
until I find the first non-sequence.  Understanding that this is pseudocode
instead of proper syntax,  I'd need to do something roughly like the
following:


http://pastebin.com/3eNNYjHE


Also have to potentially recurse farther into nested levels of
'SequentialMusic or down each item in the 'elements list, I am comfortable
fleshing it out to that level.


What I'm wondering, is what (if any) Lilypond scheme function do I use to
determine the type of a music data structure?  I could certainly just say
(car mus) but I'm wondering if there's a function I should use for the sake
of encapsulation.  I see that one can get properties of a music element
with (ly:music-property mus 'SYMBOL), the existing snippet code grabs the
'elements list using (ly:music-property mus 'elements).


If it's just a matter of use (car mus) and comparing the symbol against a
given list of options, fine, I just don't know if I'm going the right way.
 I've been looking at the docs for several days now, and have done so at
several times in the past, and I'm just not quickly finding what I need.


My goal is to finally immerse myself into the Scheme side of Lilypond, and
start implementing some fixes to the various rhythm-pitch template snippets
that I've been wishing for, instead of complaining.
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to