Subject: Un peu de couleur...

From: Vincent Gay <[email-masked]>
Date: Sun, 12 Dec 2021 13:54:11 +0100

Bonjour,

j'ai vu comment coloriser certains objets (têtes de notes, hampes, 
barres de mesures...) mais serait-il possible de coloriser l’intérieur 
de la portée, entre les lignes, pour une mesure en particulier ?

j'ai quelques élèves débutants en jazz et je tente de leur indiquer 
comment préparer leur grille d'impro. Voilà un exemple de ce que 
j'aimerai obtenir. Pour l'instant j'importe le pdf dans gimp pour coloriser.

-- 
Vincent Gay
Envoyé depuis mon saxo-phone :)
https://myrealbook.vintherine.org/  -http://photos.vintherine.org/

---

From: Jean Abou Samra <[email-masked]>
Date: Sun, 12 Dec 2021 14:48:35 +0100

> j'aimerai obtenir. Pour l'instant j'importe le pdf dans gimp pour 

En voilà une question qu'elle est intéressante !

Voici une solution possible :

\version "2.22.1"

#(define (define-grob! grob-name grob-entry)
    (set! all-grob-descriptions
          (cons ((@@ (lily) completize-grob-entry)
                 (cons grob-name grob-entry))
                all-grob-descriptions)))

