Subject: 2 questions pour la Berceuse de Chopin.

From: Phil Hézaine <[email-masked]>
Date: Mon, 19 Dec 2011 19:15:59 +0100

Bonsoir à tous,

Ci-joint 2 images et un fichier.ly qui montrent les problèmes.

1. Est-il possible de séparer les 2 têtes de notes sol bemol-sol comme 
l'on peut voir sur Chopin-1.png ?

2. Je n'ai pas trouvé comment faire passer l'Ottava en-dessous de la 
Phrasing Slur!!! Aucune commande du fichier ne marche.

Et pour le dessert, Chopin-2.png montre le petit zig-zag qu'a dessiné le 
graveur pour cette Ottava. Mais ce problème n'est pas très important, à 
mon avis, on peut faire sans.

Je ne sais pas si j'ai trouvé la meilleure solution pour la mesure 0,
J'obtiens ce message à la compile:
Avertissement : la vérification du type de « stencil » a échoué ;
    la valeur « #t » doit être du type « stencil »

Si quelqu'un a une idée...

Phil.

---

From: Eluze <[email-masked]>
Date: Mon, 19 Dec 2011 13:16:44 -0800 (PST)

Ph. Hezaine wrote
> Si quelqu'un a une idée...
qqs idées:

ad 1) http://lsr.dsi.unimi.it/LSR/Item?id=505 pourrait être utile
ad 2) il faut mettre le outside-staff-priority de l'ottava plus petite que
celle du phrasing-slur (je ne connais pas le setting de lilypond, donc je
définis les deux):

  \override Voice.PhrasingSlur #'outside-staff-priority = #333
  \override Staff.OttavaBracket #'outside-staff-priority = #332

pour ne pas devoir redéfinir le stencil on peut utiliser: /\revert
Voice.Slur #'stencil/

et pour le dessert … ce sera pour une autre fois (si c'est possible)

Eluze

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/2-questions-pour-la-Berceuse-de-Chopin-tp7109172p7109793.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Xavier Scheuer <[email-masked]>
Date: Mon, 19 Dec 2011 22:27:58 +0100

2011/12/19 Phil Hézaine <[email-masked]>:
> 1. Est-il possible de séparer les 2 têtes de notes sol bemol-sol comme l'on
> peut voir sur Chopin-1.png ?

Je n'aurais pas trouvé si quelqu'un n'avait pas posé la même question
sur la liste internationale aujourd'hui aussi.  Tu peux te baser sur
le snippet suivant, bien que la solution ne soit pas élégante.
http://lsr.dsi.unimi.it/LSR/Item?id=505

> Phrasing Slur!!! Aucune commande du fichier ne marche.

  \override Staff.OttavaBracket #'outside-staff-priority = ##f

puis tu peux jouer sur la valeur de #'padding ou #'staff-padding .

> graveur pour cette Ottava. Mais ce problème n'est pas très important, à mon
> avis, on peut faire sans.

Pas de dessert pour moi !  ;-P

> Si quelqu'un a une idée...

  \revert Voice.Slur #'stencil

Le contraire de \override , pour revenir à la valeur par défaut c'est
\revert .  C'est dans le manuel, j'ai la flemme de chercher où.

Cordialement,
Xavier

-- 
Xavier Scheuer <[email-masked]>

---

From: "[email-masked]" <[email-masked]>
Date: Mon, 19 Dec 2011 22:45:16 +0100

> http://lsr.dsi.unimi.it/LSR/Item?id=505

C'est jouable - quelques pistes à explorer :

1)	Il faut un \override pour le grob NoteCollision, propriété positioning-done.  Il suffit d'écrire une fonction qui crée le bon écart entre les têtes de notes (les têtes de notes sont stockées dans l'objet "note-heads" du Stem (hampe) - utilise ly:grob-translate-axis! pour décaler les notes).
2)	Ensuite, il faut un \override pour la propriété stencil qui cherche les têtes de notes (encore une fois stockées dans l'objet note-heads) et qui dessine des traits entre (+ (ly:grob-property stem 'stem-end-position) (* (ly:grob-property stem 'direction) (ly:grob-property stem 'length))) et les bords des notes.

Avec cette solution, LilyPond intègre les écarts entre les notes dans son engin d'espacement horizontal - il ne faut plus bidouiller avec extra-offset (qui, à mon avis, est à proscrire dans 99 % des cas).

Bonne schemage !

Bien à toi,
~Mike

---

From: "[email-masked]" <[email-masked]>
Date: Tue, 20 Dec 2011 08:56:13 +0100

> Avec cette solution, LilyPond intègre les écarts entre les notes dans son engin d'espacement horizontal - il ne faut plus bidouiller avec extra-offset (qui, à mon avis, est à proscrire dans 99 % de…

Je me suis trompé de grob - il faut faire l'\override de positioning-done avec Stem.

