Subject: LilyJAZZ : une police d'écriture musicale Jazz pour LilyPond

From: Xavier Scheuer <[email-masked]>
Date: Mon, 18 Mar 2013 23:15:17 +0100

Bonjour à tous,

Il est à présent possible de donner une « touche jazz » à vos
partitions, en utilisant une police d'écriture musicale
pseudo-manuscrite (développement toujours en cours).
Cf. l'image résultante ci-jointe.

Je me suis dit que l'info pouvait intéresser les utilisateurs
francophones de LilyPond, c'est pourquoi j'ai traduit le message de
Torsten ci-dessous (traduction approximative, soyez indulgent !) avec
les fichiers joints correspondants.

Je vous conseille d'utiliser de préférence la liste internationale pour
vos questions et retours de tests éventuels.

Fil de discussion sur la liste internationale (message de Torsten) :
http://lists.gnu.org/archive/html/lilypond-user/2013-03/msg00647.html
Message original sur le "Deutsches Lilypond Forum"
http://www.lilypondforum.de/index.php?topic=1218.0

Traduction du message de Torsten :

%%%%%%%%%%%%%%%%
---------- Forwarded message ----------
From: "Torsten Hämmerle" <[email-masked]>
Date: 14 March 2013 11:36
Subject: Aw: Re: Pseudo-handwritten font
To: [email-masked]
%%%%%%%%%%%%%%%%

Bonjour à tous,

Vous trouverez ci-joint un fichier ZIP contenant les versions actuelles
(quoique pas encore terminées) des polices musicale et textuelle
LilyJAZZ, plus le fichier correspondant LilyJAZZ.ily à inclure.

Il y a également un fichier PDF d'exemple montrant ce qu'il est déjà
possible de faire (les notes d'ornement/acciaccaturas/appoggiaturas
manquent encore à l'appel), disponible aussi pour ceux qui voudraient
voir le résultat sans devoir installer quoi que ce soit.

De toute façon la publication de l'ensemble LilyJAZZ devrait être
ouverte et libre (comme LilyPond), donc j'ai d'abord dû créer mes
propres polices pour être indépendant de celles commerciales.

C'est encore (pour le moment) un version préliminaire, il manque encore
beaucoup de choses (prolongations de trille, barres de reprises,
silences multimesures, …), mais vous pouvez utiliser les clefs, armures,
métriques, altérations, têtes de note et hampes, articulations, nuances.
Et il y a une police de texte LilyJAZZ incluse.  La plupart des
caractères devraient s'y trouver (y compris les caractères accentués
pour les textes allemands/français/italiens etc.).
Je sais qu'une police pour les accords est indispensable pour
pratiquement toute application de jazz, les "lead sheets" en
particulier, mais je vais la garder séparée d'abord pour plusieurs
raisons (j'y reviendrai plus tard).
[NdT : vous pouvez utiliser la police "lilyjazzchord" de Jean-Pierre]
https://sites.google.com/site/jpgzic/home

CELA DIT, même si tout ceci pourrait être un tâche assez ambitieuse,
je me suis lancé pour voir ce qui est possible et comment LilyPond se
comporte dans un contexte jazz.  Heureusement, les résultats sont assez
encourageants.  :)

