[MEI-L] slur and @curvedir

Roland, Perry D. (pdr4h) pdr4h at eservices.virginia.edu
Thu Feb 12 16:52:15 CET 2015


Having consulted a little with Don off-list, I think I can see how a single slur can be represented by multiple Bezier curves.  It means that the Bezier curve must be “elevated” from attribute to element status.  For example, in DTD-like lingo --

<!ELEMENT slur (bezier*)>
<!ELEMENT bezier (cp+)>
<!ELEMENT cp EMPTY>
<!ATTLIST cp
                 anchor   data.URI   REQUIRED
                 ho          decimal    REQUIRED
                 vo          decimal    REQUIRED>

In this approach, <slur> can contain 0 or more Bezier curves, each of which must have one or more Bezier control points (bcp).  The @bezier and @join attributes on <slur> can be removed, but it can keep all its other attributes.

Markup example --

<slur xml:id="slur1" startid="#n1" endid="#n2" tstamp="1" tstamp2="2" lform="dashed" lwidth="0.2mm" curvedir="above">
  <bezier>
    <cp anchor="#n1" ho=”19” vo=”45”/>
    <cp anchor="#n1" ho=”-32” vo=”118”/>
    <cp anchor="#n2" ho=”-42” vo=”1”/>
  </bezier>
  <bezier>
    <cp anchor="#n1" ho=”19” vo=”45”/>
    <cp anchor="#n1" ho=”-32” vo=”118”/>
    <cp anchor="#n2" ho=”-42” vo=”1”/>
  </bezier>
</slur>

The <bezier> element is optional and repeatable, allowing for any number of curves (physical instantiations) of a single (semantic) slur.  <cp> is repeatable, permitting Bezier curves of any order.  The @ho and @vo attributes record the location of the control point as offsets from the entity “pointed to” by the URI in the @anchor attribute.  This is likely to be either the first or last note of the slur, but doesn’t have to be.

Because <bezier> is optional, those not interested in precise, mathematical description of the slur’s curve can safely ignore it and rely on @curvedir.  I think adding a new value (“complex”) is a good idea for slurs that are more complex than can be described as simply “above” or “below”.  “Above” and “below” can continue to be used to provide “quick-and-dirty” renditions when no <bezier> elements are available, but rendering a satisfactory slur using the “complex” value is unlikely.

The encoding could be made less redundant by making the @anchor attribute and relying on the presence of @startid on <slur>.  If there were no @startid attribute on the parent <slur>, I suppose the control points of the Bezier curve could be based on whatever occurs on @tstamp1, but these issues are best addressed by Schematron rules.  It may be simpler just to require @anchor.

I’m still not sure how one can get from a <slur> described by a single Bezier curve to a description with multiple curves and back again, but that really does lie in the realm of the formatter, not in MEI itself.

@bulge can remain or be replaced by similar element-based markup, but I’m in favor of leaving it in place for the moment.  One windmill at a time ...

Of course, this is just off the top of my head this morning.  It’s all subject to revision, especially the names (I’m not particularly happy with <cp> for instance).  So, all feedback is appreciated.

--
p.


From: mei-l [mailto:mei-l-bounces at lists.uni-paderborn.de] On Behalf Of Axel Teich Geertinger
Sent: Wednesday, February 11, 2015 3:54 AM
To: Music Encoding Initiative
Subject: Re: [MEI-L] slur and @curvedir

There is something that has been puzzling me: I don’t think I have completely grasped the idea of @join when used with slurs (I haven’t really thought about other uses, though). It seems to me to be redundant. In which situation would it be necessary to explicitly encode that a slur needs to be interrupted at a system break? Doesn’t the system break itself provide all information necessary, leaving the actual division into two half-slurs to the rendering engine? Is there any thinkable situation where an encoded <sb> or an automatically generated system break would not imply the splitting of the slur at that point? Or the other way around: would it be necessary to split one (that is, logically one) slur into two (that is, graphically two) parts in any other situation?

On editing or rendering a score (not necessarily following the exact layout of a particular source), the system break may change position. I that case, I would even have to update the endpoint of the first and the starting point of the second (half-)slur, right? What is the benefit from this operation?

I agree with Zoltan that a slur should be encoded as one element, even when it has to be rendered as two distinct graphical objects _in some situations_. It makes me wonder whether an attribute like @join would be more useful to indicate the location of the points where a complex slur changes direction of bending (the joints, in terms of joined slurs with alternating curve direction).

