lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Tablatures


From: Loïc Chahine
Subject: Re: Tablatures
Date: Tue, 5 May 2020 15:47:46 +0000

Mes compétences en codage LilyPond sont proche de zéro, et en codage de manière générale pas beaucoup plus élevées.

D’abord, je n’avais pas pensé aux problèmes d’enharmonie… Mais imaginons qu’on ne veuille pas faire à la fois tablature et partition en notes, pour simplifier le problème. Et de toute façon, la gestion de la polyphonie, si on veut la faire sérieusement, revient en effet à réécrire sur deux portées en déterminant quelles notes sont pensées tenues, etc.

J’ai à dessein renvoyé vers Tab de Wayne Cripps. L’outil est très limité dans le rendu visuel (il faut même mettre les retours à la ligne à la main), mais le mode de saisie n’est pas idiot, quoiqu’un peu fastidieux. LilyPond serait capable de faire beaucoup mieux et plus performant en termes de sortie.

En gros, sur chaque ligne, le premier caractère indique le rythme (x voulant dire « ne pas mettre de figure rythmique »), le deuxième la première corde, le troisième la 2e corde, etc. Donc sur un instrument à six cordes ou chœurs, si on veut les faire à vide les unes après les autres, on écrira :

xa
x a
x  a
x   a
x    a
x     a

Et tout est à l’avenant. Certains signes échappent au « colonnage » (du genre les ornements qu’on peut mettre avant/après une note).

On pourrait tout à fait imaginer une sorte de script qui transmuterait ça en notes, fussent-elles inexactes quant à l’enharmonie, lesquelles pourraient à leur tour être placées par LilyPond sur une tablature.

Dans le cas du théorbe, par exemple, on pourrait imaginer que le schéma en question soit automatiquement transmuté en
a\1 e\2 b\3 g\4 d\5 etc. (si j’ai bien compris comment ça fonctionne chez Lily), et que donc par exemple un

xbdda

de théorbe devienne automatiquement <bes\1 g\2 d’\3 g\4> ou <ais\1 …>

Ce qui est sûr, c’est que ça (me) demande moins d’effort d’écrire bdda que de réfléchir à ce que ça fait en notes.

En fait, on peut même imaginer, au pire, que l’instrument et son accord réel soient totalement oblitérés par LilyPond, et qu’il transforme le bdda en <gis’ f’ c’ f> (ce que ça ferait en luth accord vieil ton). Mais de pouvoir utiliser toutes les fonctionnalités de Lily pour le rendu visuel. D'ailleurs, ce serait fort utile pour la guitare baroque aussi parce qu’il y a tout un tas de subtilités d’écriture que je pourrai montrer et recenser si on envisage de se lancer dans une sorte de script. (Mais ce serait un peu « crade », j’avoue, que la musique résultante soit franchement « fausse »…)

