[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
manipuler les VoiceFollowers
From: |
Éditions IN NOMINE |
Subject: |
manipuler les VoiceFollowers |
Date: |
Fri, 24 Jun 2011 12:16:36 +0200 |
User-agent: |
Thunderbird 2.0.0.24 (X11/20101027) |
Bonjour à toute la liste !
Je souhaite manipuler les positions des points d'attache des
VoiceFollowers pour éviter des collisions avec les hampes.
"Rien de plus facile" avec : \once \override VoiceFollower
#'bound-details = #'((right (attach-dir . 0) (padding . a)) (left
(attach-dir . 0) (padding . b)))
...mais ça encombre pas mal le code.
Donc idée géniale : encapsuler cela dans une fonction qui s'utiliserait
comme ceci \ligne #'(a . b) ou \ligne #a #b
Je consulte donc le Scheme Tutorial, et en particulier l'exemple 1.3.4.
Je me pastille le snippet suivant :
\displayMusic{
\new PianoStaff <<
\new Staff = "up" <<
\new Voice {\relative c'' {\voiceOne c1}}
\new Voice {\relative c'' {\voiceTwo g4 \change Staff = "down"
\showStaffSwitch g, c c }}
>>
\new Staff = "down" << \clef F \relative c {c1} >>
>>
}
puis le même avec le \once \override cité plus haut.
Je compare les deux fichiers (à ce propos, sous Linux, le très efficace
tkdiff, qui souligne les différences entre deux fichiers texte !) et je
trouve le code qui correspond au \once \override. J'indique au passage
que j'ai raccroché le (make-music ...) correspondant à la liste des
'elements du niveau supérieur, qui se trouve aux alentours de la ligne
288, (make-music 'SequentialMusic 'elements ...). Peut-être mon erreur
vient-elle de là ?
C'est là que ça se gâte, parce qu'autant le \once \override ...
fonctionne bien (on le voit avec a=3 et b=-4), autant l'équivalent en
Scheme ne faire strictement aucun effet... à part de m'annuler le
\relative c{...} au passage... ça doit vraiment être une histoire de
niveau d'arborescence...
J'ai joint le fonction.ly pour ne pas encombrer le message.
Auriez-vous une idée, ô Schemistes ?
Merci d'avance !
JMarc
\version "2.13"
ligne = #(define-music-function (parser location sequential-music)
(ly:music?)
"modifie les positions de spoints d'attache des lignes de suivi des voix
VoiceFollower"
(let ((result-sequential-music (ly:music-deep-copy sequential-music)))
(set! (ly:music-property result-sequential-music 'elements)
(cons (make-music 'ContextSpeccedMusic
'context-type
'Bottom
'element
(make-music
'OverrideProperty
'pop-first #t
'grob-property-path (list 'bound-details)
'grob-value (list (list 'right
(cons 'attach-dir 0)
(cons 'padding 3))
(list 'left
(cons 'attach-dir 0)
(cons 'padding -4))
)
'once #t
'symbol 'VoiceFollower))
(ly:music-property result-sequential-music 'elements)))
result-sequential-music))
ligneQuiMarche = \once \override VoiceFollower #'bound-details = #'((right
(attach-dir . 0) (padding . 3)) (left (attach-dir . 0) (padding . -4)))
\new PianoStaff <<
\new Staff = "up" <<
\new Voice {\relative c'' {\voiceOne c1}}
\new Voice {\relative c'' {\voiceTwo g4 \change Staff = "down"
\showStaffSwitch \ligne %{\ligneQuiMarche%} g, c c }}
>>
\new Staff = "down" << \clef F \relative c {c1} >>
>>
- manipuler les VoiceFollowers,
Éditions IN NOMINE <=