Sommaire
Introduction
Pour créer des partitions musicales, il existe un excellent logiciel appelé
LilyPond
qui, en gros, est à
MuseScore
ou
Finale
ce que
TeX
est à
LibreOffice Writer
ou
Microsoft Word
.
LilyPond
prend en entrée un fichier texte que vous pouvez aisément manipuler à l'aide de votre éditeur de texte favori. Il existe néanmoins
Frescobaldi
qui facilite l'édition de fichiers
LilyPond
au point de pouvoir être considéré,
en paraphrasant
, comme une sorte d'
EDI
pour
Lilypond
.
On peut également utiliser un logiciel comme
Denemo
ou
Rosegarden
pour saisir de la musique via une interface graphique ou un périphérique d'entrée
MIDI
, voire une entrée audio, et générer le fichier
LilyPond
correspondant.
Jusqu'à présent, j'utilisais un petit utilitaire de ma création dans lequel on saisit, dans un premier temps, des notes avec un clavier MIDI pour, dans un second temps, leur affecter une durée, comme détaillé
ici-même
.
Cependant, son interface étant textuelle, cet utilitaire s’avérait assez peu pratique par certains aspects. J'ai donc essayé
Denemo
, avec lequel on est censé pouvoir faire la même chose avec une interface graphique. Ça doit être faisable, mais je n'ai pas trouvé comment le faire facilement. Ajoutez à cela une certaine propension du logiciel au plantage, et vous comprendrez que je n'ai pas insisté.
Donc, j'ai repris mon petit utilitaire, et je lui ai ajouté une interface graphique, ce qui donne ça :
Il est loin d'être complet (voir la section
Améliorations possibles
ci-dessous) mais il est néanmoins suffisamment fonctionnel pour un usage basique.
Installation
NOTA
: pour essayer le logiciel sans avoir à l'installer, c'est par ici (bouton
Run
, un peu de patience, puis clic sur l'URL) :
https://q37.info/s/tpp7ckkv
.
Pour compiler ce logiciel, il faut :
-
la commande
GNU
make
;
-
un compilateur
C++
;
-
la bibliothèque
ALSA
avec ses fichiers de développement (
libasound-dev
).
Pour la compilation proprement dite :
Pour lancer l'application, se placer dans le répertoire
msfgqxdh
, puis lancer :
<chemin-vers>/faasq ./msfgqxdh
. En supposant que les deux dépôts ci-dessus soient dans le même répertoire, en étant placé dans le répertoire du dépôt
msfgqxdh
, cela donne :
../faasq/faasq ./msfgqxdh
.
Pour que les scripts fournis avec le logiciel fonctionnent (voir section dédiée plus bas), il faut que
lilypond
et
xsltproc
soient installés et accessible via le
PATH
.
Si vous voulez déplacer les exécutables, il faut veiller à ce que les fichiers suivants soient dans le même répertoire que l'exécutable concernés :
-
pour
faasq
:
faasq.xcfg
et
faasq.xlcl
;
-
pour
libmsfgqxdh.so
:
msfgqxdh.xcfg
,
msfgqxdh.xlcl
et
xmld2ly.xsl
.
Interface
L'interface est découpée en zones dont voici la description :
-
Midi in
(
Parameters/Devices/In
) :
-
les dispositifs d'entrée
MIDI
connectés au système apparaissent ici, le bouton
Grab
permet d'activer celui sélectionné,
-
le bouton
Grab
permet également à la session en cours d'utilisation de capturer les évènements
MIDI
issus du périphérique ;
-
Key
(
Parameters/Signature/Key
) : le nombre de dièses ou de bémols de l'
arm(at)ure
;
-
Time
(
Parameters/Signature/Time
) : métrique de la
mesure
:
-
Score
/
Preview
: aperçu du fragment musical ;
-
Score
/
Duration/Rest
: permet diverses modifications de la note sélectionnée (on peut également utiliser des raccourcis clavier) ;
-
Score
/
Width
(
Parameters/Width
) : nombre de notes par portée de l'aperçu ci-dessus ;
-
Score
/(dernière zone) : permet de déplacer le curseur (on peut aussi cliquer sur une note), et d'effacer une ou l'ensemble des notes ;
-
Audio
: permet de piloter le lecteur audio ;
-
Keyboard
: clavier virtuel, qui peut être caché ; s'il y a un dispositif d'entrée MIDI connecté au système, ce clavier est caché par défaut ;
-
Scripts
(
Definitions/Scripts/Script
) : permet de lancer les différents scripts qui sont définis dans la configuration (voir section suivante), et dont le résultat est affiché dans
Output
, sauf si
Embedded
est décoché, auquel cas ce résultat s'affiche dans une nouvelle page.
Les scripts
Les boutons de la zone
Scripts
sont générés à partir de la section
Definitions/Scripts
du fichier de configuration
msfgqxdh.xcfg
. Voilà le contenu de cette section correspondant à l'illustration ci-dessus :
<Scripts>
<Script
id="_ABC"
Label="ABC (debug)"
Mime="text/plain"
># Built-in script. 'id' value of '_ABC' is reserved.</Script>
<Script
id="text"
Label="XML (as text)"
Mime="text/plain"
>while read x ; do echo $x ; done | base64</Script>
<Script
id="xml"
Label="XML"
Mime="text/xml"
>while read x ; do echo $x ; done | base64</Script>
<Script
id="xsl"
Label="XSL"
Mime="text/xml"
>base64 ./xmld2ly.xsl</Script>
<Script
id="ly"
Label=".ly"
Mime="text/plain"
>xsltproc "./xmld2ly.xsl" - | base64</Script>
<Script
id="png"
Label="PNG"
Mime="image/png"
>xsltproc "./xmld2ly.xsl" - | lilypond --png -o msfgqxdh.tmp - ; base64 ./msfgqxdh.tmp.png ; rm msfgqxdh.tmp*</Script>
<Script
id="pdf"
Label="PDF"
Mime="application/pdf"
>xsltproc "./xmld2ly.xsl" - | lilypond -o msfgqxdh.tmp - ; base64 ./msfgqxdh.tmp.pdf ; rm msfgqxdh.tmp*</Script>
</Scripts>
Le contenu de la section
Output
correspondant à l'illustration ci-dessus a été généré avec le bouton
PDF
.
Une fois satisfait par le résultat, on affichera les notes au format
Lilypond
à l'aide du bouton
.ly
, que l'on pourra alors copier/coller.
La balise
Script
contient le script à exécuter, et a pour attributs :
-
id
, dont la valeur est libre, mais qui doit être unique ;
-
Label
, dont la valeur sera utilisée comme libellé du bouton ;
-
Mime
, dont la valeur doit correspondre au
type
MIME
du contenu généré par le script.
Les scripts reçoivent sur l'entrée standard un flux XML décrivant les notes saisies, et doivent générer sur la sortie standard un contenu en
base64
, d'où la présence de la commande homonyme dans les scripts.
Améliorations possibles
Musique
-
Gestion des
tuplets
(duolet, triolet…) ;
-
gestion des
accords
;
-
gestion des
anacrouses
;
-
choix de la figure de note par défaut autre que la noire ;
-
choix d'une
clef
autre que celle de sol.
Paramètres
Les valeurs par défaut de certains composants de l'interface graphique peuvent être définis dans la section
Parameters
du fichier de configuration
msfgqxdh.xcfg
. Les balises correspondantes sont précisées entre parenthèses dans la section
Interface
ci-dessus.
Il faudrait rendre cela possible pour d'autres composants de l'interface.
En outre, il existe un mécanisme qui permet de surcharger certaines valeurs de la configuration avec des arguments de la ligne de commande (voir
https://q37.info/computing/epeios/configuration
). Ce mécanisme ne fonctionne actuellement pour la configuration d'une bibliothèque dynamique.
Fichier de configuration
Le procédure de publication du logiciel stocke actuellement la configuration dans un seul fichier (
msfgqxdh.xcfg
), mais cette dernière est en réalité constituée de plusieurs fichiers, qui contiennent des instructions qui sont traitées par un
préprocesseur XML
. Ainsi, voici la section
Scripts
ci-dessus avant son passage par le préprocesseur :
<Scripts>
<xpp:bloc>
<xpp:ifeq select="prod" value="no">
<xpp:define name="xmld2ly">
<xpp:bloc>/home/csimon/hg/epeios/stable/xmld2ly.xsl</xpp:bloc>
</xpp:define>
</xpp:ifeq>
<xpp:ifeq select="prod" value="yes">
<xpp:define name="xmld2ly">
<xpp:bloc>./xmld2ly.xsl</xpp:bloc>
</xpp:define>
</xpp:ifeq>
<xpp:define name="LilyCommon">
<xpp:bloc>
<xpp:bloc>xsltproc "</xpp:bloc>
<xpp:expand select="xmld2ly"/>
<xpp:bloc>" - | lilypond</xpp:bloc>
</xpp:bloc>
</xpp:define>
<xpp:define name="Base">
<xpp:bloc>while read x ; do echo $x ; done | base64</xpp:bloc>
</xpp:define>
</xpp:bloc>
<Script id="_ABC" Label="ABC (debug)" Mime="text/plain">
<xpp:bloc># Built-in script. 'id' value of '_ABC' is reserved.</xpp:bloc>
</Script>
<Script id="text" Label="XML (as text)" Mime="text/plain">
<xpp:expand select="Base"/>
</Script>
<Script id="xml" Label="XML" Mime="text/xml">
<xpp:expand select="Base"/>
</Script>
<Script id="xsl" Label="XSL" Mime="text/xml">
<xpp:bloc>base64 </xpp:bloc>
<xpp:expand select="xmld2ly"/>
</Script>
<Script id="ly" Label=".ly" Mime="text/plain">
<xpp:bloc>xsltproc "</xpp:bloc>
<xpp:expand select="xmld2ly"/>
<xpp:bloc>" - | base64</xpp:bloc>
</Script>
<Script id="png" Label="PNG" Mime="image/png">
<xpp:expand select="LilyCommon"/>
<xpp:bloc> --png -o msfgqxdh.tmp - ; base64 ./msfgqxdh.tmp.png ; rm msfgqxdh.tmp*</xpp:bloc>
</Script>
<Script id="pdf" Label="PDF" Mime="application/pdf">
<xpp:expand select="LilyCommon"/>
<xpp:bloc> -o msfgqxdh.tmp - ; base64 ./msfgqxdh.tmp.pdf ; rm msfgqxdh.tmp*</xpp:bloc>
</Script>
</Scripts>
Il faudrait donc améliorer la procédure de déploiement pour conserver le découpage en plusieurs fichiers, ainsi que les instructions préprocesseurs utiles (possibilité de définir des scripts différents en fonction de la plateforme d'exécution, par exemple).
Astuce
L'encombrement et/ou la disposition du périphérique d'entrée MIDI sont parfois tels qu'il n'est pas facile d'utiliser ce périphérique et d'avoir en même temps accès à l'écran et/ou au clavier de l'ordinateur sur lequel le périphérique est connecté. Dans ce cas, vous pouvez avoir accès à l'interface du logiciel à partir d'un smartphone ou d'une tablette en scannant le
code QR
généré par le logiciel. Pour un fonctionnement correct, il est alors nécessaire de cliquer sur le bouton
Grab
.
Commentaires :
voir le flux Atom
ouvrir dans le navigateur