Subject: MSDL (Music Score Description Language

From: Jacques Menu <[email-masked]>
Date: Mon, 15 Mar 2021 23:06:09 +0100

Bonsoir tutti,

MSDL est un langage qui se veut proche des musicien-ne-s, tout en offrant des possibilités pour les arrangeurs dans l’esprit de ce que font Edition Engraver, arranger.ily et Abjad. 
L’idée est de pouvoir réutiliser un même fragment de musique en différents endroit en le manipulant, le transposant ou adaptant la dynamique et l’accentuation pour les besoins de l'orchestration, par exemple.

MSDL est d’un peu plus haut niveau que LilyPond et de franchement plus haut niveau que MusicXML.

Il peut être converti par un compilateur en du code LilyPond, musique braille, MusicXML et Guido. La création de fichiers MIDI est à l’agenda, mais pas pour tout de suite.

La suite de ce message montre les choix de conception et des exemples. La version 1.001 du compilateur, baptisé msdl au niveau de la ligne de commande, vient d’être mise à disposition sur le dépôt de la librairie libmusicxml2 de Grame à Lyon.

Pour installer la librairie sur Linux, Windows ou Mac OS X, il faut avoir un compilateur C++11 et cmake, et prendre la branche lilypond sur le dépôt de Grame:

	git clone -b lilypond https://github.com/grame-cncm/libmusicxml.git libmusicxml-git
	cd libmusicxml-git/build
	make

Les executables se retrouvent dans build/bin. 
Les mêmes fonctionalités peuvent être utilisées sans ligne de commande, comme depuis un site web.

Les mots-clés du langage comme pitches/hauteurs sont réservés, comme dans les langages de programmation, et ne sont pas introduits par un ‘\’ comme en LilyPond.

Le langage est multilingue pour ce qui est des mots-clés, et on peut utiliser le compilateur pour les traduire d’une langue dans une autre. Pour l’instant, il y a le français et l’anglais, mais il est facile d’en ajouter d’autres si l’on dispose de quelqu’un pour faire la traduction.

La syntaxe pour fournir les notes et autres éléments est très proche de celle de LilyPond, avec une différence majeure quant à la barre verticale :

	- elle indique non pas la fin d’une mesure, mais le fait que la musique qui suit va dans la mesure indiquée, comme dans |2 c2.. d’’8, où ces deux notes vont dans la mesure 2;

	- il est ainsi possible de ‘déposer’ de la musique dans la partition, comme un peintre met de la couleur par touches ou repasse où il en a déjà déposé;

	- cela permet de rentrer la musique non-linéairement, donc pas strictement de gauche à droite dans des voix.

	- c’est pour cette raison que staff/portée et voice/voix sont fondues en une seule notion music/musique. Il peut y avoir plusieurs couches dedans, selon les besoins du compositeur. 

Cet emploi de ‘|’ est une suggestion de Jean Abou-Samra, que je trouve excellente. 
L’exemple joint UnPetitAir.msdl, qui lui est dû, montre comment on peut créer une partition de piano avec cette approche.

Suite à des échanges avec Jean, il y aura prochainement :

	|3 c1      % mesure 3
	|-2 d2 e2  % 2 plus à gauche, donc la 1
	|+1 g1     % 1 plus à droite, donc la 2

Je vais aussi ajouter le mode de saisie des octaves :

	octaves absolute/absolues      % par défaut, le seul actuellement
	octaves relative/relatives
	octaves fixed/fixees d’

Comme je n’en suis qu’au début, beaucoup de choses sont encore ouvertes dans MSDL. 
Je m’adresse à vous pour connaître vos idées sur ce qu’il serait bien d’avoir à disposition dans un tel langage.

Je joins les fichiers produits par les commandes suivante, ainsi que des vues du résultat :

	msdl -lilypond HelloWorld.msdl -global-staff-size 40 -jianpu -o HelloWorld_JIANPU.ly

	msdl -musicxml HelloWorld.msdl -auto-output-file-name 

Merci de votre aide!

JM

==========================================================================

Vue de HelloWorld.xml dans MuseScore :

==========================================================================

Premier exemple MSDL :

%{
  The unavoidable HelloWorld score
%}

% the language used for the pitches
% -----------------------------------------------

pitches english            % default is english

% is there an anacrusis?
% -----------------------------------------------

anacrusis                 % measure numbers start at 0

% the structure
% -----------------------------------------------

% score helloWorld = "Hello World in MSPL" {

  music {
    |1 c2.. d''8
    |||                   % final bar
  }

% } % helloWorld

==========================================================================

Le langage est multilingue pour ce qui est des mots-clés :

%{
  Un exemple MSDL en français
%}

% l'identification
% -----------------------------------------------

titre       "MSDL en français"
compositeur "A. N. Onyme"

% la langue pour les hauteurs de notes
% -----------------------------------------------

hauteurs francais  % par défaut: english

% la partition
% -----------------------------------------------

partition bonjourToutLeMonde = "Bonjour tout le monde en MSDL" {

  musique {
    |1 do2.. re''8        % à placer dans la mesure 1
    |||                   % double barre finale
  }

} % bonjourToutLeMonde

==========================================================================