Du reste, j’avais fait en 2017 un mini-script en Python pour transcrire la tablature de luth allemande en tablature bonne et honnête, avec des lignes (parce que la tablature allemande, ça ressemble à ça : https://people.carleton.edu/~jellinge/m101s12/Pages/02/Media02/02notation/GermanTablature.png) : j’écrivais ce que je voyais et ça devenait des notes. C’était un truc fort rudimentaire mais qui déjà m’avait demandé un gros effort parce que je n’y connais rien en Python. Je pourrai envoyer ça dans un mail si ça intéresse, il y a sans doute moyen d’améliorer et si ça peut être utile à quelqu’un…

En fait, tout ça, c’est des pistes de réflexion avant tout, basées sur mon expérience insatisfaite avec d’autres outils (alors que pour les partitions « normales » il n’y a pas d’hésitation possible !).

Loïc


Le 5 mai 2020 à 16:56, Éric via LilyPond French-speaking list <address@hidden> a écrit :

Loïc,

Il y a aussi une sorte de gestion des extensions maximales (c'est dans les
fichiers d'initialisation, soit engraver-init.ly, soit dans
property-init.ly, je ne sais plus).

Pas de souci pour les accords réentrant du théorbe et autres.

Pour ce qui d'un éventuel \tabmod permettant de saisir de la tablature par
les symboles à la place des noms des notes, le sujet a été déjà plusieurs
fois discuté (cf forum en anglais).
D'après ce que j'ai compris, tant qu'on ne cherche pas à montrer
l'équivalence automatique de la tablature en musique, cela serait très
faisable.
Par contre, si on compte sur Lilypond pour montrer les notes correspondantes
à la tablature, se pose le pb des enharmonies (sans parler de ceux
insolubles de polyphonie).
Vue que Lilypond différencie les enharmonies dès le plus bas niveau de
saisie, ii faut que quelqu'un/quelque chose choisisse entre do# et réb et
ainsi pour toutes des enharmonies potentielles à un moment ou à un autre.

Pas impossible, mais le jeu en vaut-il la chandelle ?
Il faudrait avant de commencer à saisir en \tabmod instruire Lilypond d'un
choix d'une gamme chromatique a priori.
C'est à dire de fixer arbitrairement un seul nom de note pour chaque touche
du piano (cf code plus bas).

En fin de saisie, une fois la tablature établie, si l'on veux voire la
musique correspondante, il faut soit :
- accepter de lire une partition fautive tonalement parlant, et sans
polyphonie,
- corriger les enharmonies fautives manuellement,
- corriger les enharmonies fautives semi-automatiquement en donnant des
instructions modales en cours de pièces (il existe des outils allant dans ce
sens (cf manuel ou bien Frescobaldi > outils > hauteurs > transposition
modale par ex.).
- prendre à bras le corps la questions de la polyphonie (là en générale, on
finis par complètement réécrire une autre saisie, éventuellement sur 2
portées, c'est potentiellement complexe… et passionnant).

Je pense qu'il serait efficace, pour convaincre qlqu'un de passer du temps à
bâtir du code pour un \tabmod, d'accepter qu'il n'y ai pas de gestion
dynamique des enharmonies, et qu'elles soient supposées être prise en charge
"à la main" par le scripteur, après saisie. Pas non plus de prise en charge
de polyphonie.
On aurait là un outils de pure conversion, dans le cas où l'accord de
l'instrument n'est pas maîtriser par le scripteur, où que l'on n'a pas assez
de connaissance du solfège (mais là, quid des corrections ???).


David Kastrup (un des gds "manitou" du code.ly) m'avait répondu il y a qlqs
années par une ébauche de code que voici.
C'est assez limité (et bien présenté comme tel par lui) :
- les frettes ne dépassent pas "g" , car à partir de "h" les symboles ne
sont plus reconnus comme de potentielles nom de notes (de a à g en anglais)
- il faut donner la corde à chaque fois, ce qui est fastidieux en 1ère
position,
- il faut donner une gamme chromatique à slt 12 noms de notes (pas de
souci),
- il est possible que ce soit une mauvaise piste comme point de départ de
codage !??


\version "2.19.50"

lute-tuning = \stringTuning <d, g, c f a d' g'>

tabtranslate =
#(define-music-function (pitches tuning music) (ly:music? pair? ly:music?)
  (define my-pitch (make-semitone->pitch (event-chord-pitches pitches)))
  (define string-number? (music-type-predicate 'string-number-event))
  (define semivec (list->vector (map ly:pitch-semitones tuning)))
  (map-some-music
   (lambda (m)
     (and (music-is-of-type? m 'note-event)
          (let* ((strs (ly:music-property m 'articulations))
                 (no
                  (case (length strs)
                    ((0) (ly:music-warning m "Needs string number") 1)
                    ((1) (ly:music-property (car strs) 'string-number))
                    (else (ly:music-warning m "Multiple string numbers")
                          (ly:music-property (car strs) 'string-number))))
                 (pit (ly:music-property m 'pitch))
                 (ab? (> (ly:pitch-notename pit) 4))
                 (num (+ (ly:pitch-steps pit) (if ab? 2 9)))
                 (no (if (and (integer? no)
                              (<= 1 no (vector-length semivec)))
                         (1- no)
                         (begin
                           (ly:music-warning (car strs)
                                             "Invalid string number")
                          0))))
            (set! (ly:music-property m 'pitch)
                  (my-pitch (+ (vector-ref semivec no) num)))
            m)))
   (tabChordRepeats music)))
%%

"|" = {
 \partial 1*0 \bar "|"
}

content =
\tabtranslate <c cis d dis e f fis g gis a bes b> \lute-tuning
{
 \set Staff.midiInstrument = "acoustic guitar (nylon)"
 \time 4/8
 \set Timing.measureLength = #(ly:make-moment 100000)
 \set Timing.beamExceptions = #'()
 \set Timing.baseMoment = #(ly:make-moment 1/4)

 <e\4 d\3 c\2>4
 q8 d\2 |
 <c\4 c\3 d\2>16
 c\2 c8\2
 <a\4 a\3 c\2>16
 a32\2 d\3 a8\2 |
 <e\5 e\4 c\3 c\2>16. e32\4 d16\4 g\5
 <e\5 d\4 c\3 c\2> e\4 e\5 d\4 |
 <c\6 e\5 e\4 d\3 c\2>8 <d\3 c\2>16 c\6 <b\6 c\3 c\2>8 a\2
 <c\6 e\5 e\4 d\3> <e\4 d\3>16 c\6 <e\5 e\4 c\3>8
 <c\3 c\2>16 e\5 <a\4 a\3 c\2>8 a16\2 c\3 |
 <e\5 d\3 c\2 a\1>8 c16\3 a\1 <c\5 d\2> a\3 <a\5 a\3 c\2>8 |
 <e\6 a\2>16 e\4 d\4 c\2 <c\6 a\3 d\2>8 c16\2 c\6 |
 <e\5 c\3 c\2>8 <c\3 c\2 a\1>16 e\5
 <a\4 a\3>8 d\2 <c\4 c\3> <d\3 c\2> <c\4 d\3 a\2 a\1> a16\6 a\2
 <a\5 c\4 d\3 c\2>8 d16\3 a\2 |
 <a\5 c\4 d\3 c\2> d\2 <a\5 a\1> c\2
 <d\7 a\4 a\3 d\2> <a\6 c\2>32 a\2 <c\6 d\3>16 <e\6 a\2> |
 <a\5 c\4 d\3 c\2>8 <d\3 c\2>16 a\5 <e\6 c\4 a\2>8 <e\5 c\3 c\2> |
 <b\5 a\3 c\2> <b\4 a\3 a\2> <d\5 c\3 e\2> <e\5 d\4 c\3 c\2> <c\6 e\5 e\4
d\3 c\2>
 <d\3 c\2>16 c\6 <c\5 a\4 a\2>8 <a\3 a\2>16 a\5  d8\6 a\2
 <c\6 e\5>32 f\3 e\3 c\3 e16\3 c\6 |
 <c\5 a\3 a\2>4 r8 <e\6 b\4 b\2>8 q8. a16\2 <e\5 d\3>8 c16\3 c\5 |
 a\5 c\3 a8\3 <e\6 e\5 c\3> d16\5 e\6 |
 <e\5 d\4 c\3>4 <e\5 c\3 c\2>8 <c\6 e\5 e\4 e\3> |
 <c\5 b\4 a\2> c\4 <b\5 c\2>16 c\4 <c\5 b\4> a\2 |
 <e\5 d\4> d\3 e\4 a\2 <e\5 e\4 c\3 c\2>8 d16\4 a\2 |
 <c\6 a\3 d\2>8 c16\2 c\1 e\5 a\1 <e\6 a\2> <a\5 c\4 d\3 c\2>16. d32\2
 <a\6 c\3 a\2 a\1>16 <c\6 d\2>32 c\2 d16\3 |
 e\4 c\6 <a\6 c\3>8 <d\7 e\4 d\3>16. d32\3 <c\3 a\2>16 a\3 |
 <c\7 e\6 e\5 d\4 c\3 c\2>8. c16\2 q4 |
}

\score {
 \new StaffGroup
 <<
   \new Staff \with { \clef "treble_8"
                      \omit StringNumber
                    } \content
   \new TabStaff \with { stringTunings = \lute-tuning
                         tablatureFormat = #fret-letter-tablature-format
                         fretLabels = \markuplist \fontsize #2 \lower #0.2
                         { 𝖆 𝖇 𝖈 𝖉 𝖊 𝖋 𝖌 𝖍 𝖎 𝖐 𝖑 𝖒 𝖓 𝖔 𝖕 }
                       } \content

 \layout {}
}

%{
\score {
 \new TabStaff \with { stringTunings = \lute-tuning } \content
 \midi {}
}
%}


Perso, je n'ai pas de compétence en Scheme, je code mes tablatures par les
notes de musique.
Mais c'est vrai que de tant à autres, j'aimerais bien voire la musique qui
se cache derrière des accords rares que je ne maîtrise pas sans avoir à me
croiser les neurones.

À la votre…
Éric





--
Sent from: http://lilypond-french-users.1298960.n2.nabble.com/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]