\version "2.18" #(define syllables '("do" "re" "mi" "fa" "so" "la" "ti")) #(define syls '("d" "r" "m" "f" "s" "l" "t")) #(define numbers '("1" "2" "3" "4" "5" "6" "7")) #(define (solfege-engraver lst dir) (make-engraver (acknowledgers ((note-head-interface engraver grob source) (let* ( (context (ly:translator-context engraver)) (tonic-pitch (ly:context-property context 'tonic)) (tonic-index (ly:pitch-notename tonic-pitch)) (event (ly:grob-property grob 'cause)) (grob-pitch (ly:event-property event 'pitch)) (grob-index (ly:pitch-notename grob-pitch)) (delta (modulo (- grob-index tonic-index) 7)) (name (list-ref lst delta)) (newgrob (ly:engraver-make-grob engraver 'TextScript event))) (if (string= name "Hb") (set! name "B")) (set! (ly:grob-property newgrob 'text) name) (set! (ly:grob-property newgrob 'direction) dir) ))))) xup = \with { \consists #(solfege-engraver syllables UP) } xdown = \with { \consists #(solfege-engraver syllables DOWN) } zup= \with { \consists #(solfege-engraver syls UP) } zdown= \with { \consists #(solfege-engraver syls DOWN) } nup= \with { \consists #(solfege-engraver numbers UP) } ndown= \with { \consists #(solfege-engraver numbers DOWN) } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% soprano = { g'1 | g'4 g'8.g'16 a'2 | f'1 } alto = { e'1 | e'2 e'2 | c'1| } \new Staff { << \new Voice = "soprano" \xup { \override TextScript.outside-staff-priority = 1000 \textLengthOn % make room for text! \voiceOne \soprano } \new Voice = "alto" \nup { \voiceTwo \alto } >> }