lilypond-user-fr
[Top][All Lists]
Advanced

[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} >>
>>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]