Une image dessinée au point de croix peut-elle être interprétée comme une mélodie ? Une solution serait celle exposée dans cet article.
Considérons un fichier lilypond(1)minimal dont le contenu est :
\version "2.19"
\relative c'
{
\key a \major
%lyxy
r2 cis4 e4 e2 a4 a4 a2. fis4 e1
r2 a4 a4 a4 a4 a4 a4 cis,2 e2 e1
r2 cis4 d4 e2 a4 b4
%lyxy
}
Nous allons lire les notes comprises entre les deux balises %lyxy
et les interpréter comme une image au point de croix.
La méthode sera la suivante :
Une note au format lilypond est transformée en un couple (d, h) où d est la durée de la note et h sa hauteur. Ils seront les coordonnées d'un point de croix.
La durée est mesurée sur l'axe des abscisses.
L'unité de durée est la double croche. Une croche vaudra 2, une noire 4, etc. Une noire pointée vaudra 4+2=6.
Un coefficient multiplicateur peut être appliqué. Avec un coefficient 2, la double croche aura une durée 2×1=2, la croche 2×2=4, etc.
La hauteur h sera interprétée comme un nombre entier porté sur l'axe des ordonnées. Zéro est la valeur attribuée au La (juste en dessous du do central). En montant la gamme, on aura Si ↦ 3, Do ↦ 5, Ré ↦ 7, etc. Sib ↦ 1, Do# ↦ 6, etc.
Les silences auront une hauteur fictive hors de portée (255). Ils ne sont représentés par aucun signe. Il feront avancer le curseur de la valeur de leur durée.
Les premières mesures forment des points de croix en rouge. La largeur du canevas du code source fourni est prévue pour contenir l'équivalent de 8 noires (deux mesures de 4/4). A la fin de cette largeur de page, le curseur revient à l'origine et une nouvelle couleur est utilisée pour dessiner les points de croix.
Le bout de code lilypond ci-dessus produit la partition :
Et l'image au point de croix obtenue est :
Ce n'est pas de l'art, c'est du point de croix.
Voici le code source des fichiers lyxy.h et lyxy.cc. Il admet un paraètre qui est le nom du fichier lilypond sans l'extentension ".ly".
La syntaxe de la fonction lyxy(const char *s, int&x, int&y)
est lyxy word, x, y)
où word
est le mot lilypond à traiter et x
et y
sont respectivement la durée et la hauteur à calculer.
Elle utilise le module d'expressions régulières regex
. Elle transforme une note au foramt lilyopnd en un couple (x, y)
(exemple cis4
↦ (8, 17)
). Elle se conforme à la méthode de lilypond qui place une note avec au plus une quarte de la précédente. Voir hauteur des notes du manuel de lilypond.
Quand à lyxy(string name)
elle ne fait que les entrée sorties.
Aucune image, aucun dessin n'est utilisé. Tout est fait en C avec la mervilleuse librairie GD (voir article suivant).
Pour commencer il faut programmer le dessin d'une toile (toile aïda). On doit y voir le fil de tarme et le fil de chaîne s'entrecroiser, et les petits trous où piquer.
Ensuite il faut faire une procédure pour marquer une croix.
Enfin il faut lire le fichier produit par lyxy
et faire les croix.
Codes source en C corss-stitch.h et corss-stitch.c
Dans le premier on peut modifier certaines constantes qui fixent les paramètres du dessin (largeur, hauteur, pas, marge, échelle, couleurs de l'aïda, couleurs des points de croix).
Voici en exmple le tableau au point de croix de la mélodie de la chanson Ballade des dames du temps de jadis.
Fichier source lilypond
\version "2.19"
% mélodie
melodie = \relative c'
{
\key c \major
\time 3/4
%\autoBeamOff
r4 r4 c8 e8 \bar ".|" g4 e8 [ c8 ] e8 g8 | c2 b8 c8 |
g4 d8 [d] g f | e4 c c8 e | g4 e8 [c] e g |
c2 b8 c8 | g4 d8 [d] g f | e4 c4. c8 |
a' [a] a [b] c d | c4 \( a8 \) [a] b c | b4 \( g8 \) [g] a b |
a2 a8 g | f4 f8 [d] e f | g4 \( c \) b8 c8 |
g4 \( d8 \) [d] g f | e2 a8 g8 | f4 f8 [g] a b |
c4 \( e \) c8 a | g4 g8 [e] f d | c2. \bar "|."
} % mélodie
\score {
\melodie
\layout {}
}
Partition produite par lilypond :
Tableau au point de croix :
Lilypond est un excellent logiciel libre de notation musicale, qui permet d'éditer des partitions musicales de très grande qualité.