Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

implement <annot> display #389

Closed
craigsapp opened this issue Dec 20, 2016 · 73 comments
Closed

implement <annot> display #389

craigsapp opened this issue Dec 20, 2016 · 73 comments

Comments

@craigsapp
Copy link
Contributor

craigsapp commented Dec 20, 2016

Rendering of <annot> data would be useful to have in verovio. This would function in a very similar manner to the current <harm> implementation, but both should add horizontal collision avoidance between adjacent <annot> and <harm> entries (similar to the current implementation of <verse>.

It would also be useful if @n were implemented for <annot> (and perhaps <harm>) which would stack annotations in a similar manner to <verse>; i.e., @n would handle vertical collision avoidance between separate streams of annotations.

Test data:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://music-encoding.org/schema/3.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://music-encoding.org/schema/3.0.0/mei-all.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<mei xmlns="http://www.music-encoding.org/ns/mei" meiversion="3.0.0">
    <meiHead>
        <fileDesc>
            <titleStmt>
                <title />
            </titleStmt>
            <pubStmt>
                <date>2016-12-19 17:26:49</date>
            </pubStmt>
        </fileDesc>
        <encodingDesc>
            <projectDesc>
                <p>Transcoded from Humdrum with Verovio version 0.9.13-dev-1745ac2</p>
            </projectDesc>
        </encodingDesc>
    </meiHead>
    <music>
        <body>
            <mdiv>
                <score>
                    <scoreDef>
                        <staffGrp>
                            <staffDef clef.shape="G" clef.line="2" meter.count="4" meter.unit="4" n="1" lines="5" />
                        </staffGrp>
                    </scoreDef>
                    <section>
                        <measure n="1">
                            <staff n="1">
                                <layer n="1">
                                    <note dur="4" oct="4" pname="c" accid.ges="n" />
                                    <note dur="4" oct="4" pname="d" accid.ges="n" />
                                    <note dur="4" oct="4" pname="e" accid.ges="n" />
                                    <note dur="4" oct="4" pname="f" accid.ges="n" />
                                </layer>
                            </staff>
                            <annot n="1" label="test"   staff="1" tstamp="1.000000">this</annot>
                            <annot n="2" label="qstamp" staff="1" tstamp="1.000000">0</annot>
                            <annot n="2" label="qstamp" staff="1" tstamp="2.000000">1</annot>
                            <annot n="1" label="test"   staff="1" tstamp="3.000000">is</annot>
                            <annot n="2" label="qstamp" staff="1" tstamp="3.000000">2</annot>
                            <annot n="2" label="qstamp" staff="1" tstamp="4.000000">3</annot>
                        </measure>
                        <measure n="2" right="end">
                            <staff n="1">
                                <layer n="1">
                                    <note dur="4" oct="4" pname="g" accid.ges="n" />
                                    <note dur="4" oct="4" pname="a" accid.ges="n" />
                                    <note dur="4" oct="4" pname="b" accid.ges="n" />
                                    <note dur="4" oct="5" pname="c" accid.ges="n" />
                                </layer>
                            </staff>
                            <annot n="1" label="test"   staff="1" tstamp="1.000000">a</annot>
                            <annot n="2" label="qstamp" staff="1" tstamp="1.000000">4</annot>
                            <annot n="2" label="qstamp" staff="1" tstamp="2.000000">5</annot>
                            <annot n="1" label="test"   staff="1" tstamp="3.000000">test</annot>
                            <annot n="2" label="qstamp" staff="1" tstamp="3.000000">6</annot>
                            <annot n="2" label="qstamp" staff="1" tstamp="4.000000">7</annot>
                        </measure>
                    </section>
                </score>
            </mdiv>
        </body>
    </music>
</mei>

Target rendering (placement above/below the staff could be similar to <verse> or <harm> with default above or below the staff).

screen shot 2016-12-19 at 17 45 03

Also see discussion for issue #388.

@donbyrd
Copy link
Contributor

donbyrd commented Dec 20, 2016

I'd love to see Verovio rendering <annot>s! I've been using <syl> to label things in mensural notation tests; aside from making no sense, it screws up horizontal spacing. <dir> would be better, but it's not implemented for mensural staves and Laurent tells me it'd be difficult to implement it. But what I really want is an annotation visible in the graphic output, not just the MEI file -- and I'll bet Craig and I aren't the only customers for this feature. I'll remove the "low priority" label from this issue.

@craigsapp
Copy link
Contributor Author

+1 :-)

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