Donc finalement, qu'ai-je fait et pourquoi ?
L'obstacle principal est la manière rigide dont LilyPond gère ses
polices musicales internes.  J'ai délibérément décidé de m'en tenir à
une police "ordinaire" OTF/TTF d'abord pour apprendre comment utiliser
les fontes externes (qui sait ce qu'on peut en tirer de bon) et la phase
metafont de ma vie date du millénaire dernier.

Pendant ce temps, la plupart des caractères ont été redessinés
manuellement à partir de scans des polices [de jazz] bien connues Sigler
[dans] FontForge, quelques-uns ont été créés en utilisant la
fonctionnalité de tracing de FontForge.  Cela devrait cependant être
suffisant pour expérimenter et se faire une impression.

Pour assortir l'apparence générale de la police jazz j'ai légèrement
(peut-être trop…) augmenté l'épaisseur des hampe, ligature, liaison de
prolongation et de phrasé, ainsi que barre de mesure.
Rien d'extravagant.

Pour le moment le "LilyJAZZ mode" peut être activé en utilisant la
commande \jazzOn et (presque) désactivé en utilisant \jazzOff.
Cela s'est avéré très utile pour comparer/vérifier l'espacement par
rapport au standard.

Quelques données techniques pour ceux intéressés dans le codage Scheme.
Malheureusement, je suis assez nouveau en Scheme, mais on peut
apprendre beaucoup de code par-ci par-là.

La liste "jazz-map" contient les informations de cartographie (mapping)
du nom du glyphe au numéro de caractère unicode, de sorte que n'importe
quelle police externe puisse être accédée du moment qu'elle supporte
Unicode :

%***********************************************************************
% MAPPING ALISTS / LOOKUP TABLES
%***********************************************************************

% MAPPING ALIST: GLYPH NAME TO UNICODE CHAR NUMBER =====================
#(define jazz-map '(
    ("noteheads.s0jazz" . #xe191)
    ("noteheads.s1jazz" . #xe192)
    ("noteheads.s2jazz" . #xe193)
    ("noteheads.s0slashjazz" . #xe19c)
    ("noteheads.s1slashjazz" . #xe19d)
    ("noteheads.s2slashjazz" . #xe19e)
    ("noteheads.s2crossjazz" . #xe1a1)
    ("flags.u3jazz" . #xe21c)
    ("flags.u4jazz" . #xe21d)

[…]

Comme remplacement jazz pour \musicglyph, il y a maintenant une
commande similaire \jazzglyph qui peut être utilisée exactement de la
même façon, retournant le glyphe de la fonte jazz correspondant.
Exemple : \musicglyph #"script.ufermata" devient
\jazzglyph #"scripts.ufermatajazz".

%***********************************************************************
%  JAZZ GLYPH ACCESS
%***********************************************************************

% JAZZGLYPH: REPLACEMENT FOR MUSICGLYPH ================================
#(define-markup-command (jazzglyph layout props glyphname) (string?)
  "musicglyph replacemet for jazz (i. e. non-Feta) characters"
    (let* ((charnum (cdr (assoc glyphname  jazz-map))))
    (interpret-markup layout props
      (markup (#:fontsize 5 #:override '(font-name . "LilyJAZZ")
#:char charnum)))))

[…]

Après avoir établi cette fonctionnalité basique, nous pouvons
réellement commencer à changer divers stencils.
Voyons les clefs.  La nouvelle fonction stencil de la clef jazz ajoute
le suffixe "jazz" au nom de glyphe standard et recherche la table de
référence de la cartographie jazz (jazz-map lookup table).  S'il n'y a
pas d'entrée, la fonction standard ly:clef::print sera utilisée.

%***********************************************************************
%  JAZZ CLEFS
%***********************************************************************

#(define (jazz-clef grob)
  "jazz clef stencil"
  (let* ((glyphname (string-append (ly:grob-property grob 'glyph-name)
"jazz")))
    (if (pair? (assoc glyphname jazz-map))
        (grob-interpret-markup grob (markup #:jazzglyph glyphname))
        (ly:clef::print grob))))

Pour le moment j'ai juste implémenté 3 différentes têtes de note :
ronde, blanche et noire, selon la propriété duration-log.  Les attaches
de hampe ont été légèrement décalées pour accommoder la "pente" plus
raide des têtes de note jazz et l'épaisseur plus grande de la hampe.

%***********************************************************************
% NOTE HEADS
%***********************************************************************

#(define (jazz-notehead grob)
  "stencil: jazz noteheads"
  (let* ((log (ly:grob-property grob 'duration-log)))
     (set! (ly:grob-property grob 'stem-attachment) '(1.0 . 0.35))
     (grob-interpret-markup grob
      (cond
         ((<= log 0) (markup #:jazzglyph "noteheads.s0jazz"))
         ((<= log 1) (markup #:jazzglyph "noteheads.s1jazz"))
     (else  (markup #:jazzglyph "noteheads.s2jazz"))))))

[…]

Ces nouvelles fonctions stencil peuvent maintenant être assignées,
par exemple

  \override Staff.Clef #'stencil = #jazz-clef

  \override Staff.NoteHead #'stencil = #jazz-notehead
  \override Staff.NoteHead #'Y-extent = \makeUnpurePureContainer

L'utilisation de pure-unpure-containers est extrêmement importante dans
certains cas, car autrement l'espacement serait n'importe quoi.

C'est en gros la manière dont LilyJAZZ fonctionne, le codage de la
première ligne dans le PDF de démonstration se présente ainsi :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.16.1"

\include "LilyJAZZ.ily"

\paper { indent = #10 }

\relative c' {
  \jazzOn
  \set Staff.instrumentName = "Trumpet"
  \clef treble
  \key es \major
  \time 4/4
  \tempo "Medium Swing"
   r8 es4->\mf f8-. g--  as4-^ bes8-^  |
   r4. b8\trill\fff ~ b2 |
   bes?16-> r as4\mp r8 g4( \times 2/3 { es8 f e\pp ~ } |
   e1) \fermata |
   \bar "||"
   \mark \markup \jazzglyph #"scripts.varsegnojazz"
   \clef bass
   \time 5/4
   \key g \major
   geses,4_"Various Accidentals" ges g gis gisis |
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Comme vous pouvez le voir, à part la déclaration \include et la
commande \jazzOn, cela reste de la saisie lilypond standard sans plein
de "commande jazz" spéciales et ajustements.  Le second exemple dans le
PDF est aussi une sortie Lilypond standard sans aucune corrections
manuelles.
Bien sûr, il y a encore des soucis d'espacement, mais après tout les
neumes vaticana ou les ligatures Gregoriennes modernes ont leurs
problèmes, elles aussi, donc nous sommes en bonne compagnie ici. ;-)

Et oui, je me suis retenu pour le moment d'utiliser "pango-font-tree"
pour le moment, juste pour garder la trace de ce qui pourrait encore
manquer.

All the best,
Torsten

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

Cordialement,
Xavier

-- 
Xavier Scheuer <[email-masked]>

---

From: Denis Bitouzé <[email-masked]>
Date: Tue, 19 Mar 2013 17:37:03 +0100

Le lundi 18/03/13 à 23h15,

> Bonjour à tous,

Bonjour,

> les fichiers joints correspondants.
 
Merci beaucoup, Xavier !

Je m'en vais de ce pas signaler un petit défaut : l'indication de tempo
fonctionne sous la forme par exemple :

  \tempo "Medium Swing"

mais pas la forme par exemple :

  \tempo 4=100
-- 
Denis