- From: James Ingram <j.ingram@netcologne.de>
- Date: Mon, 3 Apr 2017 13:00:01 +0200
- To: public-music-notation-contrib@w3.org
- Message-ID: <7bd61962-2afb-cc98-8786-d304e7b38fe3@netcologne.de>
Hi Glenn,
This discussion of application internals may look a bit private, but I
think this CG needs need to explore the needs of /all/ its app
developers, not just the big commercial ones.
I'm currently leaning towards the inclusion of <measure> in MNX (see below).
Glenn said:
> [...] if [...] no or few known program's internals use measure as a
> container, why should MNX? It would only add complication to programs
> that don't.
I don't think the complication would actually be very great. Its just a
case of having another level of looping in the parsing function. On the
other hand, including <measure> might considerably simplify the parsing
for some applications. Imagine trying to parse my measure-free SVG
format to create a list of <measure> objects! I think we'll just have to
wait and see how the commercial vendors want to do this.
Glenn again:
> My internal data structure is time based, rather than graphics
> based... all items across a system are grouped if they "sound"
> concurrently (of course, rests don't exactly sound). I call these
> items "syllables", derived from the "hunk of lyrics" that is
> associated with some of them [...].
I'm not sure that I understand you correctly. Is the following correct?:
1. The top level of your internal data structure is a list of *system*
objects.
2. Each *system* contains a list of *syllable* objects.
3. Each *syllable*
a) occurs at a particular time and
b) contains a list of concurrent *item*s.
Presumably, the *syllable* happens at a time relative to the *system*,
and the *system* happens at a time relative to the performance. The
duration of a *system* is the duration of its list of *syllable*
objects. So each *syllable* has a duration (including the last one on
the list).
At this point, your *syllable* is sounding rather like what I call a
*<score:midi>* object in
https://github.com/notator/Moritz/issues/3
But then you say that a *syllable* can contain a "hunk of lyrics". Is
that a recording (something temporal), or do you mean a string of text?
If you mean a string of text, then I think your *syllable* has to be
extended to contain a graphics component. In other words, it becomes
equivalent to an MNX <event> symbol (if such <event>s contain both
graphics and temporal info).
Is that correct? Did I get something wrong? If I'm right, then you
should have no trouble reading MNX <event> symbols into your internal
data structure.
> Note that performance directives that change the sequence of play
> (repeats, D.S., D.C., Coda, etc.) prevent the sequence from being 100%
> temporally ordered.
The arrow of time is notoriously inexorable! :-)
Apropos repeats, D.S., D.C Coda etc.: In my proposal, <event> symbols
have a duration that is independent of their absolute temporal position.
Global time is just the result of adding such durations. If <event>s are
repeated later in a performance, their durations just get added again.
Since I'm allowing particular <event> symbols to contain multiple
temporal interpretations, its quite conceivable that a repeat of the
graphics would use a different interpretation. Real performers never
play the same thing twice...
All the best,
James
Am 03.04.2017 um 04:27 schrieb Glenn Linderman:
> Given James' and Cecelio's discussion of internals, I'll go ahead and
> roughly describe my internals. Of course, it is not necessary that the
> XML map directly to anyone's internals, it is expected that everyone's
> internals will be different, for different goals and purposes. On the
> other hand, if there be no or few known program's internals use
> measure as a container, why should MNX? It would only add complication
> to programs that don't.
>
> As you might expect from my lead-in paragraph, my program (not public,
> but has been used to create over 30 books of music and lyrics) does
> not use measure as a container.
>
> Neither does it use any graphical structure as containers, such as
> James describes regarding pages, systems, lines, and movements.
> Rather, pages and lines are scattered about where needed in the
> temporal order, in a manner similar to, and sometimes independent of,
> the locations of barlines (as James describes, sometimes it might be
> that a measure cannot fit on a line, but more often the case is that
> in fitting music to book form, that certain measures are broken to
> assist in the layout).
>
> My internal data structure is time based, rather than graphics
> based... all items across a system are grouped if they "sound"
> concurrently (of course, rests don't exactly sound). I call these
> items "syllables", derived from the "hunk of lyrics" that is
> associated with some of them, but it probably isn't the best name... I
> just never took time to discover or create a better term (suggestion
> welcome).
>
> Into this temporally linear data structure of notes, rests, barlines,
> and performance directives, then, additional "syllables" are inserted
> for layout purposes (which I call layout syllables), and they contain
> sufficient information regarding the page layout, the need for clefs
> and signatures, system connectors, and margins in both dimensions.
> There is generally at least one layout syllable per line of graphical
> music.
>
> I don't claim this is the best structure for all purposes, but it has
> been generally satisfactory for my use for the last 34 years.
> Initially a binary structure, I have converted it to compressed JSON
> in more recent times, finding paired XML keywords generally more
> distracting than helpful, but as an interchange format XML probably
> has more mature tools for schema description and validation (although
> such tools could be written for JSON, and maybe have been, unknown to
> me).
>
> Note that performance directives that change the sequence of play
> (repeats, D.S., D.C., Coda, etc.) prevent the sequence from being 100%
> temporally ordered. Playback simply follows the directives,
> accumulating key points (begin movement, begin repeat, Segno, Coda)
> which may be return points as they are discovered, and treating the
> others (end repeats, D.S., etc.) as a go to... just like a human
> player would, given the printed notation.
>
>
>
> On 4/2/2017 10:29 AM, James Ingram wrote:
>> I'd like to add a couple of points:
>>
>> 1. My measure-free solution for SVG instantiations is not an argument
>> for leaving measures out of MNX.
>> My authoring software (which would be an MNX /client/) uses measures
>> internally, so that its easy to concatenate them for particular system
>> layouts. It might be better to make it easy for such apps to construct
>> an internal structure consisting of a flat list of measures, so that
>> they can then give their users the choice of where the system breaks
>> should go. Such a container hierarchy might be:
>> page-->system-->measure-->staff-->voice-->event.
>> (I still think that MNX containers should be /graphically consistent/
>> containers.)
>> It would be possible, using this hierarchy, to write a valid MNX file
>> containing a single measure that would not fit on any available page.
>> (MNX has no idea how big the page is going to be.) In such a case, the
>> MNX client app has to be able to break the measure anywhere its user
>> thinks would be a good idea. That's just a problem for the app, its not
>> the MNX format's problem. The app can then export SVG (maybe in a format
>> like the one I outlined) or a new MNX file. The MNX for this "one
>> measure score" would have one measure per system, and all the final
>> barlines except the last would be missing (or invisible...).
>>
>> 2. Note that this is all has /only/ to do with the graphics. (The way
>> the score /looks/.) Any temporal information contained by an event
>> symbol just moves with its container, and can be concatenated across a
>> particular voice to describe a continuous stream. On the graphic level,
>> annotations such as time-signatures, tempo markings, tuplet brackets,
>> augmentation dots, staccato dots etc can be added ad lib., but a
>> complete description of what they all /mean/ will still just be stored
>> in the event symbols.
>>
>> 3. Please excuse my frequent use of "bar" to mean "measure". I actually
>> prefer the UK-English terms, since bars are just objects in space (that
>> are aids to legibility). Nothing is actually being "measured". Similarly
>> for the duration class names: a crotchet was originally a hook-shaped
>> object -- its not a quarter of anything... :-)
>>
>> All the best,
>> James
>>
>>
>> Am 02.04.2017 um 16:04 schrieb cecilio:
>>> Glen has raised an interesting alternative: allowing barlines to be
>>> notated, rather than thinking of measures as containers.
>>>
>>> In fact, that is exactly the solution I use in my software
>>> LenMus/Lomse. It allows a uniform treatment of single metric scores,
>>> measure-free scores and, not yet mentioned, *multi-metric music*. But
>>> I'm not defending this solution. I would like just to raise the need
>>> for careful thinking about the a clean MNX solution not relaying on
>>> 'tricks' such as:
>>>
>>> - non-controlling barlines for CWMN multi-metrics music.
>>> - hidden measures / barlines for CWNM measure-free music.
>>>
>>> Multi-metric music is also related to the issue of notating barlines
>>> at <system> level or at <part> level, raised in another post.
>>>
>>> In my experience it is, perhaps, simpler to deal with a solution based
>>> on measure containers (with an special measure container for
>>> measure-free scores). But to deal with multi-metrics and measure-free
>>> scores I have cosen a solution based on notating barlines as staff
>>> objects and not using measure containers gives more flexibility and
>>> is, IMO, more 'natural'. Anyway, I'm not defending this solution. I
>>> just tried to take into consideration the need for a clean solution in
>>> MNX for multi-metric and measure-free scores.
>>>
>>> Cecilio
>>>
>>> On Sun, Apr 2, 2017 at 1:31 PM, James Ingram <j.ingram@netcologne.de
>>> <mailto:j.ingram@netcologne.de>> wrote:
>>>
>>> Hi Dennis, Glenn, all,
>>>
>>> Welcome Dennis! This is getting very interesting! :-)
>>>
>>> My own version of the container hierarchy was created from first
>>> principles, and does exactly as Glenn suggests: It treats barlines
>>> simply as notated lines. They are graphical aids to /legibility/
>>> rather than being musically structural. They just chunk areas of
>>> the page to make reading easier.
>>>
>>> For discussion purposes, here's my reasoning:
>>>
>>> My outermost container is the *page* (an <svg> element in an SVG
>>> document). Printable pages have finite width and height. So do
>>> computer screens. It is possible to scroll pages on a screen,
>>> either horizontally or vertically, but scrolling very wide pages
>>> horizontally is strangely disorienting. System breaks are
>>> reassuring, and aid to legibility. So my *page* containers always
>>> have a /width/ that should fit on a computer screen. The authoring
>>> software can decide which screen width the score is written for.
>>>
>>> (From here on, I'm simplifying a bit, for the sake of getting the
>>> principles across.)
>>>
>>> The next container level down (inside *page*) is the *system*.
>>> Systems stack vertically on the page with margins to the left and
>>> right. System containers contain *staff* containers and
>>> *staffConnector*s.
>>>
>>> A *staff* has the width of the system. A *staffConnector* is a
>>> vertical line between two staff containers. Staff containers stack
>>> vertically inside their system, and contain *voice* containers.
>>>
>>> A *voice* container has the width of its containing staff, and
>>> contains a sequence of objects that include *clefs*, *barlines*
>>> and *event symbols*. (This arrangement owes a lot to capella's
>>> CapXML "noteObject"s. )
>>> My authoring software only draws *barline*s into the first voice
>>> in a staff. It might be better to draw barlines a level higher, in
>>> the staff container.
>>> An advantage of differentiating between barlines and
>>> staffConnectors is that they can be styled differently.
>>> Stockhausen often wanted to group instrument types differently in
>>> this way. For example: In a large score, the staffConnectors
>>> between woodwind staves can be the same thickness as the barlines,
>>> while the staffConnectors between the woodwinds and the brass can
>>> be thinner.
>>>
>>> XML was invented to be both machine-readable and human-readable.
>>> Its a big help, when debugging, to be able to collapse the
>>> containers in an XML editor in order to find a particular object.
>>> So I think its a good idea to make the XML containers contain
>>> everything that belongs graphically inside them. I'd therefore
>>> prefer it if <part> elements in MNX ยง5.1.2 were contained in the
>>> <system> element. (If I've understood the example correctly.)
>>>
>>> Note that my version of the container hierarchy is based strictly
>>> on /graphical containment/. The old problem of moving notes from
>>> bar to bar is still there, but it has become a problem of moving
>>> notes from system to system.
>>> Note also that the /temporal definition/ of a tied symbol goes in
>>> the first event symbol. All the rest (tie, tied symbols) is just
>>> graphics.
>>>
>>> All the best, hope that helps,
>>> James
>>>
>>>
>>>
>>> Am 02.04.2017 um 01:20 schrieb Glenn Linderman:
>>>> Dennis raises a valid point, though... does a measure have to be
>>>> a container at all? A measure extends from one bar to the next,
>>>> but the sequence of notes and bar lines can be thought of as a
>>>> exactly that, a sequence, rather than a containment concept. As
>>>> has already been mentioned, sounded notes can escape the
>>>> containment by being tied across bar lines. Further, shifting
>>>> things from one measure to the next may be far easier by moving
>>>> the bar lines in the sequence rather than moving notes from one
>>>> container to another. So there are some merit to simply allowing
>>>> bar lines to be notated, rather than thinking of measures as
>>>> containers (either in the logical or XML sense of containment).
>>>>
>>>> On 4/1/2017 12:05 PM, Joe Berkovitz wrote:
>>>>> Hi Dennis,
>>>>>
>>>>> Speaking as a composer, "one big measure" is still some
>>>>> sort of
>>>>> container and
>>>>> therefore incorrect. I have not understood in these
>>>>> discussions and in
>>>>> existing software why the measure must be the basic
>>>>> consideration
>>>>> in encoding
>>>>> information.
>>>>>
>>>>>
>>>>> If we used a <measure> element in this way, it would be just a
>>>>> "container of convenience" to hold a series of events and
>>>>> would not
>>>>> imply a notated measure. We'd want to figure out a way to make
>>>>> sure that
>>>>> this understanding was part of the encoding. I wish I had not
>>>>> used the
>>>>> term, "one big measure": I simply meant, one big container. It
>>>>> may make
>>>>> sense to name the element differently in this case -- that, too,
>>>>> is up
>>>>> for discussion.
>>>>>
>>>>> Truly, there's no claim here that measures are a basic
>>>>> consideration in
>>>>> encoding music. Where measures exist and the composer notated
>>>>> them,
>>>>> though, I think it's reasonable to include them in the encoding
>>>>> as part
>>>>> of what the composer chose to express. Where the composer didn't
>>>>> do so,
>>>>> then the encoding can say that too.
>>>>>
>>>>> With respect to the other generalities that you talked about, I
>>>>> think
>>>>> we're envisioning that MNX will *also* include a culturally
>>>>> neutral
>>>>> encoding approach based entirely on graphics and time, and that
>>>>> this
>>>>> will provide an escape valve for the many notation systems that
>>>>> don't
>>>>> fit the 1600-1900 model. The emphasis you see in the CG's work
>>>>> right
>>>>> now, in no way excludes our taking up a more general approach as
>>>>> our
>>>>> resources and time allow.
>>>>>
>>>>> I don't feel there is a "tendency to create a [traditional
>>>>> Western]
>>>>> system". It's just that there is a large proportion of CG members
>>>>> writing applications that work within this system. Our present
>>>>> priorities merely reflect the makeup of the group. And they are
>>>>> just
>>>>> priorities, not decisions about what notation is or is not. I
>>>>> look
>>>>> forward to having the time to devote to thinking through the more
>>>>> general graphical/temporal approach as well.
>>>>>
>>>>> Best,
>>>>> ...Joe
>>>>>
>>>>>
>>>>> Music proceeds. If a measure-based composition is encoded,
>>>>> then
>>>>> apply the
>>>>> markers that determine these aspects (barlines, time
>>>>> signatures, etc.).
>>>>> Dumping the measure, it seems to me, relieves all the
>>>>> struggles with
>>>>> time
>>>>> signatures (such as 4/3 or 3/7) and, of course, notation
>>>>> systems old
>>>>> and new
>>>>> that don't use measure-like divisions at all. If a
>>>>> time-based system is
>>>>> encoded, then the container, if you need one, can be the
>>>>> second. If an
>>>>> instrument-exchange based system is encoded, the container
>>>>> (again,
>>>>> if you need
>>>>> one) is the exchange division. If the answer is 'none of the
>>>>> above',
>>>>> then the
>>>>> encoding system should be required to respect the music --
>>>>> first.
>>>>>
>>>>> With no measure container, for example, having a continuous
>>>>> staff
>>>>> that changes
>>>>> as needed (containers, no containers, switch to time-based,
>>>>> directional, all
>>>>> on the fly) also frees the encoded notation from straight,
>>>>> horizontal lines
>>>>> (meaning no trouble encoding Wolff or Stockhausen).
>>>>>
>>>>> I'm not a coder anymore, but I see a tendency to create a
>>>>> system that is
>>>>> driven by Western music 1600-1900. Don't we already have
>>>>> plenty of
>>>>> systems
>>>>> that do that? It seems to me that any new system that
>>>>> depends on that is
>>>>> either mostly redundant or, with respect to the continuing
>>>>> development of
>>>>> music, destined to fail.
>>>>>
>>>>> So can the measure 'container' please be scrapped?
>>>>>
>>>>> Dennis
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
Received on Monday, 3 April 2017 11:00:38 UTC