[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: XML anatomy
Re: XML anatomy
Thu, 9 Jan 2020 20:21:01 -0500 (EST)
On Wed, 2020-01-08 at 21:56 -0500, Bric wrote:
In the denemo XML I am seeing the <rhythms>...</rhythms> section (no
pun intended) which contains three <rhythm... > ... </rhythm>
nodes. I can't figure out what this represents.
Its the internal name for what is presented to the user as "Snippets" -
originally music snippets were intended only to hold short rhythmic
sequences to be used for entering music (and this is still the main
purpose, having set up a snippet pitches sequentially played in on a
MIDI keyboard are entered in with durations taken sequentially from the
current snippet). The <rhythms>...</rhythms> holds any snippets defined
for the current score.
Sorry - i don't fully understand, but get the gist.
(Is there any documentation elaborating on the XML structure?) :]
Not as far as I know. If you are exploring the structure of Denemo's
file format with the idea that it might be useful in connection with
creating MusicXML from Denemo then I think that wouldn't be profitable
- it's just a coincidence that they are both using the XML markup, the
whole purpose is quite different. Only the very basic music information
(pitches, durations, a little bit of staff/voice structure etc) is
explicitly present in Denemo, a large part of the final score
appearance is created by LilyPond from chunks of LilyPond syntax stored
inside Denemo (as part of the Denemo Directive structures). So you
would search in vain for anything like <composer>...</composer> in a
Denemo score. Instead you would be looking for some LilyPond syntax of
the form "composer = /markup ..." stored inside a suitable Denemo
I'm not too surprised that you have found that the lily2musicxml idea
is not well developed - there are two basic problems:
1) MusicXML is not fundamentally sound: it was developed (AFAIK) by a
commercial score editor company with a hazy notion of what they might
be trying to represent (music? music notation?) and ended up as a rat's
nest of fields whose meaning is really only defined by the MusicXML
output of that program. It is accompanied by an automated documentation
system which gives the impression that the whole thing has been
designed. It is the only show in town, however, as MIDI is nearly
useless - quicker to re-enter music than use MIDI.
2) LilyPond syntax is not intended to describe the meaning of a musical
score. It only does so incidentally - "cis" means a C sharp, but the
"composer = ..." is not LilyPond syntax for the composer of the score,
its just telling the LilyPond typesetter to place some markup somewhere
on the page - it does that via a standard LilyPond include file which
is not part of the LilyPond language, but written *in* the LilyPond
language. So, to write a lily2musicxml program you would have to settle
on some commonly used LilyPond syntax and try and output some XML
syntax that would get read in by Sibelius, Finale et al to give a
starting point for editing into a musical score. A soul-destroying task
as you have no control over what those programs will make of someone
else's musicXML syntax.
Well, it is conceivable to me that someone codes an exporter at some point, which interprets both the xml elements /and/ the lilypond snippets sprinkled all throughout denemo xml, to generate a more homogeneous format.. Such as MusicXML, for instance, consisting *only* of markup. But that, of course, looks like a monumental task at this point.
The real question I guess though is "what is it that you are trying to
I'm trying to export/import out of curiosity and exploration mostly, but there are some practical reasons that compel me. For example, i've been making do without swing playback in denemo (for many years), and just realized that MuseScore offers swing playback.
I really really really (that's not repeated enough) hate MuseScore's input methods. After using denemo's super-intelligent, configurable input design, one's jaw can only drop in bewilderment over the heinous imposition of rests in Musescore, to compensate for incomplete duration in a measure, clunky, clumsy, near-impossible note duration editing, and other UI defects.
And yet, I can listen to what I generate (or import!) into MuseScore, in swing rhythm.
But beyond that, i'm also exploring this out of curiosity ... there is a plethora of editors out there, with a variety of playback options.
(For input and final rendering/typesetting i haven't seen anything more powerful than the denemo+lilypond combo)