Voici une esquisse du fonctionnement souhaité :

#(define note-head-shift 2)

#(define (positioning-done grob)
 (let ((nh (ly:grob-array->list (ly:grob-object grob 'note-heads))))
   (for-each
     (lambda (x y)
     (ly:grob-translate-axis! x (* note-head-shift y) X))
     nh (iota (length nh))))
 0.0)

#(define (stencil grob)
(let*
  ((pc (ly:grob-parent (ly:grob-parent grob X) X))
   (dir (ly:grob-property grob 'direction))
   (half-space (* 0.5 (ly:staff-symbol-staff-space grob)))
   (y1 (* half-space (ly:stem::calc-stem-begin-position grob)))
   (y2 (* half-space (ly:stem::calc-stem-end-position grob)))
   (nh (ly:grob-array->list (ly:grob-object grob 'note-heads)))
   (x (ly:grob-relative-coordinate (car nh) pc X))
   (thick (* (ly:grob-property grob 'thickness)
             (ly:staff-symbol-line-thickness grob))))
   (apply
     ly:stencil-add
     (map (lambda (nh)
            (let ((my-x (car (ly:grob-extent nh pc X))))
              (make-line-stencil thick x y2 my-x y1)))
          nh))))

\relative c' {
 \override Stem #'positioning-done = #positioning-done
 \override Stem #'stencil = #stencil
 <d d d> <d d d d d> <d d d> <d d d d d d d>
}

\relative c'' {
 \override Stem #'positioning-done = #positioning-done
 \override Stem #'stencil = #stencil
 <d d d> <d d d d d> <d d d> <d d d d d d d>
}

Cordialement,
~Mike

---

From: "[email-masked]" <[email-masked]>
Date: Tue, 20 Dec 2011 09:20:36 +0100

> <d d d> <d d d d d> <d d d> <d d d d d d d>

Et ben voilà je viens de me planter sur deux listes LilyPond (je n'ai pas encore fini mon café matinal...ça va...).  J'aurais dû préciser que j'ai utilisé la version de développement pour compiler le fichier - la fonction ly:stem::calc-stem-begin-position n'existe pas dans la version 2.14.2.  Tu peux grosso modo obtenir la même chose en utilisant (interval-center (ly:grob-extent nh (ly:grob-parent grob Y) Y)) où grob est la hampe et nh est la tête de note.

~Mike

---

From: Phil Hézaine <[email-masked]>
Date: Tue, 20 Dec 2011 12:47:19 +0100

Le 20/12/2011 09:20, [email-masked] a écrit :

> Et ben voilà je viens de me planter sur deux listes LilyPond
> (je n'ai pas encore fini mon café matinal...ça va...).
> J'aurais dû préciser que j'ai utilisé la version de développement
> pour compiler le fichier - la fonction ly:stem::calc-stem-begin-position
> n'existe pas dans la version 2.14.2.  Tu peux grosso modo obtenir la même
> chose en utilisant (interval-center (ly:grob-extent nh (ly:grob-parent grob Y) Y)) où grob est la hampe et nh est la tête de note.
>
> ~Mike

Salut à tous,

Pour l'Ottava et la Phrasing Slur la solution d'Eluze donne une 
meilleure gestion de l'espacement.
  \override Voice.PhrasingSlur #'outside-staff-priority = #333
   \override Staff.OttavaBracket #'outside-staff-priority = #332

que:
   \override Staff.OttavaBracket #'outside-staff-priority = ##f
   \override Staff.OttavaBracket #'padding = #'-3
                       %(ou avec #'staffpadding).

Mais à positionner absolument après la mesure 0 sinon je n'arrive plus à 
gérer les control-points.

Merci également pour le \revert Voice.Slur #'stencil

 > \revert .  C'est dans le manuel, j'ai la flemme de chercher où.

Accordé!  ;-P

Pour Mike:
La fonction marche impec avec la 2.15.22 mais il reste un petit défaut.
Les altérations ne se placent pas devant chaque tête de note mais se 
juxtaposent seulement au début de l'accord. Génant. ;-P

Exemple:
\relative c' {
  \override Stem #'positioning-done = #positioning-done
  \override Stem #'stencil = #stencil
  <d! dis> <d d d d d> <dis d d!> <d d d d d d d>
}

N.B. Je n'ai que des difficultés pour manier Scheme. J'avais commencé à 
l'apprendre en vue d"améliorer le Puzzle du Batteur, particulièrement 
pour essayer de remplacer toutes mes commandes de substitutions faites 
avec sed par un traitement plus interne. Bon, un trop gros morceau tout 
de même pour moi qui ne suis pas programmeur. J'avais bien trouvé 
quelques débuts de pistes en grappillant à droite à gauche des fonctions 
déjà écrites par d'autres et en les transformant, mais je finissais 
toujours par être bloqué.
Depuis j'ai abandonné.

Phil.