\autochange

Bonjour à toutes et à tous,

Dans le code ci-dessous, la commande \autochange me donne un résultat qui ne
me satisfait pas.

\version "2.13.9"

up = {
  \relative c'' {
  \clef treble
  \key c \minor
  \time 2/4
  \autochange \relative c'' { \stemUp ees,,32 c' ees c ees, des' ees des ees,
c' ees c ees, c' ees c }
  }
}
down = {
  \relative c {
  \clef bass
  \key c \minor
  \time 2/4
  \stemDown aes8 bes aes ees
  }
}

\score {
  \new PianoStaff <<
    \new Staff = "up" \up
    \new Staff = "down" \down
  >>
}

Je voudrais que le 1er do se trouve au-dessous de la portée du haut (comme
le 2ème), et non au-dessus de la portée du bas.
Dans un autre passage du même genre, un si doit rester lié à la portée
supérieure. La commande le met logiquement sur la portée inférieure, puisque
la note pivot est le do. Est-il possible d'imposer une autre note pivot à
la commande ?

Merci pour votre aide,
Michel

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/autochange-tp5661407p5661407.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

le 2ème), et non au-dessus de la portée du bas.
Dans un autre passage du même genre, un si doit rester lié à la portée
supérieure. La commande le met logiquement sur la portée inférieure, puisque
la note pivot est le do. Est-il possible d'imposer une autre note pivot à
la commande ?

En trafiquant un peu, oui.

#(define (sign x)
  (if (= x 0)
      0
      (if (< x 0) -1 1)))

#(define-public (make-autochange-music parser music . split-pitch)
  (define (generate-split-list change-moment event-list acc split-delta)
    (if (null? event-list)
  acc
  (let* ((now-tun (caar event-list))
         (evs (map car (cdar event-list)))
         (now (car now-tun))
         (notes (filter (lambda (x)
        (equal? (ly:event-property x 'class) 'note-event))
            evs))
         (pitch (if (pair? notes)
        (ly:event-property (car notes) 'pitch)
        #f)))
    ;; optional: do we have a different split-pitch?
    (if (and pitch split-delta)
        (set! pitch (ly:pitch-transpose pitch split-delta)))
    ;; tail recursive.
    (if (and pitch (not (= (ly:pitch-steps pitch) 0)))
        (generate-split-list #f
           (cdr event-list)
           (cons (cons

            (if change-moment
                change-moment
                now)
            (sign (ly:pitch-steps pitch))) acc)
           split-delta)
        (generate-split-list
         (if pitch #f now)
         (cdr event-list) acc split-delta)))))

  (let* ((m (make-music 'AutoChangeMusic))
   (m1 (make-non-relative-music (context-spec-music music 'Voice "one")))
   (context-list (recording-group-emulate music
            (ly:parser-lookup parser 'partCombineListener)))
   (evs (car context-list))
         (rev (reverse! (cdar context-list)))
   (split-delta (if (ly:pitch? (car split-pitch))
        (ly:pitch-negate (car split-pitch))
        #f))
   (split (reverse! (generate-split-list
         #f
         rev
         '()
         split-delta)
        '())))
    (set! (ly:music-property m 'element) music)
    (set! (ly:music-property m 'split-list) split)
    m))

autochangeWithPitch =
#(define-music-function (parser location ref music) (ly:music? ly:music?)
       (let* ((note (car (ly:music-property ref 'elements)))
              (ref-pitch (ly:music-property note 'pitch)))
   (make-autochange-music parser music
     (if (ly:pitch? ref-pitch) ref-pitch #f))))

\context PianoStaff <<
  \context Staff = "up" {
    \autochangeWithPitch a \new Voice << \relative c' {
        g4 c e d c r4 a g } >>
  }
  \context Staff = "down" {
    \clef bass
    s1*2
  }

Je vais proposer un patch à ce sujet.

Cordialement,
V. Villenave.

···

2010/10/22 Philhar <****@****>:

Merci Valentin, ça marche.
J'ai encore quelques comportements étranges sur certains passages, mais en
adaptant la note pivot par sections, j'obtiens le bon résultat.

Cordialement,
Michel

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/autochange-tp5661407p5667057.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.