lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Export from LilyPond to MusicXML


From: Thomas Morley
Subject: Re: Export from LilyPond to MusicXML
Date: Tue, 28 Sep 2021 00:53:16 +0200

Hi Jacques,

Am Mo., 27. Sept. 2021 um 00:48 Uhr schrieb Jacques Menu
<imj-muzhic@bluewin.ch>:
>
> Hello folks,
>
> The recent posts on this subject show there is interest in the matter. Sorry 
> for the length of this one...

Tbh, most of the mor detailed stuff is way over my head..
>
> My work was initially homed by Grame’s libmusicxml2 library as an example of 
> what it could be used for, in the lilypond branch at 
> https://github.com/grame-cncm/libmusicxml/tree/lilypond.
>
> Dom Fober, the author and maintainer of libmusicxml2, and I decided some time 
> ago to separate things for practical reasons, and I now push to the GitHub 
> repository I created at https://github.com/jacques-menu/musicformats.

Good to know.

> I’m currenly finalizing version 1.0.0, which explains why the test and master 
> branches are not up to date - only the dev branch is currently.
>
> The musicformats library is structured along the lines shown at page 16 in 
> https://github.com/jacques-menu/musicformats/blob/dev/doc/maintainersGuideToMusicFormats/maintainersGuideToMusicformats.pdf
>  (the users’s guide is not yet ‘usable’, sorry).
>
> The central component of musicformats is MSR (Music Score Representation), 
> from which various formats can be obtained.
>
> In this picture, we see that we could create MusicXML output from within the 
> LilyPond implementation going along the LilyPond - LPSR - MSR - MXSR  - 
> MusicMXL path. The missing part would be the creation of an LPSR (LilyPond 
> Score Representation), the others already exist.
>
> As an example, the LPSR representation and LilyPond output produced by:
>
> xml2ly basic/HelloWorld.xml -display-lpsr > LPSR_contents.txt 2>&1
>
> are in the attached LPSR_contents.txt file.
>
> The resulting score is:
>
>
> Jean and I have had discussions as to how the export to MusicXML could be 
> tackled on the LilyPond side, but nothing concrete yet. Some of the 
> information needed is readily accessible inside LilyPond, but grabbing the 
> remaining part is not easy.
>
> The musicformats repository contains examples using the library to create 
> scores in C++ applications, among them:
>
> jacquesmenu@macmini: ~/musicformats-git-dev/files/musicxml > 
> Mikrokosmos3Wandering -a
> What Mikrokosmos3Wandering does:
>
>     This multi-pass generator creates a textual representation
>     of Zoltán Kodály's Mikrokosmos III Wandering score.
>     It performs various passes depending on the output generated.
>
>     Other passes are performed according to the options, such as
>     displaying views of the internal data or printing a summary of the score.
>
>     The activity log and warning/error messages go to standard error.
>
> jacquesmenu@macmini: ~/musicformats-git-dev/files/musicxml > 
> Mikrokosmos3Wandering -apropos generate
> --- Help for atom "generate" in subgroup "Generated output"
>     -generate, -gen 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'.
>
> (midi output is actually not yet available, though)
>
> For example, one can run:
>
> jacquesmenu@macmini: ~/musicformats-git-dev/files/musicxml > 
> Mikrokosmos3Wandering -generate  musicxml  -o Mikrokosmos3Wandering.xml 
> -trace=passes
>
> %--------------------------------------------------------------
>   Pass 1: Creating the MSR score with the functions
> %--------------------------------------------------------------
> *** MusicXML warning *** :91: The staffMeasuresSlicesSequence of staff 
> "Part_OnlyPart_Staff_One" is null
> *** MusicXML warning *** :91: The staffMeasuresSlicesSequence of staff 
> "Part_OnlyPart_Staff_Two" is null
>
> %--------------------------------------------------------------
>   Pass 2: Convert the MSR score into a second MSR
> %--------------------------------------------------------------
>
> %--------------------------------------------------------------
>   Pass 3: Translating the MSR into an MXSR
> %--------------------------------------------------------------
>
> %--------------------------------------------------------------
>   Pass 4: Convert the MXSR into MusicXML text
> %--------------------------------------------------------------
>
> Opening file 'Mikrokosmos3Wandering.xml' for writing
> Warning message(s) were issued for input line 91
>
>
> This creates file Mikrokosmos3Wandering.xml, attached.
>
>
> The functionality of musicformats is available as API C++ functions. For 
> example, conversion from MusicXML data to LilyPond, as used by xml2ly and 
> Grame’s experimental web site at https://libmusicxml.grame.fr, is available 
> through these functions:
>
> /*!
>   \brief Converts a MusicXML representation to the LilyPond format.
>   \param file a file name
>   \param out the output stream
>   \return an error code (\c musicFormatsError::k_NoError when success)
> */
> EXP musicFormatsError musicxmlfile2lilypond (
>   const char *file, const optionsVector& options, std::ostream& out, 
> std::ostream& err);
>
> /*!
>   \brief Converts a MusicXML representation to the LilyPond format.
>   \param fd a file descriptor
>   \param out the output stream
>   \return an error code (\c musicFormatsError::k_NoError when success)
> */
> EXP musicFormatsError musicxmlfd2lilypond (
>   FILE* fd, const optionsVector& options, std::ostream& out, std::ostream& 
> err);
>
> /*!
>   \brief Converts a MusicXML representation to the LilyPond format.
>   \param buffer a string containing MusicXML code
>   \param out the output stream
>   \return an error code (\c musicFormatsError::k_NoError when success)
> */
> EXP musicFormatsError musicxmlstring2lilypond (
>   const char *buffer, const optionsVector& options, std::ostream& out, 
> std::ostream& err);
>
>
> I’m no Python nor Scheme developper, but I guess this can be used with 
> suitable interfaces from applications written in these languages.
>
> I’ll be happy to collaborate to using musicformats to export from within 
> LilyPond if such an attempt is done.

Well, I'm afraid I can't help coding, C++ is not my world. Though, I'd
really love to see LilyPond being able to do:
lilypond --musicxml file.ly
resulting in a correct file.xml.

Best,
  Harm



reply via email to

[Prev in Thread] Current Thread [Next in Thread]