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
680 stars 185 forks source link

Incorrect placement of dots after most types of rests in mensural notation #1682

Open karend27 opened 4 years ago

karend27 commented 4 years ago

When a dot is added after a rest in mensural notation in most cases the dot is placed incorrectly before the rest instead of after. With the semibreve, minim, and semiminim rest the dot seems to be placed very slightly after, however for the long, breve rests the dot is incorrectly placed before the rest.

92258338-ac3dcd00-eea4-11ea-97af-cb762c375be3 The issue is described more fully here: https://github.com/MeasuringPolyphony/mp_editor/issues/52

MEI data:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/4.0.1/mei-Mensural.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="https://music-encoding.org/schema/4.0.1/mei-Mensural.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<mei xmlns="http://www.music-encoding.org/ns/mei">
  <meiHead>
    <fileDesc>
    <titleStmt>
      <title></title>
    </titleStmt>
    <pubStmt></pubStmt>
    </fileDesc>
  </meiHead>
  <music>
    <body>
    <mdiv>
      <score>
        <scoreDef>
        <staffGrp>
          <staffDef n="1" lines="5" notationtype="mensural" clef.shape="C" clef.line="3"></staffDef>
        </staffGrp>
        </scoreDef>
        <section>
        <staff n="1">
          <layer>
            <note dur="maxima" pname="c" oct="4"/>
            <rest dur="maxima"/>
            <dot/>
            <note dur="longa" pname="c" oct="4"/>
            <rest dur="longa"/>
            <dot/>
            <note dur="brevis" pname="c" oct="4"/>
            <rest dur="brevis"/>
            <dot/>
            <note dur="semibrevis" pname="c" oct="4"/>
            <rest dur="semibrevis"/>
            <dot/>
            <note dur="minima" pname="c" oct="4"/>
            <rest dur="minima"/>
            <dot/>
            <note dur="semiminima" pname="c" oct="4"/>
            <rest dur="semiminima"/>
            <dot/>
            <note dur="fusa" pname="c" oct="4"/>
            <rest dur="fusa"/>
            <dot/>
            <note dur="semifusa" pname="c" oct="4"/>
            <rest dur="semifusa"/>
            <dot/>
          </layer>
        </staff>
        </section>
      </score>
    </mdiv>
    </body>
  </music>
</mei>
craigsapp commented 4 years ago

There are corner case problems with dots in CMN which may be related to the above issue in mensural music.

Example of dots that are correctly placed:

Screen Shot 2020-10-01 at 10 57 24 AM

These dots are well placed; however, the violet dot in the last measure could have its position improved. Note that all of the other dots are placed in the middle of the space between each note. Ideally the violet dot would be placed half-way between the last note and the barline, but it is instead attached to the note.

MEI 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-10-01T10:48:39" version="3.0.0-dev-e2cca71">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <workList>
   <work>
    <title />
   </work>
  </workList>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="mdiv-0000001531323414">
    <score xml:id="score-0000001476256969">
     <scoreDef xml:id="scoredef-0000000801789500">
      <staffGrp xml:id="staffgrp-0000000688038978">
       <staffDef xml:id="staffdef-0000000408925318" n="1" lines="5">
        <clef xml:id="clef-0000001756244148" shape="G" line="2" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1">
       <staff xml:id="staff-0000000348330451" n="1">
        <layer xml:id="layer-L1F1N1" n="1">  
         <dot color="red" />
         <note xml:id="note-L3F1" dur="4" oct="4" pname="c" accid.ges="n" />
         <dot color="orange" loc="2" />
         <note xml:id="note-L4F1" dur="4" oct="4" pname="d" accid.ges="n" />
         <dot color="limegreen"/>
         <note xml:id="note-L5F1" dur="4" oct="4" pname="e" accid.ges="n" />
         <dot color="dodgerblue"/>
         <note xml:id="note-L6F1" dur="4" oct="4" pname="f" accid.ges="n" />
         <xdot color="violet"/>
        </layer>
       </staff>
      </measure>
      <measure xml:id="measure-L7">
       <staff xml:id="staff-L7F1N1" n="1">
        <layer xml:id="layer-L7F1N1" n="1">
         <xdot color="red" />
         <note xml:id="note-L8F1" dur="4" oct="4" pname="c" accid.ges="n" />
         <dot color="orange" />
         <note xml:id="note-L9F1" dur="4" oct="4" pname="d" accid.ges="n" />
         <dot color="limegreen"/>
         <note xml:id="note-L10F1" dur="4" oct="4" pname="e" accid.ges="n" />
         <dot color="skyblue"/>
         <note xml:id="note-L11F1" dur="4" oct="4" pname="f" accid.ges="n" />
         <dot color="violet"/>
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