I am confused with annotation. It is not clear to me that they actually have to be rendered. In the guidelines, (http://music-encoding.org/documentation/3.0.0/shared/#sharedAnnotations) it reads:

In all cases, annot provides a comment upon a feature of the encoding, but never contains textual transcription.

The guidelines also say:

it [annotation] may lead to markup that cannot be effectively processed mechanistically.

So they can happen more or less everywhere, so rendering them as harm seems to be a very specific approach

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

Reading this confirms that we need to wait until it is clarified in MEI

@lpugin lpugin closed this as completed Dec 20, 2016
@kepper
Copy link
Contributor

kepper commented Dec 20, 2016

I'm more than reluctant to follow. What is an annotation, and how should it look like? Are we really able to define that once and forever? Considering the simplicity of interacting with Verovio output in Javascript, I'd rather not unify this, but leave it to something later in the chain. Admittedly, this doesn't allow to consider the required space when doing the layout of the score, but if that is the top priority, it should be fairly easy to convert <annot>s into other markup that is considered as static content of the score (like <harm> or some other suggestions from this thread) during runtime. Otherwise, Verovio would effectively kill the possibility of dynamic annotations – one of its best features.

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

One more note: annot are actually already taken into account by Verovio. They are treated as the editorial markup and allowed more or less anywhere. In the SVG output they are given as empty <g class="annot"/> and as always the id is provided to access them. So JavaScript / CSS can indeed be used to display them as desired.

@pe-ro
Copy link

pe-ro commented Dec 20, 2016

Taking a "wait-and-see" or "phased-implementation" approach to <annot> is fine with me.

One question, though:

Do all <annot> elements end up in the SVG as empty, even when the annotation has textual content? For example, what happens to --

<annot startid="#n1" plist="#n1 #n2 #n3">These 3 notes are special.</annot>

It seems to me that annotations with textual content can be treated in the same way as <dir>. An annotation could also be handled the same way as a <div>; that is, as a textual block between systems.

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

<annot startid="#n1" plist="#n1 #n2 #n3">These 3 notes are special.</annot>

Remains empty. <g>These 3 notes are special.</g> is not valid SVG. You would need to add a <text> element, and this would make sense only with positioning, wouldn't it? (Otherwise they will not show up). And here is this issue: since <annot> is allowed more or less anywhere (including in the header) it is not clear to me how they can be laid out and how they they can be represented. Handling them as <dir> sounds like a very specific type of annotation, so why not use <dir> in the first place?

I understand them as annotations to the encoding (more some sort of analytical data) and I would not expect them to be laid out and rendered by Verovio. At least until we agree on what the are (and are not) and how they should look like.

@donbyrd
Copy link
Contributor

donbyrd commented Dec 20, 2016

As I understand it, <dir> is intended for directions to performers; that clearly isn't what Craig and I are talking about. Still, I'd use <dir>, but, as I said, it isn't implemented for mensural staves and there seems to be no prospect it will be any time soon. I don't suppose we could agree on something like <annot pos="above"...> ? An attribute like "pos" would obviously be intended to be visible in the SVG.

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

I precisely want to avoid to implement things before they are clear in MEI because it should not be the implementation that sets them. For <dir> in mensural notation, the issue is also that MEI needs to be clarified and quite likely adjusted because they are not allowed in <staff> where I think they should be. Then of course they will not implement themselves automatically ;-)

@pe-ro
Copy link

pe-ro commented Dec 20, 2016

I see your point. The reason for not encoding them as directives in the first place is that <dir> is intended to be transcriptional; that is, it contains text that appears on the score being encoded. If this is a born-digital score, then the "annotations" aren't really annotations, they're "directives". On the other hand, if the encoding represents an existing, probably non-digital score, then the annotations are "comments" on the score and should be handled separately from directives that were part of the original. They're very much like editorial markup which may be rendered or not depending on the needs of the encoder/consumer of the edition.

