Subject: Grille harmonique 100% Lilypond

From: Vincent Gay <[email-masked]>
Date: Fri, 11 Mar 2022 16:46:27 +0100

Hello toutes et tous

je reviens sur un vieux sujet (octobre 2019) concernant les grilles 
harmoniques.
https://lists.gnu.org/archive/html/lilypond-user-fr/2019-10/msg00109.html

À l'époque j'avais concédé qu'un maximum de 2 accords par mesures 
correspondait à 99% de mes besoins et Valentin m'avait taillé sur mesure 
une fonction pour une division d'une case en deux :
https://lists.gnu.org/archive/html/lilypond-user-fr/2019-10/msg00120.html

Dans les faits j'utilise assez fréquemment des divisions en 3 ou en 4

Pour la division en 4 pas de souci, je me suis basé sur la fonction de 
valentin et j'ai tracé l'autre diagonale. Mais comment faire pour tracer 
une demi-diagonale ?

Pour l’instant je m'en sort avec des markups codé en dur mais le 
résultat est moins propre et les variables doivent changer en fonction 
de la taille de la portée.

Merci d'avance et bon week-end

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

---

From: Vincent Gay <[email-masked]>
Date: Fri, 11 Mar 2022 18:07:32 +0100

Autre question dans la même rubrique : quand j'utilise la fonction 
écrite par Valentin suivie d'un \stopStaff celui-ci ne s’exécute pas

si j'enlève le \startStaff de fin (dans la fonction) c'est ok. Du coup 
je suis obligé de dupliquer la fonction (voir code ci-dessous)

\version "2.22.2"
#(set-global-staff-size 17)

\paper {
   #(set-paper-size "a4")
}

