1.3.3 Doublement d’une note avec liaison (exemple)
Supposons que nous ayons besoin de créer une fonction transformant une
saisie a
en { a( a) }
. Commençons par examiner
comment le résultat est représenté en interne.
\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))))
Mauvaise nouvelle ! Les expressions SlurEvent
doivent
s’ajouter « à l’intérieur » de la note – dans sa propriété
articulations
.
Examinons à présent la saisie :
\displayMusic a' ===> (make-music 'NoteEvent 'duration (ly:make-duration 2 0 1 1) 'pitch (ly:make-pitch 0 5 0))))
Nous aurons donc besoin, dans notre fonction, de cloner cette expression
– de telle sorte que les deux notes constituent la séquence – puis
d’ajouter un SlurEvent
à la propriété 'articulations
de
chacune d’elles, et enfin réaliser un SequentialMusic
de ces deux
EventChords
. En tenant compte du fait que, dans le cadre d’un
ajout, une propriété non définie est lue '()
(une liste vide),
aucune vérification n’est requise avant d’introduire un nouvel élément
en tête de la propriété articulations
.
doubleSlur = #(define-music-function (parser location note) (ly:music?) "Renvoie : { note ( note ) }. `note' est censé être une note unique." (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))))
Autres langues : English, deutsch, español.
About automatic language selection.