6.3.3 Doubling a note with slurs (example)
Supongamos que queremos crear una función que traduce una entrada como
a a algo como a( a). Empezamos examinando la
representación interna de la música con la que queremos terminar.
\displayMusic{ a'( a') }
===>
(make-music
'SequentialMusic
'elements
(list (make-music
'EventChord
'elements
(list (make-music
'NoteEvent
'duration
(ly:make-duration 2 0 1 1)
'pitch
(ly:make-pitch 0 5 0))
(make-music
'SlurEvent
'span-direction
-1)))
(make-music
'EventChord
'elements
(list (make-music
'NoteEvent
'duration
(ly:make-duration 2 0 1 1)
'pitch
(ly:make-pitch 0 5 0))
(make-music
'SlurEvent
'span-direction
1)))))
Las malas noticias son que las espresiones SlurEvent se deben
añadir ‘dentro’ de la nota (o más concretamente, dentro de la
expresión EventChord).
Ahora observamos la entrada:
(make-music
'SequentialMusic
'elements
(list (make-music
'EventChord
'elements
(list (make-music
'NoteEvent
'duration
(ly:make-duration 2 0 1 1)
'pitch
(ly:make-pitch 0 5 0))))))
Así pues, en nuestra función, tenemos que clonar esta expresión (de
forma que tengamos dos notas para construir la secuencia), añadir
SlurEvents a la propiedad 'elements de cada una de
ellas, y por último hacer una secuencia SequentialMusic con los
dos EventChords.
doubleSlur = #(define-music-function (parser location note) (ly:music?)
"Return: { note ( note ) }.
`note' is supposed to be an EventChord."
(let ((note2 (ly:music-deep-copy note)))
(set! (ly:music-property note 'elements)
(cons (make-music 'SlurEvent 'span-direction -1)
(ly:music-property note 'elements)))
(set! (ly:music-property note2 'elements)
(cons (make-music 'SlurEvent 'span-direction 1)
(ly:music-property note2 'elements)))
(make-music 'SequentialMusic 'elements (list note note2))))
Other languages: English.