That is great! Just what I was looking for.

Your patch isn’t extracting the tonic—it always returns ‘C’.  But I always 
explicitly define the key, so your original code works like a charm.

Thanks!

David

On Sep 2, 2017, at 7:25 AM, David Nalesnik <david.nales...@gmail.com> wrote:

> On Sat, Sep 2, 2017 at 8:09 AM, David Nalesnik <david.nales...@gmail.com> 
> wrote:
>> Hi David,
>> 
>> On Sat, Sep 2, 2017 at 12:25 AM, David F. <dav...@gmx.us> wrote:
>>> I have a hymnal that prints the name of the key and the first note the song 
>>> above the treble clef sign of the first staff.  So, for example, if you 
>>> have Amazing Grace in the key of G major, the first note of the soprano 
>>> (melody) part is a D.  That is printed as “G/D”.
>>> 
>>> Can lilypond do that?  I thought I had seen an example of that somewhere, 
>>> but I can’t find it now.
>>> 
>> 
>> I don't know where you saw this on the lists, but attached you'll find
>> a solution.
>> 
> 
> The original code will break if there's no explicit key set.
> 
> Patch:
> 
> #(define-markup-command (firstNoteAndKey layout props mus)
>   (ly:music?)
>   (let* ((keey (extract-named-music mus 'KeyChangeEvent))
>          (tonic
>           (if (ly:music? keey)
>               (ly:music-property (car keey) 'tonic)
>               (ly:make-pitch 0 0)))
>          (notes (extract-named-music mus 'NoteEvent))
>          (first-ne (car notes))
>          (first-pitch (ly:music-property first-ne 'pitch)))
>     (interpret-markup layout props
>       (make-concat-markup
>        (list
>         (format-key first-pitch)
>         "/"
>         (format-key tonic))))))


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

Reply via email to