#(define (addTenutoFilterFunction event)
(let ( (eventname (ly:music-property event 'name)) )
(if (eq? eventname 'EventChord)
(let ( (elements (ly:music-property event 'elements)) )
; don't add staccato to rests!
(if (not (eq? (ly:music-property (car elements) 'name) 'RestEvent))
(set! (ly:music-property event 'elements)
(append elements (list (make-music 'ArticulationEvent
'articulation-type "tenuto"))
))))))
)
addTenuto = #(define-music-function (parser location music) (ly:music?)
(music-filter addTenutoFilterFunction music)
)
\new Staff \relative { \addTenuto { c d e f~ f e d c } }
Could it be possible to exclude those notes, that follows the one with the
tie?
Yes but perhaps music-filter is not convenient for that because it gives you
the differents events in a order : sub-elements, elements.
here is a version which seems to work with ties.
(i do not test it a lot)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#(define tieEvent? #f)
#(define (add-Tenuto music)
(let (
(eventname (ly:music-property music 'name))
(elts (ly:music-property music 'elements))
(elt (ly:music-property music 'element))
)
(cond
((pair? elts)
(begin
(if (and
(eq? eventname 'EventChord)
(eq? (ly:music-property (car elts) 'name) 'NoteEvent)
(not tieEvent?)
)
(set! (ly:music-property music 'elements)
(append elts (list (make-music 'ArticulationEvent
'articulation-type "tenuto"))))
(set! tieEvent? #f)
)
(map add-Tenuto elts)
)
)
((ly:music? elt) (add-Tenuto elt))
((eq? eventname 'TieEvent) (set! tieEvent? #t))
)
music
))
addTenuto = #(define-music-function (parser location music) (ly:music?)
(set! tieEvent? #f)
(add-Tenuto music)
)
\new Staff \relative { \addTenuto { c d e f~ f e d c } }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Gilles
_______________________________________________
lilypond-user mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-user