Subject: Notation d'un barré pour une seule note ou accord

From: Simon Martineau <[email-masked]>
Date: Wed, 21 Dec 2022 10:56:21 +0100

Bonjour à tous,

Tout d’abord un grand merci aux développeurs pour cette nouvelle version de LilyPond !!

J’ai besoin d’un peu d’aide pour une fonction pour la notation de barrés :

Je me suis inspiré du manuel, Notation d’accords barrés pour guitare pour écrire le code suivant :

\version "2.24.0"

xBarre =
#(define-music-function (txt mus)
(string? ly:music?)
#{
\once \override TextSpanner.font-size = #-2
\once \override TextSpanner.staff-padding = #3
\once \override TextSpanner.style = #'line
\once \override TextSpanner.to-barline = ##f
\once \override TextSpanner.bound-details =
#`((left
(text . ,#{ \markup { \draw-line #'( 0 . -.8) } #})
(Y . 0)
(padding . 0.25)
(attach-dir . -2))
(right
(text . ,#{ \markup { \hspace #0.3 \bold #txt } #})
(Y . 0)
(padding . 0.25)
(attach-dir . 2)))
<>\startTextSpan $mus \stopTextSpan #})

Cela fonctionne très bien avec :

\relative c' {
a2 \xBarre "II" { <e' a cis>4 d' }
}

Mais j’aimerais aussi pouvoir indiquer un barré pour un accord seul, comme ça :

\relative c' {
a,2 \xBarre "II" { <e' a cis> }
}

Comment est-ce que je peux modifier mon code pour que cela fonctionne ?

Merci !

Simon

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Wed, 21 Dec 2022 11:25:18 +0100

Bonjour Simon,
Peut-être avec un markup ? Par exemple :

#(define-markup-command (singleChordBarre layout props txt)
     (markup?)
     (interpret-markup layout props
       #{
          \markup \translate #'(0 . 2.5)  \concat {
            \draw-line #'( 0 . -.8)
            \draw-line #'( 1 . 0)
            \hspace #0.3 \tiny \bold \italic #txt
          } #}))

\relative c' {
  a2 <e' a cis>4 ^\markup\singleChordBarre II
}

Cordialement,
Pierre
PS. Pour les barrés, voir aussi : https://lsr.di.unimi.it/LSR/Item?id=952

Le mer. 21 déc. 2022 à 10:57, Simon Martineau <[email-masked]> a
écrit :

> Je me suis inspiré du manuel, Notation d’accords barrés pour guitare
> <http://lilypond.org/doc/v2.21/Documentation/snippets/fretted-strings.fr.html>
> pour écrire le code suivant :
>
>  <#m_-6566505439468993384_cb1-1>\version "2.24.0" <#m_-6566505439468993384_cb1-2> <#m_-6566505439468993384_cb1-3>xBarre = <#m_-6566505439468993384_cb1-4>#(define-music-function (txt mus)  <#m_-6566505439468993384_cb1-5>     (string? ly:music?) <#m_-6566505439468993384_cb1-6>   #{  <#m_-6566505439468993384_cb1-7>   \once \override TextSpanner.font-size = #-2 <#m_-6566505439468993384_cb1-8>   \once \override TextSpanner.staff-padding = #3 <#m_-6566505439468993384_cb1-9>   \once \override TextSpanner.style = #'line <#m_-6566505439468993384_cb1-10>   \once \override TextSpanner.to-barline = ##f <#m_-6566505439468993384_cb1-11>   \once \override TextSpanner.bound-details =  <#m_-6566505439468993384_cb1-12>        #`((left <#m_-6566505439468993384_cb1-13>            (text . ,#{ \markup { \draw-line #'( 0 . -.8) } #}) <#m_-6566505439468993384_cb1-14>            (Y . 0) <#m_-6566505439468993384_cb1-15>            (padding . 0.25) <#m_-6566505439468993384_cb1-16>            (attach-dir . -2)) <#m_-6566505439468993384_cb1-17>          (right <#m_-6566505439468993384_cb1-18>            (text . ,#{ \markup { \hspace #0.3 \bold #txt } #}) <#m_-6566505439468993384_cb1-19>            (Y . 0) <#m_-6566505439468993384_cb1-20>            (padding . 0.25) <#m_-6566505439468993384_cb1-21>            (attach-dir . 2))) <#m_-6566505439468993384_cb1-22>        <>\startTextSpan $mus \stopTextSpan #})
>
>  <#m_-6566505439468993384_cb2-1>\relative c' { <#m_-6566505439468993384_cb2-2>  a2 \xBarre "II" { <e' a cis>4 d' } <#m_-6566505439468993384_cb2-3>}
>
>  <#m_-6566505439468993384_cb3-1>\relative c' { <#m_-6566505439468993384_cb3-2>  a,2 \xBarre "II" { <e' a cis> } <#m_-6566505439468993384_cb3-3>}
>

