Hi,
I'm trying to understand a problem I'm seeing.

I have this engraver that acknowledges stems and fingerings,
this is meant to work with a before-line-breaking callback that repositions
the fingerings.
So I thought that I could just sit there, listen for the fingerings as they
got to me,
and put them into a list attached to the stem.
Except that I only ever get only the fingering for the last note in a chord,
and no evidence of the others.
The display statements below print this:

fl () - fingering (#<Grob Fingering >)4
fl () - fingering (#<Grob Fingering >)2

I don't understand why the fl list stays empty and what happens to all the
other fingerings.

Any help/pointers appreciated,
Luca

#(define (Guitar_fingering_engraver context)
   (let ((stem #f)
         (fingering #f)
         (fl '())
         (old-fingering '()))
     (make-engraver
      (acknowledgers
       ((finger-interface engraver grob source-engraver)
        (begin
          (set! fingering grob)
          (append! fl (list grob))
          )
        )
       ((stem-interface engraver grob source-engraver)
        (set! stem grob)))
      ((process-music engraver)

       (if (and fingering stem)
           (begin
               (set! old-fingering (assoc-get 'fingering (ly:grob-property
stem 'details) '()))
               (ly:grob-set-property! stem 'details
                                  `((fingering . ,(append old-fingering
(list fingering)))
                                     . ,(ly:grob-property stem 'details))))
           )

       (if stem
           (begin
               (display "fl ") (display fl) (display " - fingering ")
               (display (assoc-get 'fingering (ly:grob-property stem
'details)))
               (if fingering
                   (display (ly:grob-property fingering 'text))
                   )
               (display "\n")))

       (set! stem #f)
       (set! fingering #f)
       (set! fl '())))))

\layout {
  \context {
    \Voice
    % this makes use of the New_fingering_engraver, which attaches
fingering in the way we want
    \remove Fingering_engraver
    \consists #Guitar_fingering_engraver
  }
}

guitar = {
    \key c \major
    \time 2/4
    \clef "violin_8"

    <g-1 b-2 e'-4>4
    <ges-1 bis-2 e'-4>4
}

\score {
  \new Staff = "guitar" {
    \key c \major
    \time 2/4
    \clef "violin_8"

    <g-1 b-2 e'-4>4
    <ges-1 e'-4 bis-2>4
  }
  \layout {  }
}

-- 
Luca Fascione

Reply via email to