|
From: | Jacques Menu |
Subject: | Re: Du nouveau au sujet de ly2xml? |
Date: | Mon, 17 May 2021 00:00:21 +0200 |
Bonsoir Jean, Désolé pour les lecteurs qui vont trouver ce message rébarbatif… Comme je te l’avais dit, j’avais demandé, lors de ma présentation à Salzburg, s’il existait dans le flot de tâches exécutées par LilyPond un endroit où se raccrocher pour aborder ça. Personne ne semblait avoir de réponse à ce moment-là. Je suis heureux que tu nous en apportes, tu as bien compris ce que je demandais. Quitte à faire du gros boulot, il serait effectivement de loin plus porteur de travailler à un export de Lily vers d’autres représentations des partitions que de créer un outil pour fusionner des fichiers MusicXML. Comme je ne connais pas, tant s’en faut, le détail de ce que fait Lily, et que ça serait contre-productif que je m’y investisse, je pourrais colloborer avec quelqu’un qui aurait cette connaissance. Tu me sembles donc être le volontaire tout désigné! L’approche consisterait à créer une description LPSR (LilyPond Score Representation) de la partition par un exporteur. Il faudrait voir ce qui devrait être écrit en Scheme et en C++ respectivement. C’est ce LPSR que xml2ly construit pour ensuite produire le code LilyPond à partir de ça, voir l’architecture à la page 2 de https://github.com/jacques-menu/musicformats/blob/dev/doc/musicformatsArchitecture/musicformatsArchitecture.pdf . Pour illustrer comment la partition est décrite dans LPSR, je joins l’exemple d’une partition minimale, mais avec quand même différents aspects présents : |
Il y a le source MusicXML et le log de sa conversion en LilyPond par la commande : xml2ly -auto-output-file-name basic/MinimalScore.xml -display-lpsr Les numéros de lignes sont ceux des éléments dans le fichier MusicXML. On voit dans le log les deux composants de la description LPSR : le premier est la musique (composant MSR), et le second tout à la fin ce qu’il faut en plus pour structurer la partition comme on le fait en LilyPond : Book blocks BookBlock BookBlockElements ScoreBlock ParallelMusicBLock, 1 part group PartGroupBlock for partGroup "PartGroup_1 ('0', partGroupName "Implicit")", partGroupSymbolNone, 1 element PartBlock for part Part_POne (partID "P1"), 1 element partName = "" partAbbreviation = "" partBlockInstrumentName = "" partBlockShortInstrumentName = "" StaffBlock for staff "Part_POne_Staff_One" (staffRegular), 1 element (StaffBlockInstrumentName = "") (StaffBlockShortInstrumentName = "") UseVoiceCommand "Part_POne_Staff_One_Voice_One", 0 stanza Layout layoutGlobalStaffSize : 20 MidiTempo midiTempoDuration = 4 midiTempoPerSecond = 90 Je suis en train de documenter progressivement comment tout cela est fait. Donc pour résumer : si on peut créer cette description LPSR depuis LilyPond par un exporteur, on a directement la conversion en MusicXML, Guido et braille. MIDI n’est pas encore disponible, mais j’ai déjà avancé dans cette direction. Les nodes que tu proposes correspondraient à des msrElement de mon côté. Par exemple, pour créer dans le composant MSR de la description LPSR une note avec un pp, comme : a'8 \pp on écrirait le code C++ ci-dessous, ou son équivalent en Scheme : // create the note S_msrNote note1 = msrNote::createRegularNote ( __LINE__, measure1number, msrQuarterTonesPitchKind::kQTP_A_Natural, msrOctaveKind::kOctave4, rational (1, 8), // soundingWholeNotes rational (1, 8), // displayWholeNotes 0); // dotsNumber // append the dynamics to the note note1-> appendDynamicsToNote ( msrDynamics::create ( __LINE__, msrDynamicsKind::kDynamicsPP, msrPlacementKind::kPlacementBelow)); N’hésite pas si tu as des questions! JM |
MinimalScore.xml
Description: XML document
MinimalScore.ly
Description: Binary data
MinimalScore.log
Description: Binary data
|
[Prev in Thread] | Current Thread | [Next in Thread] |