doigté en couleur

Bonjour,

  1. Suite au développement de Valentin et Jean dans le fil "ajout de paroles à une partition", je modifie le sujet pour qui voudrait retrouver le doigté en couleur !

  2. Ayant tâté du tuto de Jean sur le scheme, j'ose faire un petit pas en intégrant des variables dans le code proposé par Valentin et Jean (choix de la couleur, taille et écart à la portée). Pas de quoi fanfaronner mais quand même :slight_smile:

\version "2.22.2"

#(define ColorFingerT darkblue)
#(define ColorFingerP red)
#(define Taille 5)
#(define Ajustement -6)

\layout {
  \context {
    \Voice
    \override Fingering.before-line-breaking =
    #(lambda (grob)
       (ly:grob-set-property! grob 'Y-offset Ajustement))
    \override Fingering.stencil =
    #(lambda (grob)
       (let* ((ev (event-cause grob))
              (txt (fingering::calc-text grob))
              (dir (ly:event-property ev 'direction)))
         (grob-interpret-markup
          grob
          (case dir
            ((1) (markup #:with-color ColorFingerP #:underline #:fontsize Taille txt))
            ((-1) (markup #:with-color ColorFingerT #:fontsize Taille txt))
            ((()) txt)))))
  }
}

{
  c'^1
  d'_2
  e'_3
  f'^4
  g'_1
} 

J'oserai bien une petite question : comment ^ et _ sont détournés de leur fonction première et modifient dir ? que font ev, event-cause... ?

Cordialement

Gérard

j'ose faire un petit pas en intégrant des variables

Très bonne idée ! Mais depuis quelques années (2.16 ?) on peut même
définir les variables Scheme avec la syntaxe LilyPond toute simple :

ColorFingerT = #darkblue

J'oserai bien une petite question : comment ^ et _ sont détournés de
leur fonction première et modifient dir ? que font ev, event-cause... ?

Reprenons la fonction pas par pas :

     \override Fingering.stencil =
     #(lambda (grob)

Ici lambda signifie : ce qui va suivre décrit une opération, qui va
s’appliquer à quelque chose que nous baptiserons "grob".

        (let* ((ev (event-cause grob))
               (txt (fingering::calc-text grob))
               (dir (ly:event-property ev 'direction)))

Ici on définit trois petites variables temporaires :
- le "grob" lui-même n’est qu’un objet graphique, si nous voulons
obtenir la direction spécifiée il faut remonter à ce qui le cause
(l’événement) dans le code Lily.
- le texte du grob lui-même, qui est calculée par la fonction
fingering::calc-text.
- la direction, liée à l’événement en question (j’ai utilisé let*
plutôt que let parce que cela me permet d’utiliser une de mes
variables temporaires dans la définition d’une variable temporaire
subséquente.

          (grob-interpret-markup
           grob

On crée un markup à l’endroit du "grob" en question.

           (case dir
             ((1) (markup #:with-color ColorFingerP #:underline #:fontsize
Taille txt))
             ((-1) (markup #:with-color ColorFingerT #:fontsize Taille
txt))
             ((()) txt)))))

En fonction de la valeur de "dir" (la propriété qu’on a récupérée de
l’événement qui cause le "grob", on va traiter le texte différemment.

Je ne sais pas si cela aide !

Cordialement,
-- V.

···

On 7/25/22, Gerard <****@****> wrote:

j'ose faire un petit pas en intégrant des variables

Très bonne idée ! Mais depuis quelques années (2.16 ?) on peut même
définir les variables Scheme avec la syntaxe LilyPond toute simple :

ColorFingerT = #darkblue

C'est dans le tuto de Jean, je crois !

Je ne sais pas si cela aide !

Sûrement ! je vais regarder mes différents codes pour essayer de comprendre

Merci !

G

···

Le 25/07/2022 à 10:09, Valentin Villenave a écrit :

On 7/25/22, Gerard <****@****> wrote:

ça aide surtout à délimiter les différentes étapes de Scheme et on voit
que ce n'est pas aussi simple... ce que je savais déjà ! :slight_smile:

···

Le 25/07/2022 à 10:09, Valentin Villenave a écrit :

On 7/25/22, Gerard <****@****> wrote:

j'ose faire un petit pas en intégrant des variables

Très bonne idée ! Mais depuis quelques années (2.16 ?) on peut même
définir les variables Scheme avec la syntaxe LilyPond toute simple :

ColorFingerT = #darkblue

J'oserai bien une petite question : comment ^ et _ sont détournés de
leur fonction première et modifient dir ? que font ev, event-cause... ?

Reprenons la fonction pas par pas :

     \override Fingering.stencil =
     #(lambda (grob)

Ici lambda signifie : ce qui va suivre décrit une opération, qui va
s’appliquer à quelque chose que nous baptiserons "grob".

        (let* ((ev (event-cause grob))
               (txt (fingering::calc-text grob))
               (dir (ly:event-property ev 'direction)))

Ici on définit trois petites variables temporaires :
- le "grob" lui-même n’est qu’un objet graphique, si nous voulons
obtenir la direction spécifiée il faut remonter à ce qui le cause
(l’événement) dans le code Lily.
- le texte du grob lui-même, qui est calculée par la fonction
fingering::calc-text.
- la direction, liée à l’événement en question (j’ai utilisé let*
plutôt que let parce que cela me permet d’utiliser une de mes
variables temporaires dans la définition d’une variable temporaire
subséquente.

          (grob-interpret-markup
           grob

On crée un markup à l’endroit du "grob" en question.

           (case dir
             ((1) (markup #:with-color ColorFingerP #:underline #:fontsize
Taille txt))
             ((-1) (markup #:with-color ColorFingerT #:fontsize Taille
txt))
             ((()) txt)))))

En fonction de la valeur de "dir" (la propriété qu’on a récupérée de
l’événement qui cause le "grob", on va traiter le texte différemment.

Je ne sais pas si cela aide !

--
JJG
Drôme provençale