Subject: Tablature guitare : saisie par les chiffres

From: Gerard <[email-masked]>
Date: Wed, 9 Nov 2022 09:50:12 +0100

Bonjour tout le  monde,

J'aimerai saisir des tablatures guitare qui ne sont données qu'en 
version tablature (sans la portée traditionnelle)... Dadi, Giroux, etc...

Donc vous me voyez venir... existe-t-il un moyen "inversé" de saisir une 
tablature, quelque chose dans le genre 0\3 pour corde "mi" 3ème case ? 
ou dois-me résigner à mentalement traduire... 5 sur la corde "si", c'est 
e\2 ?

Bien cordialement

Gérard

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 9 Nov 2022 13:36:12 +0100

Le 09/11/2022 à 09:50, Gerard a écrit :
> Donc vous me voyez venir... existe-t-il un moyen "inversé" de saisir 
> une tablature, quelque chose dans le genre 0\3 pour corde "mi" 3ème 
> case ? ou dois-me résigner à mentalement traduire... 5 sur la corde 
> "si", c'est e\2 ?

Bonjour Gérard,

Voici une solution possible. La syntaxe est

c\corde-case

ou
durée\corde-case

Note que LilyPond a besoin au niveau syntaxique d'une hauteur
ou d'une durée pour une note, donc si tu ne mets pas de durée
(pour garder la durée précédente), il faut mettre une hauteur
quelconque, comme « c » par exemple.

Cordialement,
Jean

\version "2.22.2"

#(define (pitch-list? x)
    (and (list? x)
         (every ly:pitch? x)))

tabInput =
#(define-music-function (tuning music) ((pitch-list? guitar-tuning) 
ly:music?)
    (for-some-music
     (lambda (m)
       (if (music-is-of-type? m 'note-event)
           (let* ((articulations (ly:music-property m 'articulations))
                  (fingering-ev (find (music-type-predicate 
'fingering-event)
                                      articulations))
                  (string-number-ev (find (music-type-predicate 
'string-number-event)
                                          articulations)))
             (if (and fingering-ev string-number-ev)
                 (begin
                  (set! (ly:music-property m 'articulations)
                        (delq! fingering-ev articulations))
                  (let* ((digit (ly:music-property fingering-ev 'digit))
                         (string-number (ly:music-property 
string-number-ev 'string-number))
                         (string-pitch (list-ref tuning (1- 
string-number))))
                    (set! (ly:music-property m 'pitch)
                          (ly:pitch-transpose
                           string-pitch
                           (ly:make-pitch 0
                                          0
                                          (* 1/2 digit)))))))))
       #f)
     music)
    music)

\new TabStaff {
   a,8 a <c' e'> a
   d8 a <d' f'> a
}

\new TabStaff \tabInput {
   c8\5-0 c\3-2 <c\1-0 c\2-1> c\3-2
   c\4-0 c\3-2 <c\1-1 c\2-3> c\3-2
}

% Avec un instrument autre que la guitare :

\new TabStaff \with {
   stringTunings = #bass-tuning
}
\relative { c,4 d e f }

\new TabStaff \with {
   stringTunings = #bass-tuning
}
\tabInput #bass-tuning {
   c4\3-3 c\2-0 c\2-2 c\2-3
}

---

From: Gerard <[email-masked]>
Date: Wed, 9 Nov 2022 14:01:19 +0100

Merci Jean,

Les bras m'en tombent ! Franchement épaté !

Du coup, deux petites questions :

1. ma demande était-elle un challenge ou y avait-il la solution quelque 
part ? Au cas où, dans le LSR, pourquoi pas ?

2. Lilypond a-t-il/elle des limites ou même l'impossible l'incroyable 
sera réalisé ? Suffit de demander 😂

Une chose est sûre, Lilypond et ses sorciers (dont tu es peut-être le 
chef 😉) n'ont pas fini de m'étonner !

Bonne continuation

Gérard

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 9 Nov 2022 14:25:43 +0100

> Les bras m'en tombent ! Franchement épaté !

De rien :)

> 1. ma demande était-elle un challenge ou y avait-il la solution 
> quelque part ? Au cas où, dans le LSR, pourquoi pas ?

Je ne m'étais même pas posé la question… Je ne vois rien de ce style 
dans la LSR. Il y a bien une fonction similaire postée par David Kastrup 
sur la liste anglophone,

https://lists.gnu.org/archive/html/lilypond-user/2017-03/msg00421.html

C'est pour entrer la tablature avec des lettres, pas avec des chiffres.

> sera réalisé ? Suffit de demander 😂

Réponse du théoricien que je suis : dans LilyPond il y a Scheme, qui est 
un langage Turing-complet, par conséquent tout est possible dans les 
limites de la patience et de la mémoire de la machine…

Cordialement,
Jean