#(define (staff-colorizer::text grob)
    (let* ((staff-symbol (ly:grob-object grob 'staff-symbol))
           (left (ly:spanner-bound grob LEFT))
           (right (ly:spanner-bound grob RIGHT))
           (refp (ly:grob-common-refpoint
                  grob
                  (ly:grob-common-refpoint left right X)
                  X))
           (spacing-pair (ly:grob-property grob 'spacing-pair))
           (coord-adjust (ly:grob-relative-coordinate grob refp X))
           (x-span (cons (+ (ly:grob-relative-coordinate left refp X)
                            (interval-end 
(ly:paper-column::break-align-width left (car spacing-pair)))
                            (- (ly:grob-relative-coordinate left
(ly:grob-parent left X)
                                                            X))
                            (- coord-adjust))
                         (+ (ly:grob-relative-coordinate right refp X)
                            (interval-start 
(ly:paper-column::break-align-width right (cdr spacing-pair)))
                            (- (ly:grob-relative-coordinate right
(ly:grob-parent right X)
                                                            X))
                            (- coord-adjust))))
           (y-span (ly:grob-extent staff-symbol staff-symbol Y)))
      (make-filled-box-markup x-span y-span 0)))

#(define-grob!
    'StaffColorizer
    `((stencil . ,ly:text-interface::print)
      (layer . -1)
      (text . ,staff-colorizer::text)
      (spacing-pair . (staff-bar . staff-bar))
      (meta . ((class . Spanner)
               (interfaces . (text-interface))))))

#(set-object-property! 'staffColor 'translation-type? color?)

#(define (Staff_colorizer_engraver context)
    (let ((current-color #f)
          (spanner #f))
      (make-engraver
        ((process-music engraver)
           (let ((color (ly:context-property context 'staffColor)))
             (if (not (equal? color current-color))
                 (let ((column (ly:context-property context 
'currentCommandColumn)))
                   (set! current-color color)
                   (if spanner
                       (ly:spanner-set-bound! spanner RIGHT column))
                   (set! spanner (ly:engraver-make-grob engraver 
'StaffColorizer '()))
                   (ly:grob-set-property! spanner 'color current-color)
                   (ly:spanner-set-bound! spanner LEFT column)))))
        ((finalize engraver)
           (if spanner
             (let ((column (ly:context-property context 
'currentCommandColumn)))
               (ly:spanner-set-bound! spanner RIGHT column)))))))

\layout {
   \context {
     \Global
     \grobdescriptions #all-grob-descriptions
   }
   \context {
     \Staff
     \consists #Staff_colorizer_engraver
   }
}

staffColor = \set Staff.staffColor = \etc

{
   \staffColor red
   c'1
   \staffColor green
   c'2 4 \staffColor cornflowerblue 4
}

Cordialement,
Jean

---

From: Vincent Gay <[email-masked]>
Date: Sun, 12 Dec 2021 18:01:39 +0100

> Voici une solution possible : 

Wouah... Du coup même plus besoin de ma petite portée percus dessous.

---

From: Vincent Gay <[email-masked]>
Date: Sun, 12 Dec 2021 18:02:31 +0100

Merci infiniment

---

From: Christian LE BARS <[email-masked]>
Date: Sun, 12 Dec 2021 18:44:21 +0100

bonjour Vincent. Super ta partoche!!

Puis -je en avoir un exemplaire, moi aussi a des fin didactique.

Par avance merci.

Christian

---

From: nicolas lehembre <[email-masked]>
Date: Sun, 12 Dec 2021 23:53:45 +0100

Bonjour tout le monde,
C'est en effet une super bonne idée, ces couleurs. Merci à Vincent et à Jean !!
N

Le 12 décembre 2021 18:03:03 Vincent Gay <[email-masked]> a écrit :
> -- Vincent Gay
> https://myrealbook.vintherine.org/ - http://photos.vintherine.org/

---

From: Vincent Gay <[email-masked]>
Date: Mon, 13 Dec 2021 11:21:07 +0100

> Puis -je en avoir un exemplaire, moi aussi a des fin didactique.

Code ci-dessous. Quelques commentaires :

1) J'ai copié / collé le code fourni par Jean ( sans l'exemple de fin) 
dans un fichier que j'ai appelé staffColor.ly et que j'appelle par un 
\include. *Attention* : si on appelle le fichier sans autre 
modifications toutes les portées sont coloriées en noir. Commencez donc 
votre code par \staffColor white. (Jean, serait-il possible que le blanc 
soit la couleur par défaut si non définie ?)

2) Comme je sais que Christian utilise Lilyjazz j'ai laissé 
jazzchords.ily et lilyjazz.ily dans les \include mais ce n'est pas 
indispensable et ceux qui n'ont pas Lilyjazz peuvent commenter les 2 
lignes sans problème

3) la fonction showStartBar (intégrée dans le code) permet de démarrer 
par une barre de mesure, ici une barre de reprise. Cela permet aussi de 
laisser la clef et l'indication de mesure en blanc. J'ai essayé de 
commencer par un silence invisible (\partial 32 s32) ce qui rendrait 
cette fonction inutile et permettrait t'intégrer l'armure initiale à 
l'intérieur de la première mesure mais cela me génère un espace beaucoup 
trop grand avant la première barre de mesure. J'essaierai de résoudre ça 
ultérieurement.

4) Lilypond reconnaît les nom de couleurs selon la norme X11. Il y a une 
liste dans la doc mais sans nuancier. Une petite recherche dans le web 
permet de trouver un tableau plus facilement utilisable, par exemple ici 
: http://www.css-faciles.com/couleurs-css.php

Bonne semaine.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\version "2.22.1"
#(set-global-staff-size 18)
\include "jazzchords.ily"
\include "lilyjazz.ily"
\include "staffColor.ly"

\paper {
   indent = 0\mm
   ragged-last-bottom = ##t
   ragged-bottom = ##f
   ragged-last = ##f
   markup-system-spacing = #'((basic-distance . 23)
                              (minimum-distance . 8)
                              (padding . 1))
   score-system-spacing = #'((basic-distance . 23)
                             (minimum-distance . 20)
                             (padding . 5))
}

title = #"Les passantes"
composer = #"Georges Brassens"
meter = #"(Ballad)"

realBookTitle = \markup {
   \score {
     {
       \override TextScript.extra-offset = #'(0 . -4.5)
       \staffColor white
       s4
       s^\markup {
         \fill-line {
           \fontsize #1 \lower #1 \rotate #7 \concat { " " #meter }
           \fontsize #4
           \override #'(offset . 9)
           \override #'(thickness . 6)
           \underline \larger \larger #title
           \fontsize #1 \lower #1 \concat { #composer " " }
         }
       }
       s
     }
     \layout {
       \omit Staff.Clef
       \omit Staff.TimeSignature
       \omit Staff.KeySignature
       ragged-right = ##f
     }
   }
}

voltaAdLib = \markup { 1. 2. 3… \italic \text "ad lib." }
voltaOnCue = \markup \small \text "Last X"

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Start with a Barline
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

showStartBar = {
   \once \override Score.BreakAlignment.break-align-orders =
   #(make-vector 3 '(instrument-name
                     left-edge
                     ambitus
                     breathing-sign
                     clef
                     key-signature
                     time-signature
                     staff-bar
                     custos))
   \once \override Staff.TimeSignature.space-alist =
   #'((first-note . (fixed-space . 2.0))
      (right-edge . (extra-space . 0.5))
      ;; free up some space between time signature
      ;; and repeat bar line
      (staff-bar . (extra-space . 1)))
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\header {
   pdftitle = #title
   pdfauthor = #composer
   title = \realBookTitle
   tagline = ##f
}

\layout {
   \context {
     \Score
     \omit BarNumber
     startRepeatType = #"[|:"
     endRepeatType = #":|]"
     doubleRepeatType = #":|][|:"
     \override Clef #'break-visibility = #'#(#f #f #f)
     \override KeySignature #'break-visibility = #'#(#f #t #t)
     \override SystemStartBar #'collapse-height = #1
   }
   \context {
     \Staff
     printPartCombineTexts = ##f
     \consists "Merge_rests_engraver"
   }
   \context {
     \ChordNames
     \override ParenthesesItem.font-size = #2
   }
   \context { \Score markFormatter = #format-mark-box-alphabet }
}

accords = \chordmode {
   \set chordChanges = ##t
   f1:7+ e:7 a:7 d:7 d:m7 g:7 c:7+ e:7
   f1:7+ e:7 a:7 d:7 a:m7 g:7 a:m7 g2:m7 c:7 a1:m
}

theNotes =  \relative c''' {
   \clef "treble" \key f \major \time 4/4
   \staffColor white
   \showStartBar \bar "[|:"
   \set Staff.explicitKeySignatureVisibility = ##'#(#f #t #t)
   \override Staff.KeyCancellation.break-visibility = #all-invisible

   \repeat volta 2
   {
     <<
       { \staffColor aqua a1
         \key a \major \staffColor pink  gis
         \key d \major \staffColor orange g!
         \key g \major \staffColor yellow fis \break
         \key c \major \staffColor Chartreuse f! f e
         \key a \major \staffColor pink d \break
         \key f \major \staffColor aqua e
         \key a \major \staffColor pink d
         \key d \major \staffColor orange cis
         \key g \major \staffColor yellow c! \break
         \key c \major \staffColor Chartreuse c b c  }
       \\
       { e d cis c
         c b b gis
         a gis g! fis
         g f c
       }
     >>

   }
   \alternative {
     {
       \overrideProperty Score.VoltaBracket.text \voltaAdLib
       << { \key f \major \staffColor aqua bes' } \\ { f2 e } >> }
     {
       \overrideProperty Score.VoltaBracket.text \voltaOnCue
       << { \key c \major \staffColor Chartreuse c'1 } \\ { e,1 } >> 
\bar ".." }
   }
}

\book {
   \paper {
     #(set-paper-size "a4")
     page-count = #1
   }
   \bookpart {
     \score {
       <<
         \new ChordNames { \accords }
         \new Staff \theNotes
       >>
} } }

---

From: Vincent Gay <[email-masked]>
Date: Mon, 13 Dec 2021 11:55:14 +0100

Le 13/12/2021 à 11:21, Vincent Gay a écrit :
> J'ai essayé de commencer par un silence invisible (\partial 32 s32) ce 
> qui rendrait cette fonction inutile et permettrait t'intégrer l'armure 
> initiale à l'intérieur de la première mesure mais cela me génère un 
> espace beaucoup trop grand avant la première barre de mesure. 
> J'essaierai de résoudre ça ultérieurement.
J'ai résolu le problème par
\layout {
   \context {
     \Score
     proportionalNotationDuration = #(ly:make-moment 1/10)
} }
et un \partial 256

voici le code corrigé

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.22.1"
#(set-global-staff-size 18)
\include "jazzchords.ily"
\include "lilyjazz.ily"
\include "staffColor.ly"

\paper {
   indent = 0\mm
   ragged-last-bottom = ##t
   ragged-bottom = ##f
   ragged-last = ##f

title = #"Les passantes"

\header {
   pdftitle = #title
   pdfauthor = #composer
   title = \realBookTitle
   tagline = ##f
}

\layout {
   \context {
     \Score
     proportionalNotationDuration = #(ly:make-moment 1/10)
     \omit BarNumber
     startRepeatType = #"[|:"
     endRepeatType = #":|]"

accords = \chordmode {
   \set chordChanges = ##t
   s256

theNotes =  \relative c''' {
   \clef "treble" \time 4/4
   \staffColor white
   \partial 256 s256
   %\showStartBar \bar "[|:"
   \set Staff.explicitKeySignatureVisibility = ##'#(#f #t #t)
   \override Staff.KeyCancellation.break-visibility = #all-invisible

   \repeat volta 2
   {
     <<
       { \key f \major \staffColor aqua a1

\book {
   \paper {
     #(set-paper-size "a4")
     page-count = #1
   }
   \bookpart {
     \score {
       <<

---

From: Jean Abou Samra <[email-masked]>
Date: Mon, 13 Dec 2021 14:13:37 +0100

Le 13/12/2021 à 11:21, Vincent Gay a écrit :
> modifications toutes les portées sont coloriées en noir. Commencez 
> donc votre code par \staffColor white. (Jean, serait-il possible que 
> le blanc soit la couleur par défaut si non définie ?)

Effectivement, je ne m'en étais pas rendu compte.
Voici une version corrigée et simplifiée :

\version "2.22.1"

#(define (staff-colorizer::print grob)
    (let* ((staff-symbol (ly:grob-object grob 'staff-symbol))
           (left (ly:spanner-bound grob LEFT))
           (right (ly:spanner-bound grob RIGHT))
           (refp (ly:grob-system grob))
           (spacing-pair (ly:grob-property grob 'spacing-pair))
           (coord-adjust (ly:grob-relative-coordinate grob refp X))
           (x-span (cons (- (interval-end 
(ly:paper-column::break-align-width
                                           left
                                           (car spacing-pair)))
                            coord-adjust)
                         (- (interval-start 
(ly:paper-column::break-align-width
                                             right
                                             (cdr spacing-pair)))
                            coord-adjust)))
           (y-span (ly:grob-extent staff-symbol staff-symbol Y)))
      (make-filled-box-stencil x-span y-span)))

#(define-grob!
    'StaffColorizer
    `((stencil . ,staff-colorizer::print)
      (layer . -1)
      (spacing-pair . (staff-bar . staff-bar))
      (meta . ((class . Spanner)
               (interfaces . (text-interface))))))

           (let ((color (ly:context-property context 'staffColor #f)))
             (if (and color
                      (not (equal? color current-color)))

\layout {
   \context {
     \Global

{
   \staffColor red
   c'1
   \staffColor green

Cordialement,
Jean

---

From: Vincent Gay <[email-masked]>
Date: Mon, 13 Dec 2021 14:43:54 +0100

> Voici une version corrigée et simplifiée : 

C'est juste parfait. Merci Jean.

---

From: Christian LE BARS <[email-masked]>
Date: Mon, 13 Dec 2021 16:31:26 +0100

bonjour a tous.

Juste pour dire qu'avec la version 2.20.0

ben pas de couleur🙁

La version 2.20.0 est la version actuelle du dépôt Ubuntu.

Il va falloir attendre

---

From: Jean Abou Samra <[email-masked]>
Date: Mon, 13 Dec 2021 22:16:09 +0100

Bonjour,

C'est normal, les noms de couleurs CSS ne sont apparus
qu'en 2.22. Avant, il n'y avait que le RGB avec
rgb-color, et les noms X11 avec x11-color. En
2.20, il faudrait remplacer, par exemple,

\staffColor aqua

par

\staffColor #(rgb-color 127/255 255/255 0/255)

avec les valeurs (127, 255, 0) à prendre sur un
site dans le goût de
https://www.w3schools.com/colors/colors_picker.asp.
De plus, il faudrait ajouter une ligne dans la
définition de define-grob! pour que cette fonction
ressemble à :

#(define (define-grob! grob-name grob-entry)
    (set-object-property! grob-name 'translation-type? 
ly:grob-properties?) ;; à rajouter
    ...)

Mais bon, pas besoin d'attendre en réalité. Vous pouvez
soit mettre à jour Ubuntu vers Hirsute Hippo (la dernière
version), soit, si vous préférez rester en LTS,
installer LilyPond à partir du paquetage
universel officiel fourni sur

http://lilypond.org/unix.fr.html

Cordialement,
Jean