A quick comparison of the attributes of <annot> and <dir> shows that they mostly share attributes in the logical, analytical, and gestural domains. <annot>, however, lacks all of the visual domain attributes of <dir>. If these were allowed, then <annot> elements with these attributes could be rendered the same way as <dir>s, while maintaining the semantic difference between them. In addition, it might be helpful to add a @visible attribute to both elements to allow quick toggling between visible and invisible states.

@pe-ro
Copy link

pe-ro commented Dec 20, 2016

@lpugin, It's true that <dir> isn't allowed directly within <staff>, but it is allowed within <layer>. Can you say why this isn't sufficient for implementing <dir> in mensural notation?

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

See this one #248

@kepper
Copy link
Contributor

kepper commented Dec 20, 2016 via email

@craigsapp
Copy link
Contributor Author

Then of course they will not implement themselves automatically ;-)

I always thought they were done by the implementation fairy :-)

I would argue that when Craig and Don need annotations to behave like

, why don't you convert your to during runtime, just for displaying it with Verovio.

That would be possible. <harm> still seems closer and would work fine with the addition of @n for vertical offsets, but I will have to test <dir> as i was not thinking of that. One problem: can the font be set for dir? I do not want to display the analytic data in italic. A secondary but general problem which occurs in dirs near linebreaks where the text goes off the side of the page:

screen shot 2016-12-20 at 10 52 45

And another thing I will have to study is how multiple dirs behave at the same timepoint (and can they be positioned with @n for example).

@donbyrd
Copy link
Contributor

donbyrd commented Dec 20, 2016

@pe-ro , you say 'If this is a born-digital score, then the "annotations" aren't really annotations, they're "directives". On the other hand, if the encoding represents an existing, probably non-digital score, then the annotations are "comments" on the score...' But I'm talking about a born-digital score -- one intended for demonstration purposes, not real music, so admittedly unusual -- in which the "annotations" I want really are annotations, not directives.

@kepper, yet again, since <dir> isn't implemented for mensural staves, converting <annot> to <dir> wouldn't help me.

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

I think support for for @n on harm makes sense. We should actually think about support of @n on control events more generally.

@craigsapp system breaks is also a general issue to consider not only for dir but also for tempo, for example. One way to look at it is to check if we have any of these overlapping measures (in terms for rendering) and then avoid system breaks to happen there. (Breaking them nicely could be another approach but certainly more complicated)

Font: you can change it with rend. Something like

<dir><rend fontstyle="normal">Your directive</rend></dir>

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

@donbyrd rendering annot as dir is really a shortcut for me. This works but only of a very specific type of annotation (e.g., the ones that are equivalent to directives). What about the others?

I would rather do something like:

<supplied reason="documentation"><dir>mensural black</dir></supplied>

@pe-ro
Copy link

pe-ro commented Dec 20, 2016

Thanks, I'd forgotten about that. (#248, that is.)

The main reason they're in <layer> is to isolate them; that is, to have them be in one place in CMN and another in Mensural notation. Re-reading my own statements, I think what I meant was that they can be allowed within <staff> (instead of <layer>) in Mensural notation and remain in <measure> in CMN, but I'll have to verify this. Of course, they will be available in both places when mei-all is used. The solution there remains the same: Use mei-all very sparingly. :-)

@pe-ro
Copy link

pe-ro commented Dec 20, 2016

I would rather do something like:

mensural black

That's going to be a hard-sell for lots of folks. If it helps, think of

<annot>mensural black</annot>

as syntactic sugar for

<supplied reason="documentation"><dir>mensural black</dir></supplied>

😀

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

Yes, I can understand this. But then, what would you expect to see with something like this

<section>
    <annot startid="#m1" endid="#m20">The exposition goes from measure 1 to 25</annot>
    <measure n="1" xml:id="m1">
        <!-- ... --->
    </measure>
    <!-- ... --->
</section>

or this

<note>
    <verse>
        <syl><annot>What is this?</annot>The</syl>
    </verse>
</note>