Best,
Axel

Fra: mei-l [mailto:mei-l-bounces at lists.uni-paderborn.de] På vegne af Roland, Perry D. (pdr4h)
Sendt: 10. februar 2015 22:16
Til: Music Encoding Initiative
Cc: zoltan.komives at gmail.com
Emne: Re: [MEI-L] slur and @curvedir


There’s no single answer to this. Whether one chooses to encode a single slur or chooses to create two depends on the purpose for the encoding -- a single slur is better for analytical purposes, but two may be better for rendering.  To fit both simultaneously, one can use <choice>, for example --

<choice>
  <orig>
  <!-- single slur -->
    <slur tstamp="1" tstamp2="2m+1"/>
  </orig>
  <reg>
     <!-- multiple slurs, likely with additional rendering info provided in @bulge,
           @bezier, etc. -->
    <slur tstamp="1" tstamp2="1m+3"/>
    <slur tstamp="0" tstamp2="1"/>
  </reg>
</choice>

The @join attribute on slur exists to indicate that multiple slurs are conceptually one, not to provide rendering info.

I contend that @curvedir *can* provide a so-called “rendering hint”, but I agree that the rendering engine has to be pretty intelligent to make use of it -- Mup seems to do a reasonable job with only this much information.  I have no problem extending the values permitted in @curvedir, but I think over-specification there is not likely to be of much help.  A value of “complex” is about as far as I think we can go down that path.

--
p.


From: Kőmíves Zoltán [mailto:zolaemil at gmail.com]
Sent: Tuesday, February 10, 2015 1:30 PM
To: Music Encoding Initiative
Cc: Roland, Perry D. (pdr4h)
Subject: Re: [MEI-L] slur and @curvedir

Hi Perry,

1.
>[Raff]: Having two slurs and joining them, instead, seems conceptually wrong to me: there is only one slur and no real XML overlapping (or other limitation) that would justify, arguably, splitting the element in two.
*I agree. The proposed solutions of joining or splitting them makes complete sense when one need to render them.

2. As Laurent points out, relative positioning of the bezier points (end points being relative, say, to the starting and ending note heads, the control points being relative to these points) results in a "reflowable" slur - bezier curves stretch very nicely, maintaining their shape. However, it only helps as long as the slur isn't broken by a system break... In which case no single bezier will describe how to draw two curves.

Talking about which, consider the attached example. How would you encode the pharse/slur mark starting at figure 9? I think one fairly natural encoding is <slur tstamp="1" tstamp2="2m+1"/>, but I can see how one could argue that splitting it into two slur elements are equally valid:
<slur tstamp="1" tstamp2="1m+3"/>
and in the first measure of the following system after figure 9:
<slur tstamp="0" tstamp2="1"/> (even though I would not encourage the use of tstamp values less than 1. I'm sure there's a better way of encoding of the starting point of the second slur!)

I personally feel that encoding the slur as one element is better, even if there are two graphical objects that represent it. (Following this logic, whenever possible, I would probably try to avoid splitting measures into when the system breaks in the middle of the measure, even if it makes life a little harder when processing.)

3.
>[Perry]: For automatic layout without any user intervention, the only mechanism is @curvedir
* Given the difficulties, it seems to me that @curvedir alone does not provide sufficient control over curvature for truly automated rendering of slurs, even in the simpler cases. Furthermore, seeing the number of issues arising as soon as we mention @bezier, @bulge or curvature in general, I would say that a pure _classification_ mechanism would be useful. Perhaps this is a bit of a conceptual change, but maybe @curvedir could be regarded as such a classification (and extend its values to cover s-shaped and perhaps even more craziness)? Or perhaps a new attribute would fit the job better?

Best
Zoltan

2015-02-03 15:05 GMT+00:00 Laurent Pugin <lxpugin at gmail.com<mailto:lxpugin at gmail.com>>:
Hi Perry,

One option I think could be interesting to add for providing more flexibility is the possibility to specify the bezier points with a percentage for the horizontal position of the intermediate points (0 to 100) and vertical units (as in @bulge) for vertical positions. This would be much easier to draw on a black-board. I'll try to prepare a couple of example images.

Laurent