Other placements of dots at the start/ending of the measure are causing problems. A funny one is placing a dot at the start of the second measure:

Screen Shot 2020-10-01 at 11 01 25 AM

This moves the red dot that should go before the first note off into the middle of nowhere after the measure. Also the spacing of the notes in the previous measure change for some reason (third beat is wider).

MEI 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-10-01T10:48:39" version="3.0.0-dev-e2cca71">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <workList>
   <work>
    <title />
   </work>
  </workList>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="mdiv-0000001531323414">
    <score xml:id="score-0000001476256969">
     <scoreDef xml:id="scoredef-0000000801789500">
      <staffGrp xml:id="staffgrp-0000000688038978">
       <staffDef xml:id="staffdef-0000000408925318" n="1" lines="5">
        <clef xml:id="clef-0000001756244148" shape="G" line="2" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1">
       <staff xml:id="staff-0000000348330451" n="1">
        <layer xml:id="layer-L1F1N1" n="1">  
         <dot color="red" />
         <note xml:id="note-L3F1" dur="4" oct="4" pname="c" accid.ges="n" />
         <dot color="orange" loc="2" />
         <note xml:id="note-L4F1" dur="4" oct="4" pname="d" accid.ges="n" />
         <dot color="limegreen"/>
         <note xml:id="note-L5F1" dur="4" oct="4" pname="e" accid.ges="n" />
         <dot color="dodgerblue"/>
         <note xml:id="note-L6F1" dur="4" oct="4" pname="f" accid.ges="n" />
         <xdot color="violet"/>
        </layer>
       </staff>
      </measure>
      <measure xml:id="measure-L7">
       <staff xml:id="staff-L7F1N1" n="1">
        <layer xml:id="layer-L7F1N1" n="1">
         <dot color="red" />
         <note xml:id="note-L8F1" dur="4" oct="4" pname="c" accid.ges="n" />
         <dot color="orange" />
         <note xml:id="note-L9F1" dur="4" oct="4" pname="d" accid.ges="n" />
         <dot color="limegreen"/>
         <note xml:id="note-L10F1" dur="4" oct="4" pname="e" accid.ges="n" />
         <dot color="skyblue"/>
         <note xml:id="note-L11F1" dur="4" oct="4" pname="f" accid.ges="n" />
         <dot color="violet"/>
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

Another strange behavior is adding a dot at the end of the first measure:

Screen Shot 2020-10-01 at 11 02 49 AM

Extrac spacing is added. before the preceding note for no reason in a manner similar to the previous example of the dot added to the start of the next measure. In addition, the spacing of the purple dot at the end of the first measure is unusual, moving towards the barline instead of the note as in the first example. Ideally it would be centered in the space between the last note and the barline.

MEI 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-10-01T10:48:39" version="3.0.0-dev-e2cca71">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <workList>
   <work>
    <title />
   </work>
  </workList>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="mdiv-0000001531323414">
    <score xml:id="score-0000001476256969">
     <scoreDef xml:id="scoredef-0000000801789500">
      <staffGrp xml:id="staffgrp-0000000688038978">
       <staffDef xml:id="staffdef-0000000408925318" n="1" lines="5">
        <clef xml:id="clef-0000001756244148" shape="G" line="2" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1">
       <staff xml:id="staff-0000000348330451" n="1">
        <layer xml:id="layer-L1F1N1" n="1">  
         <dot color="red" />
         <note xml:id="note-L3F1" dur="4" oct="4" pname="c" accid.ges="n" />
         <dot color="orange" loc="2" />
         <note xml:id="note-L4F1" dur="4" oct="4" pname="d" accid.ges="n" />
         <dot color="limegreen"/>
         <note xml:id="note-L5F1" dur="4" oct="4" pname="e" accid.ges="n" />
         <dot color="dodgerblue"/>
         <note xml:id="note-L6F1" dur="4" oct="4" pname="f" accid.ges="n" />
         <dot color="violet"/>
        </layer>
       </staff>
      </measure>
      <measure xml:id="measure-L7">
       <staff xml:id="staff-L7F1N1" n="1">
        <layer xml:id="layer-L7F1N1" n="1">
         <xdot color="red" />
         <note xml:id="note-L8F1" dur="4" oct="4" pname="c" accid.ges="n" />
         <dot color="orange" />
         <note xml:id="note-L9F1" dur="4" oct="4" pname="d" accid.ges="n" />
         <dot color="limegreen"/>
         <note xml:id="note-L10F1" dur="4" oct="4" pname="e" accid.ges="n" />
         <dot color="skyblue"/>
         <note xml:id="note-L11F1" dur="4" oct="4" pname="f" accid.ges="n" />
         <dot color="violet"/>
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

The violet dot at the end of the music and the red dot at the start of the music do not cause problems.