@pe-ro
Copy link

pe-ro commented Dec 20, 2016

@kepper, there's nothing necessarily problematic about treating a <div> as a "block between systems" in the context of a continuous system. But it does require re-thinking what the so-called "continuous system" consists of. (And perhaps instead of "block between systems", I should have said "block above/below systems".)

In my view, a "continuous system" consists of a single system, made up of several "staves", where "staff" denotes a stream of events. It's made up of streams of events; not just the traditional staves with ruled lines, but also "staves" of text accompanying the lined-ones. Conceptually, one can think of <tempo>, <dir>, <harm>, and even <div> and <annot> as "staves". It's just that these are discontinuous staves, so the best way to say where they appear and what's on them is to provide their information relative to the lined staves. These "staves" have vertical size, in much the same way that a traditional staff has. The difference is that sometimes the "events" on these "staves" get compressed horizontally and so grow vertically. For instance, text written above a measure, unlike the measure itself, will grow in height when it's given horizontal limitations, in spite of whether it's a <dir>, <div> or <annot>.

Most text blocks will occur above or below the lined staves, but it's possible to imagine text blocks between staves. I think we're getting close to that in the discussion of dynamics that occur between staves and are associated with both staves. What if, instead of a string like "mf", the dynamic was a 103-character string? One option would be to allow that string to continue "to the right" until it was completely displayed. Another would be to find places where it could be broken into lines, and extra space created between the staves to fit those lines of text. What differentiates these two possibilities is the setting of the right-side boundary of the text. If there's no boundary or the boundary exists far to the "right", then the text can be rendered on a single line. If the boundary is the right bar line, then the text either has to be truncated there, or wrapped around. With <dir> one can set the left and right boundaries with @tstamp and @tstamp2. Why not allow the same with <annot>?

@pe-ro
Copy link

pe-ro commented Dec 20, 2016

@lpugin, for your first example, I would expect to see the string "The exposition goes from measure 1 to 25" "left justified" starting at the left edge of measure 1. I wouldn't expect to see the second example at all because no data has been provided for rendering it.

@lpugin
Copy link
Contributor

lpugin commented Dec 20, 2016

What to you mean by data for rendering it? A @startid?

<note>
    <verse>
        <syl xml:id="s"><annot startid="#s">What is this?</annot>The</syl>
    </verse>
</note>

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

OK, I have been not paying much attention to those yet, and thinking along the lines that <dynam> is mostly reserved for the symbols such as "f" or "mp".

In my mind, anything affecting volume is a dynamic.

For <tempo> there is usually a big rendering difference between "a tempo" and "Lento". Are these both <tempo> elements?

And anything affecting speed/time is appropriate for <tempo>.

What would dolce be categorized under? It is always italic but is that a dynamic or a tempo or something other than a <dir>? Then there would be the word agogically which would mean play with temporal accents...

These defy categorization and so, like the Guidelines say, should go into a more generic "bin"; that is, <dir>, whose default rendering, I contend, should be Roman. If that's not what's needed, then use <rend> to change their appearance.

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

@craigsapp: Even if "a tempo" and "Lento" are both marked using <tempo>, their visual appearance can be controlled using <rend>. Again, the idea is to mark semantic categories of things, not visual categories.

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

That being said, there's never going to be total agreement about the classification of these things. We can only offer the "bins" -- it's up to encoders to use them appropriately. And even "appropriately" might mean different things to different people.

The only "absolute" approach would be to not differentiate the various kinds of text at all, and just allow for controlling the visual rendition. But that way leads back to a "drawing program" that is musically illiterate.

@kepper
Copy link
Contributor

kepper commented Dec 21, 2016 via email

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

@craigsapp: Your explanation of how boxes above and below the staff expand to accommodate their contents is exactly what I have in mind. The remaining question is, What should be done if @tstamp2 is absent?

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

@kepper: I think you're right, I was just raising the question.

@kepper
Copy link
Contributor

kepper commented Dec 21, 2016 via email

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

Yes, I think so.

@craigsapp
Copy link
Contributor Author

What should be done if @tstamp2 is absent?

