2 questions pour la Berceuse de Chopin.

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.

Chopin.ly (1.56 KB)

Chopin-1.png

Chopin-2.png

Ph. Hezaine wrote

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...

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.

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 ?

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

2. Je n'ai pas trouvé comment faire passer l'Ottava en-dessous de la
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 .

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.

Pas de dessert pour moi ! :stuck_out_tongue_winking_eye:

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...

  \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

···

2011/12/19 Phil Hézaine <****@****>:

--
Xavier Scheuer <****@****>

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

···

On Dec 19, 2011, at 10:27 PM, Xavier Scheuer wrote:

2011/12/19 Phil Hézaine <****@****>:

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 ?

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

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

···

On Dec 19, 2011, at 10:45 PM, ****@**** wrote:

On Dec 19, 2011, at 10:27 PM, Xavier Scheuer wrote:

2011/12/19 Phil Hézaine <****@****>:

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 ?

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

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

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

···

On Dec 20, 2011, at 8:56 AM, ****@**** wrote:

On Dec 19, 2011, at 10:45 PM, ****@**** wrote:

On Dec 19, 2011, at 10:27 PM, Xavier Scheuer wrote:

2011/12/19 Phil Hézaine <****@****>:

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 ?

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

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

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

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

Pour Xavier:
> 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ù.

Accordé! :stuck_out_tongue_winking_eye:

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. :stuck_out_tongue_winking_eye:

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.

···

Le 20/12/2011 09:20, ****@**** a écrit :