The strange placement of dots at the start/end of a measure does not happen with rests, which is similar to the mensural placement of dots illustrated in the top post:

Screen Shot 2020-10-01 at 11 12 26 AM

However, the dots are poorly placed towards the next element in the layer rather than the expected middle of the space between the two rests.

MEI 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-10-01T10:48:39" version="3.0.0-dev-e2cca71">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <workList>
   <work>
    <title />
   </work>
  </workList>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="mdiv-0000001531323414">
    <score xml:id="score-0000001476256969">
     <scoreDef xml:id="scoredef-0000000801789500">
      <staffGrp xml:id="staffgrp-0000000688038978">
       <staffDef xml:id="staffdef-0000000408925318" n="1" lines="5">
        <clef xml:id="clef-0000001756244148" shape="G" line="2" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1">
       <staff xml:id="staff-0000000348330451" n="1">
        <layer xml:id="layer-L1F1N1" n="1">  
         <dot color="red" />
         <rest xml:id="rest-L3F1" dur="4" />
         <dot color="orange" />
         <rest xml:id="rest-L4F1" dur="4" />
         <dot color="limegreen"/>
         <rest xml:id="rest-L5F1" dur="4" />
         <dot color="dodgerblue" />
         <rest xml:id="rest-L6F1" dur="4" />
         <dot color="violet"/>
        </layer>
       </staff>
      </measure>
      <measure xml:id="measure-L7">
       <staff xml:id="staff-L7F1N1" n="1">
        <layer xml:id="layer-L7F1N1" n="1">
         <dot color="red" />
         <rest xml:id="rest-L8F1" dur="4" />
         <dot color="orange" />
         <rest xml:id="rest-L9F1" dur="4" />
         <dot color="limegreen"/>
         <rest xml:id="rest-L10F1" dur="4" />
         <dot color="skyblue"/>
         <rest xml:id="rest-L11F1" dur="4" />
         <dot color="violet"/>
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>
craigsapp commented 4 years ago

Related to issue https://github.com/humdrum-tools/verovio-humdrum-viewer/issues/432:

ambiguous-dot5

It would be useful to place a dot on a line (if the above example is to be interpreted as a <dot>).

Currently dots avoid lines automatically because they become nearly invisible on lines:

Screen Shot 2020-10-01 at 11 31 23 AM

For <rest> and <space>, dot@loc is used (first measure), but for <note>, dot@loc is ignored (second measure). Ideally dot@loc would also be used when the dot follows a note.

MEI 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-10-01T10:48:39" version="3.0.0-dev-e2cca71">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <workList>
   <work>
    <title />
   </work>
  </workList>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="mdiv-0000001531323414">
    <score xml:id="score-0000001476256969">
     <scoreDef xml:id="scoredef-0000000801789500">
      <staffGrp xml:id="staffgrp-0000000688038978">
       <staffDef xml:id="staffdef-0000000408925318" n="1" lines="5">
        <clef xml:id="clef-0000001756244148" shape="G" line="2" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure n="1">
       <staff n="1">
        <layer xml:id="layer-L1F1N1" n="1">  
         <space dur="4"/>
         <dot color="red" loc="-1" />
         <space dur="4"/>
         <dot color="orange" loc="0" />
         <space dur="4"/>
         <dot color="gold" loc="1" />
         <space dur="4"/>
         <dot color="chartreuse" loc="2" />
         <space dur="4"/>
         <dot color="limegreen" loc="3" />
         <space dur="4"/>
         <dot color="skyblue" loc="4" />
         <space dur="4"/>
         <dot color="dodgerblue" loc="5" />
         <space dur="4"/>
         <dot color="violet" loc="6" />
         <space dur="4"/>
         <dot color="purple" loc="7" />
        </layer>
       </staff>
      </measure>
      <measure n="2">
       <staff n="1">
        <layer xml:id="layer-L1F1N1" n="1">  
         <note dur="4"/>
         <dot color="red" loc="-1" />
         <note dur="4"/>
         <dot color="orange" loc="0" />
         <note dur="4"/>
         <dot color="gold" loc="1" />
         <note dur="4"/>
         <dot color="chartreuse" loc="2" />
         <note dur="4"/>
         <dot color="limegreen" loc="3" />
         <note dur="4"/>
         <dot color="skyblue" loc="4" />
         <note dur="4"/>
         <dot color="dodgerblue" loc="5" />
         <note dur="4"/>
         <dot color="violet" loc="6" />
         <note dur="4"/>
         <dot color="purple" loc="7" />
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

If <dots> are allowed on lines, then also the diameter of the dot would be useful to control to make it bigger and more visible if on a line. There is dot@fontsize, but this does not seem exactly appropirate.