Hi Erik,

On Tue, Oct 14, 2014 at 1:28 PM, erik flister <erik.flis...@gmail.com>
wrote:

> thanks a lot david, i learned a lot from studying this!
>
>
Glad to hear it!


> looks like there would be two options to get lilypond to report pitch info:
>
> \void \displayLilyMusic       % types absolute pitches to console
> \include "event-listener.ly"  % writes file w/midi numbers
>
> but your example inspired me to figure it out in scheme, see attached.  i
> would think auto-fingering-diagrams would be of general interest -- is it
> worth submitting either to the snippet library or the core scm library?
>

I think this would be a great idea.


> some questions:
> - how could i pass an argument to the engraver (like 'recorder, to tell it
> what diagrams to use)?
>

Add a parameter to the engraver:

autoFingerEngraver=
#(lambda (instrument)
  (lambda (context)
    (make-engraver
      (acknowledgers
        ((note-column-interface trans grob source)
         (let* ((cause (event-cause grob))
                (p     (get-fingering (ly:pitch-semitones
(ly:event-property cause 'pitch)))))
                  (if (not (null? p))
                    (ly:grob-set-property! (ly:engraver-make-grob trans
'TextScript cause) 'text
                      #{ \markup \woodwind-diagram #instrument #p #}))))))))

Then you would call it later like this:

 \consists #(autoFingerEngraver 'recorder)

- i can't find doc on make-engraver -- are there any?
>

No, unfortunately not.  You can find some material on C++ engravers in the
Contributor's Guide, but nothing on Scheme engravers.  There are a few in
the LSR, and they surface from time to time on the lists.


> - this method ignored the layout overrides i need (that worked on manually
> entered markups):
>   TextScript.staff-padding
>   TextScript.self-alignment-X
>   how do i get them back?
>

Unfortunately, I'm not going to be able to help at the moment.  Your
recorder diagrams are still in review, and I find it very difficult to work
with your file in LilyDev.  I'll be happy to take another look when your
patch is part of a release.


> - i like your 'display-fingering property, but i removed it for simplicity
> while trying to learn, i'll add it back...
>
> i also found
> http://www.lilypond.org/doc/v2.17/Documentation/learning/advanced-tweaks-with-scheme,
> which seems like it should also work and is simpler than defining a new
> engraver.
>

I used a Scheme engraver because it gives easy access to context
properties, and it's straightforward to create new grobs.

Possibly you could do this through a music function.  See the thread on
"Handling automatic ottavas" for an example of something similar.

I have to say that, given a choice, I'd rather use an engraver given the
complexity of fiddling around with music lists. :)


> however, i can't figure out how to find the right object/property to give
> a note/column a markup.  NoteHead.text doesn't do anything.  where do i
> look this up?
>

Well, you could override NoteColumn.stencil.  Here's a short example:

\version "2.19.15"

#(define (notehead-stencil grob)
   (ly:stencil-aligned-to
    (ly:stencil-translate-axis
     (grob-interpret-markup grob #{ \markup "foo" #})
     3 Y)
    X CENTER))

{
  \override NoteColumn.stencil = #notehead-stencil
  <c'' e''> <c' e'> <c''' e'''>
}

The example shows the big limitation here, which is that no notice at all
is taken of collisions.

I'll take a better look later, but I hope this is helpful.

--David
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to