If there is no @tstamp2, then the text should probably be be boundless, and keep going as long as there is text. System breaks should probably be allowed to break long text between systems (with a layout preference to avoid breaking a dir). Or dirs would automatically be bounded by a linebreak.

Here are two possible handlings of dirs which extend past the last measure on a line:

(A) poorly placed dir which the system layout system should try to avoid. If it cannot be avoided, then do one of two things:
(B) Insert an automatic @tstamp2 to bound the dir to the end of the system.
(C) split the dir and continue the overfull text onto the next system.

screen shot 2016-12-21 at 10 45 07

@craigsapp
Copy link
Contributor Author

Here is my interpretation of examples of annotations:

screen shot 2016-12-21 at 10 59 22

The italic and outline styled text are not part of the music, and they are also outside of the layout considerations (I typeset the music first and then added the text annotations). The text is analytical, as it is marking structural aspects of the form, but seems to be in a different category from the initial example (where the relationship between the annotations needs to be preserved, such as verses in lyrics).

@craigsapp
Copy link
Contributor Author

And here is a "manuscript" version of annotations:

http://www.willemmengelberg.nl/?q=discografie

screen shot 2016-12-21 at 11 30 49

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

@craigsapp: I like what you're suggesting because --

  • it maintains separation between <dir> (something part of the score) and <annot> (not part of the score, but "layered" on top),
  • the rendition can be essentially the same for both. The difference is whether the text is considered during the layout process (<dir>) or not (<annot>),
  • it gives the encoder control over when/how the text is drawn. If line breaks are present, they should be respected. But, I think we still need to work out what happens if there are line breaks without @tstamp2. Should the line breaks imply an @tstamp2 value at/just before the bar line? What happens if there's no bar line?

I agree with your assessment of extensive text --

  • It should continue into the following measure(s), and even across systems if necessary. (But, the text has to be associated with the same staff. It's not clear to me that your "C" example shows this. I'm looking at this as a 2-staff system, so the text should continue on to the 1st staff in the next system, even on to the next page if necessary.)
  • If there aren't any more measures/systems (i.e., this is the last measure), then a @tstamp2 value can be assumed in measured music; that is, it should be just before the bar line of the measure. Since time stamps ain't so useful in mensural notation, there has to be a different routine, somehow using @endid.

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

@craigsapp: Yep, those are annotations all right! 😀

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

Let me qualify that last statement -- some of those things are MEI annotations since <annot> at present only accommodates text (i.e., word-like) annotations. That is, the added dynamics, graphical signs, etc. aren't currently available. But, we might be able to extend the content model to allow at least some of them.

@lpugin
Copy link
Contributor

lpugin commented Dec 21, 2016

Since time stamps ain't so useful in mensural notation, there has to be a different routine, somehow using @eNdiD.

I agree. Mensural music should use exclusively @startid and @endid anyway and cannot reasonably rely on timestamps.

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

I don't know about you guys, but I feel like we've made a break through. From here on, it's just details. 😉

@lpugin
Copy link
Contributor

lpugin commented Dec 21, 2016

Yes, this is good. If we do not want to make any distinction between annotations I think adding an attribute @visible would be good in order to make the distinction between something like, let's say, a conductor annotation, and an annotation of the encoding that is not expected to be rendered at all. Tools can decide if they shows them or not when @visible is not given.

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

@lpugin: Adding @visible sounds reasonable.

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

Circling back to address where <dir> can occur --

Here's a test file that allows <dir> inside <staff>. It shows all of the elements that can occur within <layer>, followed by all those that can occur in <staff>. <dir> has effectively been moved from <layer> to <staff>.

@lpugin: Is this what you had in mind? Note that this change is not backwards compatible, so should we allow <dir> in both places for the time being with deprecation in <layer> later, or just go all the way and break existing encodings and fix them in the next up-conversion stylesheet?

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="mensuralControlEventTest.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="mensuralControlEventTest.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<!--
  For this test, the cmn, neumes, cmnOrnaments, corpus, frbr, and performance modules are all inactive.