---

From: Martial R <[email-masked]>
Date: Wed, 21 Dec 2022 12:57:19 +0100

Bonjour,

Je fais ainsi,
j'ai sous la main les caractères  BI¬  ou CII¬ je copie et compose avec.

Cordialement
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.24.0"

#(define-markup-command (Txt layout props txt) (markup?)
  "Entrée de texte"
  (interpret-markup layout props
   (markup #:fontsize -2 txt )
    ))

tx=\tweak layer -1 -\markup\center-align\Txt \etc

\relative c' {
  a2 <e' a cis>4^\tx BII¬
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Cordialement

-- 
Martial Rameaux

---

From: Simon Martineau <[email-masked]>
Date: Wed, 21 Dec 2022 14:17:15 +0100

Merci beaucoup ! C’est exactement ce que je cherche à faire !

Par hasard, est-ce qu’il existe une possibilité en scheme de connaitre le nombre de notes contenues dans ma variable $mus ? Cela me permettrai d’intégrer ce code directement dans ma fonction dans le cas où il y a une seule note ou un seul accord…

---

From: Simon Martineau <[email-masked]>
Date: Wed, 21 Dec 2022 14:18:04 +0100

Merci Martial, cela peut-être une bonne solution également !

---

From: Simon Martineau <[email-masked]>
Date: Fri, 23 Dec 2022 10:13:24 +0100

Bonjour à tous,

Finalement je pense faire un petit mix des solutions proposées par Pierre (et des snippets sur LSR) et Martial. Merci à tous les deux ! J’ai encore besoin d’un peu d’aide, si quelqu’un a la solution :

singleB =
#(define-music-function (partial fretnum)
((string? "") number?)
#{
^\markup {
\center-align \fontsize #-1 \concat {
\bold {
$(format #f "~@r" fretnum)
#(if (not (string-null? partial))
#{ \markup \lower #.3 \fontsize #-4.2 #partial #})
}
"¬"
}
}
#})

\relative c'' {
<bes d g>1 \singleB "3" 3
% Ou
<bes d g>1 \singleB 3
}

Je trouve la solution avec le caractère “¬” tout à fait convenable, et qui a aussi l’avantage d’être ajustée en cas d’utilisation de \magnifyStaff. J’essaye donc d’adapter un des snippets sur le LSR pour qu’il coincide.

Première question justement : dans les solutions proposées par Pierre (cf code ci dessous), comment faire pour que la taille soit ajustée avec \magnifyStaff ? Pour l’instant le texte est bien ajusté mais pas la ligne du textSpan :

startB =
#(define-event-function (partial fretnum)
((string? "") number? )
#{
\tweak bound-details.left.text
\markup
\fontsize #-1 \normal-text \bold \concat {
#(format #f "~@r" fretnum)
#(if (not (string-null? partial))
#{
\markup {
\lower #.3 \fontsize #-4.2 #partial
\hspace #.1 }
#}
)
\hspace #.1
}
\tweak style #'line
\tweak thickness #1.8
\tweak bound-details.left.stencil-align-dir-y #0
\tweak bound-details.left.padding 0
\tweak bound-details.left.attach-dir -1
\tweak bound-details.left-broken.text ##f
\tweak bound-details.left-broken.attach-dir -1
\tweak bound-details.right.padding 0
\tweak bound-details.right.attach-dir 1
\tweak bound-details.right-broken.text ##f
\tweak bound-details.right.text
\markup
\with-dimensions #'(0 . 0) #'(-.3 . 0)
\draw-line #'(0 . -0.5)
\startTextSpan
#})

stopB = \stopTextSpan

\new Staff \with {
\magnifyStaff 0.5
}
\relative c'' {
g' \startB "3" 3 d bes \stopB
}

Deuxième question : toujours dans le code ci-dessus, j’aimerais que la propriété \tweak bound-details.left.stencil-align-dir-y #0 soit placée dans #(if (not (string-null? partial)) pour que la ligne soit à la bonne hauteur lorsque j’utilise l’indication de barré partiel mais aussi lorsque je ne l’utilise pas. Comment faire ? J’ai tenté d’insérer cette ligne au tout début de la fonction mais ça ne marche pas :

(if (not (string-null? partial))
#{ \tweak bound-details.left.stencil-align-dir-y #0 #}
#{ \tweak bound-details.left.stencil-align-dir-y #-0.25 #}
)

Merci beaucoup !

Bonne journée,

Simon

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Fri, 23 Dec 2022 11:30:50 +0100

Bonjour Simon,

