A.3.3 Duplicar una nota con ligaduras (ejemplo)
Supongamos que queremos crear una función que convierte una entrada
como a
en { a( a) }
. Comenzamos examinando la
representación interna de la música con la que queremos terminar.
\displayMusic{ a'( a') } ===> (make-music 'SequentialMusic 'elements (list (make-music 'NoteEvent 'articulations (list (make-music 'SlurEvent 'span-direction -1)) 'duration (ly:make-duration 2 0 1/1) 'pitch (ly:make-pitch 0 5 0)) (make-music 'NoteEvent 'articulations (list (make-music 'SlurEvent 'span-direction 1)) 'duration (ly:make-duration 2 0 1/1) 'pitch (ly:make-pitch 0 5 0))))
La mala noticia es que las expresiones SlurEvent
se deben
añadir ‘dentro’ de la nota (dentro de la
propiedad articulations
).
Ahora examinamos la entrada,
\displayMusic a' ===> (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
SlurEvent
a la propiedad 'articulations
de cada una de
ellas, y por último hacer una secuencia SequentialMusic
con los
dos elementos NoteEvent
. Para añadir a una propiedad, es útil saber
que una propiedad no establecida se lee como '()
, la lista
vacía, así que no se requiere ninguna comprobación especial antes de
que pongamos otro elemento delante de la propiedad
articulations
.
doubleSlur = #(define-music-function (parser location note) (ly:music?) "Return: { note ( note ) }. `note' is supposed to be a single note." (let ((note2 (ly:music-deep-copy note))) (set! (ly:music-property note 'articulations) (cons (make-music 'SlurEvent 'span-direction -1) (ly:music-property note 'articulations))) (set! (ly:music-property note2 'articulations) (cons (make-music 'SlurEvent 'span-direction 1) (ly:music-property note2 'articulations))) (make-music 'SequentialMusic 'elements (list note note2))))
Otros idiomas: English, deutsch, français.
Acerca de la selección automática del idioma.