-->
<score xmlns="http://www.music-encoding.org/ns/mei" xmlns:xi="http://www.w3.org/2001/XInclude"
  xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <scoreDef>
    <staffGrp barthru="true" symbol="line">
      <staffDef xml:id="P1" n="1" clef.shape="G" clef.line="2" lines="5">
        <label>Superius</label>
      </staffDef>
    </staffGrp>
  </scoreDef>
  <section>
    <staff n="1">      
      <layer>
        <!-- elements allowed in <layer> -->
        <accid/>
        <add/>
        <anchoredText/>
        <annot/>
        <app>
          <rdg/>
        </app>
        <artic/>
        <barLine/>
        <choice/>
        <chord/>
        <clef/>
        <clefGrp>
          <clef/>
        </clefGrp>
        <corr/>
        <curve/>
        <custos/>
        <damage/>
        <del/>
        <!-- <dir> is no longer allowed in <layer> -->
        <!-- startid and endid have bogus value just to satisfy the need for one -->
        <!--<dir startid="#P1" endid="#P1">
          <rend fontstyle="normal">
            <choice>
              <orig xml:lang="ru">Между тем пионер Петя, который остался<lb/>стоять за запертой
                калиткой и видел всё<lb/> происходящее, нисколько не испугался.</orig>
              <reg xml:lang="en">"Meanwhile pioneer Peter, who stood behind a locked gate and saw
                everything that happened, was not at all frightened."</reg>
            </choice>
          </rend>
        </dir>-->      
        <div/>
        <dot/>
        <gap/>
        <handShift/>
        <keySig/>
        <ligature/>
        <line startid="#P1" endid="#P1"/>
        <lyrics>
          <verse>
            <syl/>
          </verse>
        </lyrics>
        <mensur/>
        <note/>
        <orig/>
        <pad num="0"/>
        <pb/>
        <proport/>
        <reg/>
        <rest/>
        <restore/>
        <sb/>
        <scoreDef/>
        <sic/>
        <space/>
        <staffDef/>
        <subst>
          <del/>
          <add/>
        </subst>
        <supplied/>
        <unclear/>
      </layer>
      
      <!-- elements (in addition to <layer>) allowed in <staff> -->
      <add/>
      <annot/>
      <app>
        <rdg/>
      </app>
      <choice/>
      <corr/>
      <damage/>
      <del/>
      <!-- <dir> is now allowed within <staff> -->
      <!-- startid and endid have bogus value just to satisfy the need for one -->
      <dir startid="#P1" endid="#P1">
        <rend fontstyle="normal">
          <choice>
            <orig xml:lang="ru">Между тем пионер Петя, который остался<lb/>стоять за запертой
              калиткой и видел всё<lb/> происходящее, нисколько не испугался.</orig>
            <reg xml:lang="en">"Meanwhile pioneer Peter, who stood behind a locked gate and saw
              everything that happened, was not at all frightened."</reg>
          </choice>
        </rend>
      </dir>
      <div/>
      <gap/>
      <handShift/>
      <orig/>
      <pb/>
      <reg/>
      <restore/>
      <sb/>
      <scoreDef/>
      <sic/>
      <staffDef/>
      <subst>
        <del/>
        <add/>
      </subst>
      <supplied/>
      <unclear/>
    </staff>
  </section>
</score>

@pe-ro
Copy link

pe-ro commented Dec 21, 2016

More details 😀 --

If <dir> is for those things that are part of the score and <annot> is for stuff "on top" of the score, then <div> can be removed in "score context" (ending, layer, measure, part, score, section, staff, and syllable) and retained in "text context" (back, div, front, history, lem, and rdg), correct?

Also, <annot> should have the same model as <dir>; that is, --

<rng:zeroOrMore>
  <rng:choice>
    <rng:text/>
    <rng:ref name="model.textPhraseLike.limited"/>
    <rng:ref name="model.graphicPrimitiveLike"/>
    <rng:ref name="model.editLike"/>
    <rng:ref name="model.transcriptionLike"/>
  </rng:choice>
</rng:zeroOrMore>

which permits text and in-line markup, where in-line markup includes editorial and transcriptional elements when those modules are activated. Lines and curves are also included, but I'm wondering if we should suppress those now. SMuFL-defined items can be included via <symbol>.

