MSDL (Music Score Description Language

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 GitHub - grame-cncm/libmusicxml: A C/C++ library to support the MusicXML format. 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

HelloWorld_JIANPU.ly (1.27 KB)

UnPetitAir.msdl (1.24 KB)

···

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

Vue de HelloWorld.xml dans MuseScore :

Bonsoir tutti,

Désolé, mon message précédent est parti par erreur trop tôt.

Le bon suit bientôt!

JM

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. C’est Dominique Fober qui a conçu la librairie et qui en assure la maintenance.

Pour installer libmusicxml2 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, dont xmlly, xml2brl, xml2xml, xml2gmn et msdl se retrouvent dans build/bin.
Les mêmes fonctionalités peuvent être utilisées sans ligne de commande, comme depuis un site web par exemple.

Les options du compilateur MSDL varient selon l’option de sortie choisie :

menu@macbookprojm: ~/libmusicxml-git/files/msdl > msdl -help-generate-output
--- Help for subgroup "Generated output" in group "Generated output group" ---
Generated output group (-hgc-group, -help-generate-output-group):

HelloWorld.msdl (513 Bytes)

BonjourToutLeMonde.msdl (582 Bytes)

UnPetitAir.msdl (1.24 KB)

HelloWorld.gmn (156 Bytes)

HelloWorld_JIANPU.ly (1.27 KB)

HelloWorld.xml (1.5 KB)

HelloWorld_UTF8Debug.brf (53 Bytes)

···

Generated output (-hgo, -help-generate-output):
-gen, -generate GENERATED_OUTPUT_KIND
Generate GENERATED_OUTPUT_KIND code to the output.
The 5 generated output kinds available are:
braille, guido, lilypond, midi and musicxml.
The default is 'LilyPond output'.
-guido
Generate Guido output
-lilypond
Generate LilyPond output
-braille
Generate braille music output
-musicxml
Generate MusicXML output

msdl bénéficie des même options, hormis celles concernant MusicXML, que xmlly, xml2brl, xml2xml et xml2gmn, respectivement.

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 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 des mots-clés.

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 la musique;

  • 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.

Pour l’instant, les numéros de mesures sont ignorés, et elles sont toutes placées à la suite l’une de l’autre dans la musique.

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, directement repris de LilyPond :

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

Je joins les fichiers produits par les commandes suivantes, ainsi que des vues des résultats :

msdl -lilypond BonjourToutLeMonde.msdl -msdl-keywords-input-language francais -auto-output-file-name

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

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

msdl -braille HelloWorld.msdl -auto-output-file-name -braille-output-kind utf8d -use-encoding-in-file-name

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

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.

Il y a par exemple la manière de décider dans music/musique l’ordre des voix (qu’il y a bel et bien derrière le rideau), qui n’est pas encore claire. Et c'’est important bien sûr pour l'orientation des hampes de notes vers le haut ou vers le bas.
Et aussi comment spécifier les paroles pour les placer sur la musique, ou comment indiquer sur quelle-s note-s appliquer la dynamique ou l'accentuation.

Merci de votre aide!

JM

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

Premier exemple MSDL avec les mots-clés en anglais :

%{
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

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

Vue de BonjourToutLeMonde.ly dans Frescobaldi :