rism-digital / verovio

🎵 Music notation engraving library for MEI with MusicXML and Humdrum support and various toolkits (JavaScript, Python)
https://www.verovio.org
GNU Lesser General Public License v3.0
683 stars 185 forks source link

Refinement of <octave> layout #1282

Closed craigsapp closed 1 year ago

craigsapp commented 4 years ago

In the following example (Hindemith sonata for two pianos), the placement of the octave line is ambiguous:

Screen Shot 2020-01-27 at 3 10 48 PM

The dotted lines for the octave marking are closer to the bottom staff of the part above, and adding to the confusion is that there is a line wrap, so there is no downward tick to indicate that it is an 8va rather than an 8ba.

The reason for the spacing is due to a rectangular bounding box:

Screen Shot 2020-01-27 at 3 19 15 PM

There are a few possibilities for improving the readability of this sort of case:

(1) add "va" and "ba" depending on the direction of the octave shift. Usually this is clear from the context, but due to the bounding box behavior, it is difficult to notice until the end. Currently there is only an "8", but it is clear that it means 8va due to the placement of the line near the top of the "8" (but this is a small difference that would not be too obvious). (2) refine the bounding box to allow a cut-out in the middle. (3) Add padding above the octave line, particularly when there is a different part above it on the same system.

Here is a comparison of the same music rendered in Sibelius (with all of the above adjustments:

Screen Shot 2020-01-27 at 6 30 09 PM Screen Shot 2020-01-27 at 6 33 19 PM

(putting parentheses around the continuing "8" at the linebreak might also be useful, but less important).

MEI test data:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/4.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="https://music-encoding.org/schema/4.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="4.0.0">
 <meiHead>
  <fileDesc>
   <titleStmt>
    <title />
   </titleStmt>
   <pubStmt />
  </fileDesc>
  <encodingDesc>
   <appInfo>
    <application isodate="2020-01-27T15:13:00" version="2.5.0-dev-5ff46f4">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <workList>
   <work>
    <title />
   </work>
  </workList>
  <extMeta>
   <frames xmlns="http://www.humdrum.org/ns/humxml">
    <metaFrame n="79" token="!!!system-decoration: {(s1,s2)}{(s3,s4)}" xml:id="L80">
     <frameInfo>
      <startTime float="28" />
      <frameType>reference</frameType>
      <referenceKey>system-decoration</referenceKey>
      <referenceValue>{(s1,s2)}{(s3,s4)}</referenceValue>
     </frameInfo>
    </metaFrame>
   </frames>
  </extMeta>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="mdiv-0000001764034671">
    <score xml:id="score-0000000653900433">
     <scoreDef xml:id="scoredef-0000000870140608" midi.bpm="240">
      <staffGrp xml:id="staffgrp-0000002017301906" bar.thru="false">
       <staffGrp xml:id="staffgrp-0000001956858490" symbol="brace" bar.thru="true">
        <label xml:id="label-0000001799213450">Piano</label>
        <labelAbbr xml:id="labelAbbr-0000000536140083">Pno.</labelAbbr>
        <staffDef xml:id="staffdef-0000001612919353" n="1" lines="5">
         <clef xml:id="clef-L7F5" shape="G" line="2" />
         <keySig xml:id="keysig-L8F5" pname="c" mode="major" sig="0" />
         <meterSig xml:id="metersig-L10F5" count="4" unit="4" />
        </staffDef>
        <staffDef xml:id="staffdef-0000001335565366" n="2" lines="5">
         <clef xml:id="clef-L7F4" shape="F" line="4" />
         <keySig xml:id="keysig-L8F4" pname="c" mode="major" sig="0" />
         <meterSig xml:id="metersig-L10F4" count="4" unit="4" />
        </staffDef>
       </staffGrp>
       <staffGrp xml:id="staffgrp-0000001649961560" symbol="brace" bar.thru="true">
        <label xml:id="label-0000001990335895">Piano</label>
        <labelAbbr xml:id="labelAbbr-0000001142215609">Pno.</labelAbbr>
        <staffDef xml:id="staffdef-0000000155225428" n="3" lines="5">
         <clef xml:id="clef-L7F2" shape="G" line="2" />
         <keySig xml:id="keysig-L8F2" pname="c" mode="major" sig="0" />
         <meterSig xml:id="metersig-L10F2" count="4" unit="4" />
        </staffDef>
        <staffDef xml:id="staffdef-0000001454456273" n="4" lines="5">
         <clef xml:id="clef-L7F1" shape="F" line="4" />
         <keySig xml:id="keysig-L8F1" pname="c" mode="major" sig="0" />
         <meterSig xml:id="metersig-L10F1" count="4" unit="4" />
        </staffDef>
       </staffGrp>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1" n="0">
       <staff xml:id="staff-0000001612904477" n="1">
        <layer xml:id="layer-L1F5N1" n="1">
         <beam xml:id="beam-L14F5-L15F5">
          <chord xml:id="chord-L14F5" dur="8">
           <note xml:id="note-L14F5S1" oct="3" pname="b" accid.ges="n" />
           <note xml:id="note-L14F5S2" oct="4" pname="f" accid="s" />
          </chord>
          <chord xml:id="chord-L15F5" dur="8">
           <note xml:id="note-L15F5S1" oct="3" pname="b" accid.ges="n" />
           <note xml:id="note-L15F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
         </beam>
         <rest xml:id="rest-L16F5" dur="4" />
         <beam xml:id="beam-L19F5-L22F5">
          <chord xml:id="chord-L19F5" dur="8">
           <note xml:id="note-L19F5S1" oct="4" pname="f">
            <accid xml:id="accid-L19F5S1" accid="s" func="caution" />
           </note>
           <note xml:id="note-L19F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L20F5" dur="8" oct="3" pname="b">
           <accid xml:id="accid-L20F5" accid="n" func="caution" />
          </note>
          <chord xml:id="chord-L21F5" dur="8">
           <note xml:id="note-L21F5S1" oct="4" pname="d">
            <accid xml:id="accid-L21F5S1" accid="n" func="caution" />
           </note>
           <note xml:id="note-L21F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L22F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
        </layer>
       </staff>
       <staff xml:id="staff-0000001152696655" n="2">
        <layer xml:id="layer-L1F4N1" n="1">
         <mRest xml:id="mrest-L14F4" />
        </layer>
       </staff>
       <staff xml:id="staff-0000002146684504" n="3">
        <layer xml:id="layer-L1F2N1" n="1">
         <note xml:id="note-L14F2" dur="4" oct.ges="6" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L16F2" dur="8" oct.ges="6" oct="5" pname="g" accid.ges="n" />
         <rest xml:id="rest-L17F2" dur="8" />
         <chord xml:id="chord-L19F2" dur="2">
          <note xml:id="note-L19F2S1" oct.ges="5" oct="4" pname="g" accid.ges="n" />
          <note xml:id="note-L19F2S2" oct.ges="6" oct="5" pname="g" accid.ges="n" />
         </chord>
        </layer>
       </staff>
       <staff xml:id="staff-0000001187233860" n="4">
        <layer xml:id="layer-L1F1N1" n="1">
         <rest xml:id="rest-L14F1" dur="2" />
         <clef xml:id="clef-L18F1" shape="G" line="2" />
         <note xml:id="note-L19F1" dur="4" oct="4" pname="b" accid.ges="n" />
         <note xml:id="note-L21F1" dur="8" oct="5" pname="e" accid.ges="n" />
         <rest xml:id="rest-L22F1" dur="8" />
        </layer>
       </staff>
       <dynam xml:id="dynam-L19F6" staff="1" tstamp="3.000000" vgrp="100">pp</dynam>
       <dynam xml:id="dynam-L14F3" staff="3" tstamp="1.000000" vgrp="100">p</dynam>
       <slur xml:id="slur-L14F2-L16F2" staff="3" startid="#note-L14F2" endid="#note-L16F2" />
       <slur xml:id="slur-L19F1-L21F1" staff="4" startid="#note-L19F1" endid="#note-L21F1" />
       <tie xml:id="tie-L19F2S1-L24F2S1" startid="#note-L19F2S1" endid="#note-L24F2S1" />
       <tie xml:id="tie-L19F2S2-L24F2S2" startid="#note-L19F2S2" endid="#note-L24F2S2" />
       <octave xml:id="octave-0000000819317461" staff="3" startid="#note-L14F2" endid="#note-L67F2" dis="8" dis.place="above" />
      </measure>
      <measure xml:id="measure-L23" n="155">
       <staff xml:id="staff-L23F5N1" n="1">
        <layer xml:id="layer-L23F5N1" n="1">
         <beam xml:id="beam-L24F5-L25F5">
          <chord xml:id="chord-L24F5" dur="8">
           <note xml:id="note-L24F5S1" oct="4" pname="e" accid.ges="n" />
           <note xml:id="note-L24F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L25F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
         <rest xml:id="rest-L26F5" dur="4" />
         <rest xml:id="rest-L28F5" dur="4" />
         <beam xml:id="beam-L30F5-L31F5">
          <chord xml:id="chord-L30F5" dur="8">
           <note xml:id="note-L30F5S1" oct="4" pname="a" accid.ges="n" />
           <note xml:id="note-L30F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L31F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
        </layer>
       </staff>
       <staff xml:id="staff-L23F4N1" n="2">
        <layer xml:id="layer-L23F4N1" n="1">
         <beam xml:id="beam-L24F4-L27F4">
          <note xml:id="note-L24F4" dur="8" oct="1" pname="a" accid.ges="n" />
          <note xml:id="note-L25F4" dur="8" oct="2" pname="a" accid.ges="n" />
          <note xml:id="note-L26F4" dur="8" oct="2" pname="c" accid="s" />
          <note xml:id="note-L27F4" dur="8" oct="2" pname="f" accid="s" />
         </beam>
         <beam xml:id="beam-L28F4-L29F4">
          <note xml:id="note-L28F4" dur="8" oct="1" pname="b" accid.ges="n" />
          <note xml:id="note-L29F4" dur="8" oct="2" pname="b" accid.ges="n" />
         </beam>
         <rest xml:id="rest-L30F4" dur="4" />
        </layer>
       </staff>
       <staff xml:id="staff-L23F2N1" n="3">
        <layer xml:id="layer-L23F2N1" n="1">
         <chord xml:id="chord-L24F2" dur="4">
          <note xml:id="note-L24F2S1" oct.ges="5" oct="4" pname="g" accid.ges="n" />
          <note xml:id="note-L24F2S2" oct.ges="6" oct="5" pname="g" accid.ges="n" />
         </chord>
         <beam xml:id="beam-L26F2-L27F2">
          <note xml:id="note-L26F2" dur="8" oct.ges="6" oct="5" pname="a" accid.ges="n" />
          <note xml:id="note-L27F2" dur="8" oct.ges="6" oct="5" pname="g" accid.ges="n" />
         </beam>
         <note xml:id="note-L28F2" dur="4" oct.ges="6" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L30F2" dur="4" oct.ges="6" oct="5" pname="c" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L23F1N1" n="4">
        <layer xml:id="layer-L23F1N1" n="1">
         <note xml:id="note-L24F1" dur="2" oct="5" pname="e" accid.ges="n" />
         <rest xml:id="rest-L28F1" dur="2" />
        </layer>
       </staff>
       <slur xml:id="slur-L26F2-L28F2" staff="3" startid="#note-L26F2" endid="#note-L28F2" />
      </measure>
      <measure xml:id="measure-L32" n="156">
       <staff xml:id="staff-L32F5N1" n="1">
        <layer xml:id="layer-L32F5N1" n="1">
         <beam xml:id="beam-L33F5-L36F5">
          <chord xml:id="chord-L33F5" dur="8">
           <note xml:id="note-L33F5S1" oct="4" pname="e" accid.ges="n" />
           <note xml:id="note-L33F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L34F5" dur="8" oct="3" pname="b" accid.ges="n" />
          <chord xml:id="chord-L35F5" dur="8">
           <note xml:id="note-L35F5S1" oct="4" pname="f">
            <accid xml:id="accid-L35F5S1" accid="n" func="caution" />
           </note>
           <note xml:id="note-L35F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L36F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
         <rest xml:id="rest-L37F5" dur="2" />
        </layer>
       </staff>
       <staff xml:id="staff-L32F4N1" n="2">
        <layer xml:id="layer-L32F4N1" n="1">
         <rest xml:id="rest-L33F4" dur="4" />
         <beam xml:id="beam-L35F4-L36F4">
          <note xml:id="note-L35F4" dur="8" oct="1" pname="a" accid.ges="n" />
          <note xml:id="note-L36F4" dur="8" oct="2" pname="a" accid.ges="n" />
         </beam>
         <beam xml:id="beam-L37F4-L40F4">
          <note xml:id="note-L37F4" dur="8" oct="2" pname="c" accid="s" />
          <note xml:id="note-L38F4" dur="8" oct="2" pname="f" accid="s" />
          <note xml:id="note-L39F4" dur="8" oct="1" pname="b" accid.ges="n" />
          <note xml:id="note-L40F4" dur="8" oct="2" pname="b" accid.ges="n" />
         </beam>
        </layer>
       </staff>
       <staff xml:id="staff-L32F2N1" n="3">
        <layer xml:id="layer-L32F2N1" n="1">
         <beam xml:id="beam-L33F2-L34F2">
          <note xml:id="note-L33F2" dur="8" oct.ges="6" oct="5" pname="d" accid.ges="n" />
          <note xml:id="note-L34F2" dur="8" oct.ges="6" oct="5" pname="f" accid.ges="n" />
         </beam>
         <note xml:id="note-L35F2" dur="8" oct.ges="6" oct="5" pname="g" accid.ges="n" />
         <rest xml:id="rest-L36F2" dur="8" />
         <chord xml:id="chord-L37F2" dur="2">
          <note xml:id="note-L37F2S1" oct.ges="5" oct="4" pname="g" accid.ges="n" />
          <note xml:id="note-L37F2S2" oct.ges="6" oct="5" pname="g" accid.ges="n" />
         </chord>
        </layer>
       </staff>
       <staff xml:id="staff-L32F1N1" n="4">
        <layer xml:id="layer-L32F1N1" n="1">
         <rest xml:id="rest-L33F1" dur="2" />
         <beam xml:id="beam-L37F1-L38F1">
          <note xml:id="note-L37F1" dur="8" oct="4" pname="b" accid.ges="n" />
          <note xml:id="note-L38F1" dur="8" oct="5" pname="d" accid.ges="n" />
         </beam>
         <note xml:id="note-L39F1" dur="8" oct="5" pname="e" accid.ges="n" />
         <rest xml:id="rest-L40F1" dur="8" />
        </layer>
       </staff>
       <slur xml:id="slur-L33F2-L35F2" staff="3" startid="#note-L33F2" endid="#note-L35F2" />
       <slur xml:id="slur-L37F1-L39F1" staff="4" startid="#note-L37F1" endid="#note-L39F1" />
       <tie xml:id="tie-L37F2S1-L42F2S1" startid="#note-L37F2S1" endid="#note-L42F2S1" />
       <tie xml:id="tie-L37F2S2-L42F2S2" startid="#note-L37F2S2" endid="#note-L42F2S2" />
      </measure>
      <measure xml:id="measure-L41" n="157">
       <staff xml:id="staff-L41F5N1" n="1">
        <layer xml:id="layer-L41F5N1" n="1">
         <beam xml:id="beam-L42F5-L45F5">
          <chord xml:id="chord-L42F5" dur="8">
           <note xml:id="note-L42F5S1" oct="4" pname="g" accid="s" />
           <note xml:id="note-L42F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L43F5" dur="8" oct="3" pname="b" accid.ges="n" />
          <chord xml:id="chord-L44F5" dur="8">
           <note xml:id="note-L44F5S1" oct="4" pname="c" accid="s" />
           <note xml:id="note-L44F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L45F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
         <beam xml:id="beam-L46F5-L47F5">
          <chord xml:id="chord-L46F5" dur="8">
           <note xml:id="note-L46F5S1" oct="4" pname="d" accid.ges="n" />
           <note xml:id="note-L46F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L47F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
         <rest xml:id="rest-L48F5" dur="4" />
        </layer>
       </staff>
       <staff xml:id="staff-L41F4N1" n="2">
        <layer xml:id="layer-L41F4N1" n="1">
         <rest xml:id="rest-L42F4" dur="4" />
         <rest xml:id="rest-L44F4" dur="4" />
         <beam xml:id="beam-L46F4-L49F4">
          <note xml:id="note-L46F4" dur="8" oct="1" pname="a" accid.ges="n" />
          <note xml:id="note-L47F4" dur="8" oct="2" pname="a" accid.ges="n" />
          <note xml:id="note-L48F4" dur="8" oct="2" pname="c" accid="s" />
          <note xml:id="note-L49F4" dur="8" oct="2" pname="f" accid="s" />
         </beam>
        </layer>
       </staff>
       <staff xml:id="staff-L41F2N1" n="3">
        <layer xml:id="layer-L41F2N1" n="1">
         <beam xml:id="beam-L42F2-L45F2">
          <chord xml:id="chord-L42F2" dur="8">
           <note xml:id="note-L42F2S1" oct.ges="5" oct="4" pname="g" accid.ges="n" />
           <note xml:id="note-L42F2S2" oct.ges="6" oct="5" pname="g" accid.ges="n" />
          </chord>
          <note xml:id="note-L43F2" dur="8" oct.ges="6" oct="5" pname="b" accid="f" />
          <note xml:id="note-L44F2" dur="8" oct.ges="6" oct="5" pname="a" accid="f" />
          <note xml:id="note-L45F2" dur="8" oct.ges="6" oct="5" pname="g" accid.ges="n" />
         </beam>
         <note xml:id="note-L46F2" dur="4" oct.ges="6" oct="5" pname="c" accid.ges="n" />
         <note xml:id="note-L48F2" dur="4" oct.ges="6" oct="5" pname="d" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L41F1N1" n="4">
        <layer xml:id="layer-L41F1N1" n="1">
         <note xml:id="note-L42F1" dur="2" oct="5" pname="e" accid.ges="n" />
         <rest xml:id="rest-L46F1" dur="2" />
        </layer>
       </staff>
       <hairpin xml:id="hairpin-L46F6" staff="1" tstamp="3.000000" tstamp2="1m+3.0000" form="cres" vgrp="100" />
       <slur xml:id="slur-L43F2-L46F2" staff="3" startid="#note-L43F2" endid="#note-L46F2" />
       <hairpin xml:id="hairpin-L46F3" staff="3" tstamp="3.000000" tstamp2="1m+2.5000" form="cres" vgrp="100" />
      </measure>
      <measure xml:id="measure-L50" n="158">
       <staff xml:id="staff-L50F5N1" n="1">
        <layer xml:id="layer-L50F5N1" n="1">
         <rest xml:id="rest-L51F5" dur="4" />
         <beam xml:id="beam-L53F5-L54F5">
          <chord xml:id="chord-L53F5" dur="8">
           <note xml:id="note-L53F5S1" oct="4" pname="g">
            <accid xml:id="accid-L53F5S1" accid="n" func="caution" />
           </note>
           <note xml:id="note-L53F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L54F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
         <beam xml:id="beam-L55F5-L58F5">
          <chord xml:id="chord-L55F5" dur="8">
           <note xml:id="note-L55F5S1" oct="4" pname="d" accid.ges="n" />
           <note xml:id="note-L55F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L56F5" dur="8" oct="3" pname="b" accid.ges="n" />
          <chord xml:id="chord-L57F5" dur="8">
           <note xml:id="note-L57F5S1" oct="4" pname="d" accid="s" />
           <note xml:id="note-L57F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L58F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
        </layer>
       </staff>
       <staff xml:id="staff-L50F4N1" n="2">
        <layer xml:id="layer-L50F4N1" n="1">
         <beam xml:id="beam-L51F4-L52F4">
          <note xml:id="note-L51F4" dur="8" oct="1" pname="b" accid.ges="n" />
          <note xml:id="note-L52F4" dur="8" oct="2" pname="b" accid.ges="n" />
         </beam>
         <rest xml:id="rest-L53F4" dur="4" />
         <rest xml:id="rest-L55F4" dur="4" />
         <beam xml:id="beam-L57F4-L58F4">
          <note xml:id="note-L57F4" dur="8" oct="1" pname="a" accid.ges="n" />
          <note xml:id="note-L58F4" dur="8" oct="2" pname="a" accid.ges="n" />
         </beam>
        </layer>
       </staff>
       <staff xml:id="staff-L50F2N1" n="3">
        <layer xml:id="layer-L50F2N1" n="1">
         <beam xml:id="beam-L51F2-L52F2">
          <note xml:id="note-L51F2" dur="8" oct.ges="6" oct="5" pname="f" accid.ges="n" />
          <note xml:id="note-L52F2" dur="8" oct.ges="6" oct="5" pname="b" accid="f" />
         </beam>
         <note xml:id="note-L53F2" dur="8" oct.ges="7" oct="6" pname="e" accid="f" />
         <rest xml:id="rest-L54F2" dur="8" />
         <chord xml:id="chord-L55F2" dur="2">
          <note xml:id="note-L55F2S1" oct.ges="6" oct="5" pname="c" accid.ges="n" />
          <note xml:id="note-L55F2S2" oct.ges="7" oct="6" pname="c" accid.ges="n" />
         </chord>
        </layer>
       </staff>
       <staff xml:id="staff-L50F1N1" n="4">
        <layer xml:id="layer-L50F1N1" n="1">
         <rest xml:id="rest-L51F1" dur="2" />
         <beam xml:id="beam-L55F1-L56F1">
          <note xml:id="note-L55F1" dur="8" oct="5" pname="c" accid.ges="n" />
          <note xml:id="note-L56F1" dur="8" oct="5" pname="f" accid.ges="n" />
         </beam>
         <note xml:id="note-L57F1" dur="8" oct="5" pname="b" accid="f" />
         <rest xml:id="rest-L58F1" dur="8" />
        </layer>
       </staff>
       <slur xml:id="slur-L51F2-L53F2" staff="3" startid="#note-L51F2" endid="#note-L53F2" />
       <slur xml:id="slur-L55F1-L57F1" staff="4" startid="#note-L55F1" endid="#note-L57F1" />
       <tie xml:id="tie-L55F2S1-L60F2S1" startid="#note-L55F2S1" endid="#note-L60F2S1" />
       <tie xml:id="tie-L55F2S2-L60F2S2" startid="#note-L55F2S2" endid="#note-L60F2S2" />
      </measure>
      <measure xml:id="measure-L59" n="159">
       <staff xml:id="staff-L59F5N1" n="1">
        <layer xml:id="layer-L59F5N1" n="1">
         <rest xml:id="rest-L60F5" dur="2" />
         <beam xml:id="beam-L64F5-L67F5">
          <chord xml:id="chord-L64F5" dur="8">
           <note xml:id="note-L64F5S1" oct="4" pname="c" accid="s" />
           <note xml:id="note-L64F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L65F5" dur="8" oct="3" pname="b" accid.ges="n" />
          <chord xml:id="chord-L66F5" dur="8">
           <note xml:id="note-L66F5S1" oct="4" pname="d" accid.ges="n" />
           <note xml:id="note-L66F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L67F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
        </layer>
       </staff>
       <staff xml:id="staff-L59F4N1" n="2">
        <layer xml:id="layer-L59F4N1" n="1">
         <beam xml:id="beam-L60F4-L63F4">
          <note xml:id="note-L60F4" dur="8" oct="2" pname="c" accid="s" />
          <note xml:id="note-L61F4" dur="8" oct="2" pname="f" accid="s" />
          <note xml:id="note-L62F4" dur="8" oct="1" pname="b" accid.ges="n" />
          <note xml:id="note-L63F4" dur="8" oct="2" pname="b" accid.ges="n" />
         </beam>
         <rest xml:id="rest-L64F4" dur="4" />
         <rest xml:id="rest-L66F4" dur="4" />
        </layer>
       </staff>
       <staff xml:id="staff-L59F2N1" n="3">
        <layer xml:id="layer-L59F2N1" n="1">
         <beam xml:id="beam-L60F2-L63F2">
          <chord xml:id="chord-L60F2" dur="8">
           <note xml:id="note-L60F2S1" oct.ges="6" oct="5" pname="c" accid.ges="n" />
           <note xml:id="note-L60F2S2" oct.ges="7" oct="6" pname="c" accid.ges="n" />
          </chord>
          <note xml:id="note-L61F2" dur="8" oct.ges="6" oct="5" pname="a" accid.ges="n" />
          <note xml:id="note-L62F2" dur="8" oct.ges="6" oct="5" pname="f" accid.ges="n" />
          <note xml:id="note-L63F2" dur="8" oct.ges="6" oct="5" pname="d" accid.ges="n" />
         </beam>
         <note xml:id="note-L64F2" dur="4" oct.ges="6" oct="5" pname="e">
          <accid xml:id="accid-L64F2" accid="n" func="caution" />
         </note>
         <beam xml:id="beam-L66F2-L67F2">
          <note xml:id="note-L66F2" dur="8" oct.ges="6" oct="5" pname="e" accid.ges="n" />
          <note xml:id="note-L67F2" dur="8" oct.ges="6" oct="5" pname="g" accid.ges="n" />
         </beam>
        </layer>
       </staff>
       <staff xml:id="staff-L59F1N1" n="4">
        <layer xml:id="layer-L59F1N1" n="1">
         <note xml:id="note-L60F1" dots="1" dur="4" oct="5" pname="a" accid.ges="n" />
         <note xml:id="note-L63F1" dur="8" oct="5" pname="b" accid="f" />
         <note xml:id="note-L64F1" dots="1" dur="4" oct="5" pname="a" accid.ges="n" />
         <note xml:id="note-L67F1" dur="8" oct="5" pname="a" accid="f" />
        </layer>
       </staff>
       <hairpin xml:id="hairpin-L64F6" staff="1" tstamp="3.000000" tstamp2="1m+1.5000" form="dim" vgrp="100" />
       <slur xml:id="slur-L61F2-L64F2" staff="3" startid="#note-L61F2" endid="#note-L64F2" />
       <hairpin xml:id="hairpin-L64F3" staff="3" tstamp="3.000000" tstamp2="1m+3.0000" form="dim" vgrp="100" />
       <slur xml:id="slur-L66F2-L70F2" staff="3" startid="#note-L66F2" endid="#note-L70F2" />
       <slur xml:id="slur-L60F1-L70F1" staff="4" startid="#note-L60F1" endid="#note-L70F1" />
      </measure>
      <measure xml:id="measure-L68" n="160">
       <staff xml:id="staff-L68F5N1" n="1">
        <layer xml:id="layer-L68F5N1" n="1">
         <beam xml:id="beam-L70F5-L71F5">
          <chord xml:id="chord-L70F5" dur="8">
           <note xml:id="note-L70F5S1" oct="4" pname="g" accid.ges="n" />
           <note xml:id="note-L70F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L71F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
         <rest xml:id="rest-L72F5" dur="4" />
         <rest xml:id="rest-L74F5" dur="4" />
         <beam xml:id="beam-L76F5-L77F5">
          <chord xml:id="chord-L76F5" dur="8">
           <note xml:id="note-L76F5S1" oct="4" pname="e" accid.ges="n" />
           <note xml:id="note-L76F5S2" oct="4" pname="b" accid.ges="n" />
          </chord>
          <note xml:id="note-L77F5" dur="8" oct="3" pname="b" accid.ges="n" />
         </beam>
        </layer>
       </staff>
       <staff xml:id="staff-L68F4N1" n="2">
        <layer xml:id="layer-L68F4N1" n="1">
         <beam xml:id="beam-L70F4-L73F4">
          <note xml:id="note-L70F4" dur="8" oct="1" pname="a" accid.ges="n" />
          <note xml:id="note-L71F4" dur="8" oct="2" pname="a" accid.ges="n" />
          <note xml:id="note-L72F4" dur="8" oct="2" pname="c" accid="s" />
          <note xml:id="note-L73F4" dur="8" oct="2" pname="f" accid="s" />
         </beam>
         <beam xml:id="beam-L74F4-L75F4">
          <note xml:id="note-L74F4" dur="8" oct="1" pname="b" accid.ges="n" />
          <note xml:id="note-L75F4" dur="8" oct="2" pname="b" accid.ges="n" />
         </beam>
         <rest xml:id="rest-L76F4" dur="8" />
         <note xml:id="note-L77F4" dur="8" oct="1" pname="b" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L68F2N1" n="3">
        <layer xml:id="layer-L68F2N1" n="1">
         <note xml:id="note-L70F2" dur="4" oct="5" pname="e" accid.ges="n" />
         <note xml:id="note-L72F2" dur="4" oct="5" pname="e" accid.ges="n" />
         <note xml:id="note-L74F2" dur="2" oct="4" pname="b" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L68F1N1" n="4">
        <layer xml:id="layer-L68F1N1" n="1">
         <note xml:id="note-L70F1" dur="4" oct="5" pname="g" accid.ges="n" />
         <beam xml:id="beam-L72F1-L73F1">
          <note xml:id="note-L72F1" dur="8" oct="5" pname="a">
           <accid xml:id="accid-L72F1" accid="n" func="caution" />
          </note>
          <note xml:id="note-L73F1" dur="8" oct="5" pname="e" accid.ges="n" />
         </beam>
         <note xml:id="note-L74F1" dur="2" oct="5" pname="f" accid="s" />
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>
rettinghaus commented 4 years ago

@craigsapp There is a whole range of glyphs in SMuFL: https://www.smufl.org/version/latest/range/octaves/ Which one should be used by default?

craigsapp commented 4 years ago

The "8" by itself is not a problem in most cases, but in tight situations, it can be a problem such as in this case.

"8" is more of a modern style, while a more traditional style would be to use "8va" (SMUFL U+E511 with the "va" up high for the octave-up transposition), and "8ba" (SMUFL U+E513) would be good for transposing down an octave. Under no circumstance use U+E512 for the octave down since that one is very confusing with U+E511 for an octave up (and that would be redundant with just having "8" in any case). Adding the "va" and "ba" (and "ma" for rare 15, and very rare 22) would increase the readability a little bit, particularly in this case.

I like "8vb" (U+E51C) myself for "8Va Bassa", but I think that this is frowned upon in general by notational purists. Likewise 15 and 22 would be "mb" in such cases (which disambiguates them from the up 2/3 octaves). But those are too rare to care about.

I like the parenthetical style of Sibelius for the ottava mark at a system break. But adding it or not will not change the readability for performances (more of an aesthetic style that is interesting in terms of extracting excerpts from a full score, where you would be able to indicate that the octave line is continuing from a previous measure).

Screen Shot 2020-03-11 at 01 54 47