With the original purpose of <div> now subsumed into <dir>, I propose to add a <commentary> (or other suitably named) element to capture textual comments. This element will have the same content model as <div> and will permit the encoder to capture commentary at or near the place where said thing occurs. This commentary is not intended to be rendered by Verovio at this time. Other software, however, may want to take the opposite approach; that is, render it instead of the notation, perhaps making it part of the front or back matter of an edition via a generic referencing/copying mechanism.

Sound like a plan?

@donbyrd
Copy link
Contributor

donbyrd commented Dec 21, 2016

Re fonts: I couldn't find anything useful in Read's Music Notation, 2nd edition -- no surprise; it's so much less complete and less well organized than Gould's Behind Bars. But, as I said before, page 492 of Gould goes into quite some detail; she begins "[R]oman type is used for player allocation, instrument changes, and technical instructions, with bold roman for tempi; italic type is used for expression marks, with stylised bold italics for dynamics." She goes on to list some exceptions and to discuss general principles, but she doesn't mention Times Roman or any other specific font. (Times Roman didn't exist until around 1930, so it certainly wasn't the standard font when CMN was getting standardized!)

The examples of tempo indications on p. 183 of Gould are all in bold roman; they include "accel." and "allarg.", so it's clear how broadly she agrees with @pe-ro that "anything affecting speed/time is appropriate for ". To double-check, I just looked at six random scores on my shelf: works by Bartok (Boosey & Hawkes edition), Bartok (Universal), Beethoven (Eulenberg), Beethoven (Philharmonia), Dvorak (Kalmus; I'd guess a reprint from Simrock), and Rimsky-Korsakov (Belaieff). All of them print relative tempo changes as well as standard tempo marks in the same bold roman font, except the Bartok/Universal edition, which prints both in the same bold italic font. So @pe-ro seems to be correct. The degree of consistency surprises me; I would have guessed that 19th century editions would often use different fonts for relative and "absolute" tempo marks, but I think at least half the scores I looked at are 19th century editions.

As for dynamics, all of the scores I looked at use italic for "cresc.", "diminuendo", etc., as well as "ff", "mp", etc., though the former type of dynamics aren't in the "stylized" font. So again @pe-ro is correct, and agrees with Gould.

And re technical instructions, I didn't look as closely, but everyone seems to use regular roman, as Gould says.

Finally, she gives an example of an expression mark, "dolce e...", and it's in italic.

@kepper
Copy link
Contributor

kepper commented Dec 21, 2016 via email

@donbyrd
Copy link
Contributor

donbyrd commented Dec 21, 2016

I agree with @kepper; we should discuss on MEI-L. Otherwise, it sounds like a plan!

@pe-ro
Copy link

pe-ro commented Dec 22, 2016

@kepper: Ok, will you summarize the discussion here on MEI-L and solicit additional input? Thanks, honey. 😀

@donbyrd
Copy link
Contributor

donbyrd commented Dec 22, 2016

W/r/t fonts: As @pe-ro says, this is minor; encoding semantics is the thing. Still, to round out earlier comments: I noticed that one of @craigsapp's examples from the Chopin Etudes Op. 25 has "a tempo" in non-bold italics instead of roman bold. Following that up, I looked at my copy of the Chopin Preludes and Etudes, Paderewski edition. Tempo-related markings like "a tempo", "accel.", and "retin." are always in non-bold italics in the Preludes, Etudes Op. 10, and Etudes Op. 25.

@craigsapp
Copy link
Contributor Author

@pe-ro said:

It's not clear to me that your "C" example shows this. I'm looking at this as a 2-staff system, so the text should continue on to the 1st staff in the next system, even on to the next page if necessary.)

That was a single-staff system, so it behaves as you are thinking.

@pe-ro
Copy link

pe-ro commented Dec 22, 2016

@craigsapp, Great!

@donbyrd
Copy link
Contributor

donbyrd commented Feb 18, 2017

Say, there's been a fair amount of discussion of <dir> etc. on the mensural-ig list recently. But this topic is certainly not relevant only to mensural music; shouldn't it be moved to MEI-L?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants