lilypond-user
[Top][All Lists]
Advanced

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

Re: lilypond-user Digest, Vol 226, Issue 139


From: Peter Toye
Subject: Re: lilypond-user Digest, Vol 226, Issue 139
Date: Tue, 5 Oct 2021 10:52:51 +0100

 Harm,

 

 https://music.stackexchange.com/questions/42315/lilypond-to-musicxml-to-sibelius#73706 has a discussion about this as well. I've started looking at the OpenLilyLib solution at the bottom of the thread but it doesn't work on later versions of LilyPond.

 

It would seem to me that using LP's parsing mechanisms is the right way to go about it, and I'd offer to help if my health allowed. Is there anyone on this mailing list who knows about it? It's something I will probably need soon.



Best regards,


Peter

mailto:lilypond@ptoye.com

www.ptoye.com


-------------------------

Tuesday, September 28, 2021, 6:58:40 AM, lilypond-user-request@gnu.org wrote:



------------------------------


Message: 2
Date: Tue, 28 Sep 2021 00:53:16 +0200
From: Thomas Morley <thomasmorley65@gmail.com>
To: Jacques Menu <imj-muzhic@bluewin.ch>
Cc: "lilypond-user Mailing List (lilypond-user@gnu.org)"
        <lilypond-user@gnu.org>, Dominique Fober <fober@grame.fr>
Subject: Re: Export from LilyPond to MusicXML
Message-ID:
        <CABsfGyVUxFcSP9uLtA6u0zNSDw7bNDakH+0_uZWq9kRSDt0-fQ@mail.gmail.com>
Content-Type: text/plain; charset="UTF-8"


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]