"\\/" = #(define-music-function
   (parser location mus1 mus2) ( ly:music? ly:music? )
   #{
     \stopStaff
     \once \override Staff.StaffSymbol.stencil = $(lambda (grob)
        (let* ((staff (ly:staff-symbol::print grob))
               (X-ext (ly:stencil-extent staff X))
               (Y-ext (ly:stencil-extent staff Y)))
          (ly:grob-set-property! grob 'layer -10)
          (ly:stencil-add
           (make-line-stencil
            (ly:staff-symbol-line-thickness grob)
            (car X-ext) (car Y-ext) (cdr X-ext) (cdr Y-ext))
           staff)))
     \startStaff
     \once \override ChordName.extra-offset = #'(1 . .5)
     $mus1
     \once \override ChordName.extra-offset = #'(3 . -3)
     $mus2
     \stopStaff
     \startStaff
   #})

"s" = #(define-music-function
   (parser location mus1 mus2) ( ly:music? ly:music? )
   #{
     \stopStaff
     \once \override Staff.StaffSymbol.stencil = $(lambda (grob)
        (let* ((staff (ly:staff-symbol::print grob))
               (X-ext (ly:stencil-extent staff X))
               (Y-ext (ly:stencil-extent staff Y)))
          (ly:grob-set-property! grob 'layer -10)
          (ly:stencil-add
           (make-line-stencil
            (ly:staff-symbol-line-thickness grob)
            (car X-ext) (car Y-ext) (cdr X-ext) (cdr Y-ext))
           staff)))
     \startStaff
     \once \override ChordName.extra-offset = #'(1 . .5)
     $mus1
     \once \override ChordName.extra-offset = #'(3 . -3)
     $mus2
     \stopStaff
   #})

grilleII = \chordmode {
   \override Score.RehearsalMark #'self-alignment-X = #LEFT
   \mark \markup "fonction Valentin originale"
   \bar "[|:" \/ d2:m7 g:7 \/ d2:m7 g:7 \/ d2:m7 g:7
   \set Score.repeatCommands = #'((volta "1.") ) \/ d2:m7 g:7
   \set Score.repeatCommands = #'((volta #f) end-repeat)
   \stopStaff s1 \bar "" s \bar "" s \startStaff
   \set Score.repeatCommands = #'((volta "2.") ) c1:7+ \bar "||"
   \set Score.repeatCommands = #'((volta #f)) \bar "||" \break
   \mark \markup \left-column {  \pad-around #2 "  "  "avec fonction 
Valentin dupliquée" }
     \bar "[|:" \/ d2:m7 g:7 \/ d2:m7 g:7 \/ d2:m7 g:7
   \set Score.repeatCommands = #'((volta "1.") ) \s d2:m7 g:7
   \set Score.repeatCommands = #'((volta #f) end-repeat)
   \stopStaff s1 \bar "" s \bar "" s \startStaff
   \set Score.repeatCommands = #'((volta "2.") ) c1:7+
   \set Score.repeatCommands = #'((volta #f)) \bar ".."
}

     \score {
       \layout {
         indent = 0
         ragged-right = ##f
         ragged-last = ##f
         \context {
           \Score
           \remove "Volta_engraver"
           \omit Clef % Cacher la clef
           \omit TimeSignature % cacher la métrique
           \omit BarNumber
           \override SpacingSpanner.strict-note-spacing = ##t
           proportionalNotationDuration = #(ly:make-moment 1/16)
         }
       }
       <<
         \new Staff \with {
           \remove "Staff_symbol_engraver"
         }
         \new ChordNames \with {
           \override ChordName.extra-offset = #'(10 . -1 )
           \override ParenthesesItem.extra-offset = #'(10 . -1 )
           \override BarLine.bar-extent = #'(-5 . 5)
           \consists "Bar_engraver"
           \override StaffSymbol.line-positions = #'( -10 10 )
           \consists "Staff_symbol_engraver"
           \consists "Percent_repeat_engraver"
           \consists "Volta_engraver"
         }
         \grilleII
       >>
}

---

From: Jean Abou Samra <[email-masked]>
Date: Sat, 12 Mar 2022 03:56:27 +0100

Le 11/03/2022 à 16:46, Vincent Gay a écrit :
> correspondait à 99% de mes besoins et Valentin m'avait taillé sur 
> mesure une fonction pour une division d'une case en deux :
> valentin et j'ai tracé l'autre diagonale. Mais comment faire pour 
> tracer une demi-diagonale ?
>

Voici mon brouillon. C'est encore perfectible, mais devrait déjà
être utile. Remarque que dans cette approche, la division est automatique,
il n'y a plus besoin de \/ . Ainsi, il est possible de prendre une
variable en \chordmode normal et de la mettre dans un \new ChordGrid
en même temps que dans d'autres contextes (Staff, TabStaff, etc.).

Cordialement,
Jean

---

From: Jacques Menu <[email-masked]>
Date: Sat, 12 Mar 2022 08:31:08 +0100

Magnifique Jean, ça fait longtemps que ce thème revient sur les listes!

Serait-il possible d’avoir les traits de subdivision verticaux horizontaux comme dans le style du Baudoin, comme:

Bon w-e!

JM

> Le 12 mars 2022 à 03:56, Jean Abou Samra <[email-masked]> a écrit :
> 
> <chord-grid.ly>

---

From: Vincent Gay <[email-masked]>
Date: Sat, 12 Mar 2022 10:42:34 +0100

Le 12/03/2022 à 03:56, Jean Abou Samra a écrit :
> être utile. 
Magique comme d'hab. Merci grandement.

J'ai trouvé où régler la position des accords : nécessaire dans les 
cases en x avec des noms d'accords longs (genre bes4:5+7.9-11+). Mais 
peux-tu me dire où l'on peut régler la hauteur des cases ? C'est un peu 
écrasé (voir ci-dessous)

> Remarque que dans cette approche, la division est automatique,
En théorie mais pas en pratique, la manière de représenter les reprises 
alternatives implique une mise en page spécifique. Mais ça simplifie la 
vie, ça c'est sûr

Allez hop, je vous emmène en ballade

---

From: Vincent Gay <[email-masked]>
Date: Sat, 12 Mar 2022 15:11:04 +0100

Le 12/03/2022 à 10:42, Vincent Gay a écrit :
> peux-tu me dire où l'on peut régler la hauteur des cases ? C'est un 
> peu écrasé (voir ci-dessous)

J'ai essayé avec

\new ChordGrid \with {

ça fonctionne sauf que le calcul des diagonales de division et le 
placement des accords  sont à revoir. Je vais essayer d'y comprendre 
quelque chose 😕

Par ailleurs pour utiliser les % de répétition (par ex: \repeat percent 
2 { a:m7 d:7 }) j'ai du rajouter \consists "Percent_repeat_engraver"

Enfin je trouve que les barres de mesures ne sont pas trop bien 
alignées. De fait la largeur des cases semble être fonction de la 
longueur des noms d'accords et de l'épaisseur des barres de mesure. Ça 
améliore si dans le score je mets un layout comme ça :

      \layout {
         indent = 0
         \context {
           \Score

je met ce layout dans le score sinon ça affecte les autres

---

From: Vincent Gay <[email-masked]>
Date: Sat, 12 Mar 2022 15:32:24 +0100

> placement des accords  sont à revoir. Je vais essayer d'y comprendre 

Hum... je suppose que c'est au niveau de #(define (chord-square::print 
grob)...) mais je suis bien incapable de résoudre le problème

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

---

From: Vincent Gay <[email-masked]>
Date: Sat, 12 Mar 2022 16:55:39 +0100

Jean m'a envoyé un petit message pour me donner la clef du coup : la 
valeur à modifier est ligne 89

pour un \override StaffSymbol.line-positions = #'( -10 10 ) dans le 
layout mettre (height . 10), *à adapter en fonction de la hauteur de 
case que vous souhaitez**
*
Par ailleurs j'ai modifié de quelques pouièmes la position des nom 
d'accords pour plus de lisibilité des noms longs

entre les lignes 31 et 45 (en gras les valeurs modifiées) :

        (match chord-name-fractions
          ((1)
           (values '(#f #f #f #f) '((0.0 . 0.0))))
          ((1/2 1/2)
           (values '(#t #f #t #f) '((-0.5 . 0.3) (0.5 . -0.3))))
          ((1/2 1/4 1/4)
           (values '(#t #f #t #t) '((-0.5 . 0.3) (0 . *-0.6*) (0.65 . 
0.0))))
          ((1/4 1/4 1/2)
           (values '(#t #t #t #f) '((-0.65 . 0.0) (0.0 . *0.6*) (0.5 . 
-0.3))))
          ((1/4 1/4 1/4 1/4)
           (values '(#t #t #t #t) '((*-0.6* . 0.0) (0.0 . *0.6*) (0.0 . 
*-0.6*) (0.5 . 0.0))))
          ((1/4 3/4)
           (values '(#t #t #f #f) '((-0.65 . 0.0) (0.4 . 0.0))))
          ((3/4 1/4)
           (values '(#f #f #t #t) '((-0.4 . *0.05*) (0.65 . *0.05*))))

Du coup je je mets en pièce jointe mon fichier à inclure selon mes 
besoins (sachant que j'utilise lilyjazz) et je mets ci-dessous mon 
\score type

\include "chord-grid-JAS.ly"

\score {
       \layout {
         indent = 0
         \context {
           \Score
           \ChordGrid
       \new ChordGrid \mus
     }

---

From: Jean Abou Samra <[email-masked]>
Date: Mon, 14 Mar 2022 20:10:53 +0100

Le 12/03/2022 à 08:31, Jacques Menu a écrit :
> Serait-il possible d’avoir les traits de subdivision verticaux 
> horizontaux comme dans le style du Baudoin, comme:
>
>
>
>
> Bon w-e!
>
> JM

Hello Jacques,

Pour résumer un message privé à Vincent : oui, c'est tout
à fait possible, je m'y attaquerai quand j'aurai un peu de
temps (c'est à dire probablement le week-end) ainsi qu'à
plusieurs autres chantiers sur ce bout de code.

A+
Jean

---

From: Jacques Menu <[email-masked]>
Date: Tue, 15 Mar 2022 05:26:29 +0100

> Salut Jean,

> plusieurs autres chantiers sur ce bout de code.

Je m’en lèche les babines d’avance… Merci!

JM

---

From: Vincent Gay <[email-masked]>
Date: Tue, 15 Mar 2022 20:11:35 +0100

Le 14/03/2022 à 20:10, Jean Abou Samra a écrit :

> temps

Encore un petit truc (quand tu auras le temps 😁)

Depuis que j'utilise Lilyjazz j'ai une barre de mesure en début de 
chaque lignes de portée. Dans la mesure ou Les clefs et armures ne sont 
affichées qu'en début de morceau ça meuble.
dans mon layout (context score) j'ai \override SystemStartBar 
#'collapse-height = #1 , j'imagine que c'est ça

Si j'inclus chord-grid ça ne fonctionne plus. J'ai bien vu un \override 
SystemStartBar #'collapse-height = #0  mais dans un context ChorfNames 
et même si je le supprime cela ne rétabli pas ma barre de mesure initiale

Bonne soirée

---

From: Jacques Menu <[email-masked]>
Date: Wed, 16 Mar 2022 12:07:16 +0100

> Le 15 mars 2022 à 20:11, Vincent Gay <[email-masked]> a écrit :

> Depuis que j'utilise Lilyjazz j'ai une barre de mesure en début de chaque lignes de portée.

C’est sûrement le coup de barre.