Le ven. 23 déc. 2022 à 10:13, Simon Martineau <[email-masked]> a
écrit :
...

>
>    - Première question justement : dans les solutions proposées par
>    Pierre (cf code ci dessous), comment faire pour que la taille soit ajustée
>    avec \magnifyStaff ? Pour l’instant le texte est bien ajusté mais pas
>    la ligne du textSpan :
>
> ...

Oui, c'est assez agacent, je n'ai pas trouvé de solution simple.
Une solution un peu bâtarde serait d'ajouter un facteur 'scale' :

startB =
#(define-event-function (partial fretnum scale)
   ((string? "") number? number?)
    #{
      \tweak bound-details.left.text
        \markup
          \fontsize #-1 \normal-text \bold \concat {
          #(format #f "~@r" fretnum)
          #(if (not (string-null? partial))
             #{
             \markup {
             \lower #.3 \fontsize #-4.2 #partial
             \hspace #.1 }
             #}
             )
             \hspace #.1
        }
      \tweak style #'line
      \tweak thickness #1.8
      \tweak bound-details.left.stencil-align-dir-y #0
      \tweak bound-details.left.padding 0
      \tweak bound-details.left.attach-dir -1
      \tweak bound-details.left-broken.text ##f
      \tweak bound-details.left-broken.attach-dir -1
      \tweak bound-details.right.padding 0
      \tweak bound-details.right.attach-dir 1
      \tweak bound-details.right-broken.text ##f
      \tweak bound-details.right.text
        \markup
          %\with-dimensions #'(0 . 0) #'(-.3 . 0)
          %\draw-line #'(0 . -0.5)
          \stencil #(make-connected-path-stencil
                     '((0 -.5)) 0.15 1 scale #f #f)
      \startTextSpan
   #})

stopB = \stopTextSpan

\new Staff \with {
  \magnifyStaff 0.5
}
\relative c'' {
  g' \startB "3" 3 0.5 d bes \stopB
}

...

>
>    - Deuxième question : toujours dans le code ci-dessus, j’aimerais que
>    la propriété \tweak bound-details.left.stencil-align-dir-y #0 soit
>    placée dans #(if (not (string-null? partial)) pour que la ligne soit à
>    la bonne hauteur lorsque j’utilise l’indication de barré partiel mais aussi
>    lorsque je ne l’utilise pas. Comment faire ? J’ai tenté d’insérer cette
>    ligne au tout début de la fonction mais ça ne marche pas :
>
> ...
 Si c'est possible mais il faut réécrire tout le markup pour chaque option,
pas seulement le tweak

HTH, cordialement,

Pierre

---

From: Simon Martineau <[email-masked]>
Date: Sat, 24 Dec 2022 09:56:50 +0100

Merci beaucoup Pierre !

Voilà donc ma fonction qui me convient très bien, je me demande juste si il n’y a pas moyen d’utiliser (let (barre-markup (...))), je trouve ça un peu dommage de réécrire les mêmes lignes avec les \tweak à l’identique. Je vais faire quelques essais !

startB =
\tweak thickness #1.5
\draw-line #'(0 . -0.4)
\tweak thickness #1.5
\tweak bound-details.left.stencil-align-dir-y #-0.25
\draw-line #'(0 . -0.4)
\startTextSpan
#})
)

Pour le facteur scale et \magnifyStaff, je garde l’idée sous le coude !

Merci beaucoup !

Simon

---

From: Jean Abou Samra <[email-masked]>
Date: Mon, 26 Dec 2022 16:54:10 +0100

Le 24/12/2022 à 09:56, Simon Martineau a écrit :

> Merci beaucoup Pierre !
>
> Voilà donc ma fonction qui me convient très bien, je me demande juste 
> si il n’y a pas moyen d’utiliser (let (barre-markup (...))), je trouve 
> ça un peu dommage de réécrire les mêmes lignes avec les \tweak à 
> l’identique. Je vais faire quelques essais !
>

Oui, bien sûr :

\version "2.24.0"

startB =
    (let ((barre-event
           #}))
      (if (string-null? partial)
             #barre-event
             #barre-event
          #})))

Attention, il y a bien deux paires de parenthèses autour de
« barre-event ... » dans « (let ((barre-event ...)) ...) »,
comme expliqué dans

https://tutoriel-scheme.readthedocs.io/fr/latest/variables-locales.html#parentheser-un-let

Cordialement,
Jean

---

From: Simon Martineau <[email-masked]>
Date: Tue, 27 Dec 2022 23:52:36 +0100

<!DOCTYPE html>

Merci beaucoup Jean !

Voilà donc la fonction au final :

startB =
\tweak thickness #1.2

stopB = \stopTextSpan

Merci à tous pour votre aide !

Simon