Hello Aaron,

Thank you for your help. That does make sense to me and works out quite
well -- I don't yet have a grasp how various commands and settings are
actually working in LilyPond. I found another example in the LilyPond
documentation that shows the internal representation. Where do I find this
for input I want to inspect further?
http://lilypond.org/doc/v2.20/Documentation/extending/doubling-a-note-with-slurs-_0028example_0029

I tested your syllable function with tweaks (like changing a notehead to a
quilisma), and expressive marks like a tenuto. It appears the current code
doesn't handle them (this is getting into advanced territory much more
quickly than I expected).
Sample input I attempted: \syllable { a' \noteQuilisma c'' b'_\tenuto }

where
noteQuilisma =
#(define-music-function (note) (ly:music?)
#{
\tweak NoteHead.stencil #ly:text-interface::print
\tweak NoteHead.text \markup {
\scale #'(0.24 . 0.24)
\override #'(filled . #t)
\path #0.0 #quilismaPathGreciliae
}
\tweak NoteHead.X-offset #0
\tweak Stem.stencil ##f
#note
#}
)


Many thanks,
mattfong

On Mon, Oct 5, 2020 at 9:50 AM Aaron Hill <lilyp...@hillvisions.com> wrote:

> (Adding mailing list back to thread...)
>
> On 2020-10-05 9:07 am, Matthew Fong wrote:
> > I'm dissecting your syllable code and have a question for you: How do I
> > create a similar list using a slur instead of a melisma? I found this
> > documentation, but not sure how to use it
> > http://lilypond.org/doc/v2.19/Documentation/internals/slurevent
>
> SlurEvents end up as articulations of a NoteEvent, whereas the \melisma
> command is essentially shorthand for \set melismaBusy = ##t.  See below
> for how both can be handled.
>
>
> > I understand that using a melisma is quite handy, but for clarity for
> > the
> > singer, adding slurs is another strong visual indicator of the
> > grouping.
>
> With that in mind, the function I provided can be enhanced to support
> both unslurred and slurred melismata:
>
> %%%%
> \version "2.20.0"
>
> syllable =
> #(define-music-function
>    (style pitches)
>    ((symbol? #f) ly:music?)
>    (let* ((pitches (music-pitches pitches))
>           (count (length pitches)))
>      (make-sequential-music
>        (append-map
>          (lambda (index pitch)
>            (let* ((denom 5) ;; NOTE: Adjust this as needed. <<==
>                   (initial? (= index 1))
>                   (final? (= index count))
>                   (numer (if final? (- denom (1- count)) 1))
>                   (music '()))
>              (set! music
>                (list (make-music 'NoteEvent
>                  'pitch pitch
>                  'duration (ly:make-duration 2 0 numer denom))))
>              (if (or initial? final?)
>                (if (eq? style 'slurred)
>                  (ly:music-set-property! (car music) 'articulations
>                    (list (make-span-event 'SlurEvent
>                            (if initial? START STOP))))
>                  (set! music (append music (list
>                    (if initial? melisma melismaEnd))))))
>              music))
>          (iota count 1)
>          pitches))))
>
> { \time 1/4 \hide Staff.BarLine \omit Stem
>    \syllable { a' c'' b' }
>    \syllable { a' b' }
>    \syllable slurred { a' c'' a' b' }
>    \syllable { b' } }
> \addlyrics { lor -- em i -- psum }
> %%%%
>
> Note that if you wanted the default behavior to be slurred, change the
> type predicate from (symbol? #f) to (symbol? 'slurred).  Then you can
> simply specify any other symbol (such as "unslurred") to opt for the
> original \melisma/\melismaEnd approach.
>
> I could see LigatureBrackets as another option, although their handling
> is even more peculiar.
>
>
> -- Aaron Hill
>

Reply via email to