PS For some reason, I have not received the messages from Axel and Raffaele. Is anything wrong with my subscription to the list?

On Tue, Feb 3, 2015 at 3:50 PM, Roland, Perry D. (pdr4h) <pdr4h at eservices.virginia.edu<mailto:pdr4h at eservices.virginia.edu>> wrote:
Hi Raffaele,

Using @bezier only "locks" the rendering if the control points are specified as absolute page coordinates.  If they're given as offsets from something else, such as a particular note, then the rendition of the slur is dependent on the position of that thing.

This is how I envision it working.  It's possible that moving the bezier control points (even if they're moved relative to everything else) will change the shape of the curve.  If that's true, then our only mechanism for controlling a slur is through the use of @bulge.  For automatic layout without any user intervention, the only mechanism is @curvedir -- remembering that values in @curvedir cannot possibly result in a perfect rendition every time.  It seems there truly is no way to have the cake and eat it too, hence the comment which began my initial response to Benni.

Of course, only those with more knowledge and experience with this stuff can say for sure.
Laurent?  Craig?  Zoltan?  Want to join in?

--
p.

__________________________
Perry Roland
Music Library
University of Virginia
P. O. Box 400175
Charlottesville, VA 22904
434-982-2702<tel:434-982-2702> (w)
pdr4h (at) virginia (dot) edu
________________________________
From: mei-l [mei-l-bounces at lists.uni-paderborn.de<mailto:mei-l-bounces at lists.uni-paderborn.de>] on behalf of Raffaele Viglianti [raffaeleviglianti at gmail.com<mailto:raffaeleviglianti at gmail.com>]
Sent: Tuesday, February 03, 2015 9:29 AM
To: Music Encoding Initiative
Subject: Re: [MEI-L] slur and @curvedir
Hi all,
I find Perry's explanation really helpful and interesting, particularly concerning the the sharing of responsibilities between the encoder and the renderer. Encoding @bezier before rendering locks the encoding into only one possible rendering, which is not great for the reflowing that a truly dynamic score should allow. Unless the aim of the encoder is to represent/document the curvature of one specific written source, which is a totally legitimate approach (and might be what Benni is after?).
Having two slurs and joining them, instead, seems conceptually wrong to me: there is only one slur and no real XML overlapping (or other limitation) that would justify, arguably, splitting the element in two.
Raff

On Tue, Feb 3, 2015 at 5:27 AM, Axel Teich Geertinger <atge at kb.dk<mailto:atge at kb.dk>> wrote:
Hi Perry

Thanks for your elaborate reply. As always I wasn’t aware of any worms involved, but I did realize that there is no single or easy answer :-)

Drawing a complex slur that not only avoids collisions with other objects but is also aesthetically satisfying can be quite a challenge. My deepest respect for people working on rendering slurs!
As you say, it almost always requires visual control and corrections to get it right. But recording the corrections also means that they will have to be encodable somehow, that is, in more detail than possible with @bezier, for instance. I have no immediate ideas about how to solve this in a medium as fluid as music notation.

Best,
Axel

Fra: mei-l [mailto:mei-l-bounces at lists.uni-paderborn.de<mailto:mei-l-bounces at lists.uni-paderborn.de>] På vegne af Roland, Perry D. (pdr4h)
Sendt: 2. februar 2015 20:14

Til: Music Encoding Initiative
Emne: Re: [MEI-L] slur and @curvedir

Hi Axel,

One comment before I answer your questions -- This is a huge can of worms for which it seems there can never be a single, universally satisfying answer.

@curvedir only provides minimal information about the slur so a renderer must "figure out" the rest. This is the easiest method for the encoder, but requires a lot more intelligence on the part of the rendering engine, for example with regard to collision avoidance. From another angle, however, it provides the greatest amount of flexibility for the renderer to arrive at the final shape of the slur.  Like I said before, aside from providing a more detailed classification purpose, allowing curvdir="above below above below (and so on)" doesn't really provide much rendering help because, just as you've observed, it says nothing about the location of the points where the slur is supposed to bend back on itself.

@bulge attempts to provide this missing information by indicating distance from an imaginary line between the end points of the slur.  Providing two values means the distance between the end points should be halved and a curve drawn that passes through the starting point, the point indicated by the 1st value in @bulge, the mid-point of the line, the point indicated by the 2nd value, and the ending point.  Three values would mean dividing the distance between the end points by thirds, etc.

"Simple" slurs (i.e., ones that don't alternate sides of the imaginary line) can be drawn with @bulge by supplying only a single value or by giving only positive or only negative values.  Doing this, instead of using @curvedir, places the shape of the slur in the control of the encoder instead of the rendering engine, but puts the burden of "scribing" the shape on the encoder.  The ability to draw "simple" slurs is why @bulge can't be constrained to alternating positive and negative values.

The example provided in the Guidelines should use the values -2 and 1.  The diagram is also misleading in that the lines connecting the curve with the imaginary line should divide their respective sections of the curve into equal parts; that is, the line illustrating point 1 should be drawn at the "highest" point of the curve, mid-way between the mid-point of the imaginary line and the end point of the slur.

@bezier provides the most encoder control over the rendition of the slur.  But unless the control points of the curve are expressed as offsets from some musical feature (like a note, for instance), then re-flowing the notation will "disconnect" the slur from it and the slur will end up in the wrong place on the page.  So, the bezier control points have to be *offsets* from something, presumably from the features pointed at by the @startid and @endid attributes, as long as the notation is expected to be "edit-able".  The @startid, @endid, @bezier combination will move the slur with the notation.  The problem with bezier control points is the same as with @bulge values -- it's nearly impossible for one to create them without the aid of some kind of drawing environment or iterative "code/view/code" workflow.

Without a doubt, a better explanation of this stuff is desperately needed the Guidelines. But, there may also be better ways of recording the information necessary for drawing slurs than what is provided by the current set of attributes.  I welcome contributions on either front.

--
p.

__________________________
Perry Roland
Music Library
University of Virginia
P. O. Box 400175
Charlottesville, VA 22904
434-982-2702<tel:434-982-2702> (w)
pdr4h (at) virginia (dot) edu
________________________________
From: mei-l [mei-l-bounces at lists.uni-paderborn.de<mailto:mei-l-bounces at lists.uni-paderborn.de>] on behalf of Axel Teich Geertinger [atge at kb.dk<mailto:atge at kb.dk>]
Sent: Monday, February 02, 2015 3:29 AM
To: Music Encoding Initiative
Subject: Re: [MEI-L] slur and @curvedir
Hi all

Just out of curiosity: None of the solutions I have seen (@bulge, @bezier, or @curvedir=”above below”) do indicate explicitly where the slur changes position from above the notes to below – that is, where the slur intersects the melodic line, so to speak. I guess that the use of @bezier will give the desired result in most situations, but as the actual rendering of the slur must be dependent to some degree on other factors such as the note spacing or system breaks, I wonder how we can be sure that it will always cross the melodic line at the desired place. With @bulge or @curvedir (with extended values as suggested by Zoltan) this must be even more uncertain, right? In principle, a rendering algorithm may draw the slur in Benni’s example above the first three groups of notes and below only the last group when using @bulge or @curvedir. How do we avoid that?

One more question about @bulge, again just out of curiosity: Should it be defined that a sequence of values for @bulge must an alternating sequence of positive and negative values, either in the guidelines or the schema? Or would a sequence like the one in the guidelines example (@bulge=”2 1”) make any sense in any situation?

Best,
Axel


Fra: mei-l [mailto:mei-l-bounces at lists.uni-paderborn.de] På vegne af Komíves Zoltán
Sendt: 2. februar 2015 07:08
Til: Music Encoding Initiative
Emne: Re: [MEI-L] slur and @curvedir

Hi Perry,

I think extending the data type of @curvedir attribute could be justified simply base on the argument of classification: @curvdir provides a classification mechanism, but this classification is rather incomplete, the current values of @curvedir do not cover all the cases that are out there (see Benni's example: nor "above" neither "below" is appropriate, and the omission of the attribute surely cannot imply what we want to convey, that is the curve goes also above and below). This has nothing to do with rendering, since in order to render a slur or phrase mark, the actual curve needs to be calculated anyway, even when "above" or "below" is applied.

Out of Benni's suggestions I quite like "above-below" / "below-above". (Note that his question concerns @curvedir not @place.) In fact, it occurs to me, we could even allow an alternating sequence of the values "below" and "above". Benni's example would be encoded as <slur curvedir="above below"/>. This, beside conveying the fact that the curve goes first below, then above, could also be applied to curves with multiple inflection points. I have no literary example for this at hand, but wouldn't be surprised if there was some in existence.

Best
Zoltan



2015-02-01 17:04 GMT+00:00 Roland, Perry D. (pdr4h) <pdr4h at eservices.virginia.edu<mailto:pdr4h at eservices.virginia.edu>>:

Laurent is correct, the values in the example should be -2 and 1.

The place attribute is for describing the placement of an entity in general terms.  For phrase marks and slurs, it also generically describes the curvature of the mark, and therefore functions as short hand for a more detailed description given by the bulge or bezier attributes. It would be possible to add a value to @place for slurs/phrases with multiple inflection points, such as "mixed" or perhaps "complex", but this would only fulfill a classification purpose -- it wouldn't provide any information regarding how to draw the slur/phrase.  So, one would still need to use @bulge or @bezier for rendering.

Another complicating factor is that @place is used by a number of elements other than slur and phrase.  Adding "mixed" directly to @place would introduce the possibility of nonsense in the case of, say, <accid> or <breath>.  Of course, a specialized form of @place for slur/phrase is a possibility, but would need careful handling.

--
p.


__________________________
Perry Roland
Music Library
University of Virginia
P. O. Box 400175
Charlottesville, VA 22904
434-982-2702<tel:434-982-2702> (w)
pdr4h (at) virginia (dot) edu
________________________________
From: mei-l [mei-l-bounces at lists.uni-paderborn.de<mailto:mei-l-bounces at lists.uni-paderborn.de>] on behalf of Laurent Pugin [laurent at music.mcgill.ca<mailto:laurent at music.mcgill.ca>]
Sent: Sunday, February 01, 2015 8:27 AM
To: Music Encoding Initiative
Subject: Re: [MEI-L] slur and @curvedir
Hi Benni,

Have you looked at @bulge? There is an example in the guidelines: http://music-encoding.org/documentation/guidelines2013/userSymbols#index.xml-body.1_div.23_div.3_div.4

I would have expected the values to be -2 1 for the given example, so I am not sure I understand it correctly.

Laurent

On Fri, Jan 30, 2015 at 2:13 PM, Benjamin Wolff Bohl <bohl at edirom.de<mailto:bohl at edirom.de>> wrote:

Dear MEI-L,
Freschütz has a question concerning encoding mixed direction slurs.



[bildschirmfoto 2015-01-30 um 14 05 39]<https://cloud.githubusercontent.com/assets/2430401/5976008/319371e8-a889-11e4-9a4c-7fe5cc246dfe.png>
In case the picture doesn't come through, please see: https://github.com/Freischuetz-Digital/proofMEIdata/issues/25


This slur may not be properly encoded in MEI using @curvedir that only allows 'above' or 'below' as values. Nevertheless, using @bezier<https://github.com/bezier> is much more verbose than needed…

Maybe a value like 'mixed' / 'above-below' / 'below-above' / 'changing' / 'alternating' would be applicable? Of course the schema would have to be modified to allow this. Are there any comparable values in other parts of the schema?


This is no "special", rather quite often in printed music from the 19th century.

All the best,
Benjamin

_______________________________________________
mei-l mailing list
mei-l at lists.uni-paderborn.de<mailto:mei-l at lists.uni-paderborn.de>
https://lists.uni-paderborn.de/mailman/listinfo/mei-l


_______________________________________________
mei-l mailing list
mei-l at lists.uni-paderborn.de<mailto:mei-l at lists.uni-paderborn.de>
https://lists.uni-paderborn.de/mailman/listinfo/mei-l


_______________________________________________
mei-l mailing list
mei-l at lists.uni-paderborn.de<mailto:mei-l at lists.uni-paderborn.de>
https://lists.uni-paderborn.de/mailman/listinfo/mei-l



_______________________________________________
mei-l mailing list
mei-l at lists.uni-paderborn.de<mailto:mei-l at lists.uni-paderborn.de>
https://lists.uni-paderborn.de/mailman/listinfo/mei-l

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.uni-paderborn.de/pipermail/mei-l/attachments/20150212/df41676e/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 69500 bytes
Desc: image001.png
URL: <http://lists.uni-paderborn.de/pipermail/mei-l/attachments/20150212/df41676e/attachment.png>


More information about the mei-l mailing list