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

Too many dots on unisons #3705

Closed
axgeertinger opened this issue Jun 10, 2024 · 15 comments · Fixed by #3745
Closed

Too many dots on unisons #3705

axgeertinger opened this issue Jun 10, 2024 · 15 comments · Fixed by #3745

Comments

@axgeertinger
Copy link

Not sure whether this qualifies as a feature request or a bug report: Dotted unisons in double stem notation sharing the same notehead should only have one dot, not two (cf. Behind Bars, p. 58).
This:

<staff n="2">
    <layer n="1">
        <note dots="1" dur.ppq="6" dur="4" oct="3" pname="a" stem.dir="up"/>
    </layer>
    <layer n="2">
        <note dots="1" dur.ppq="6" dur="4" oct="3" pname="a" stem.dir="down"/>
    </layer>
</staff>

currently produces this:
dotted_unison
The lower dot should be omitted. The problem only occurs when the notehead is placed on a staff or ledger line, not between lines.

@derkveen
Copy link

derkveen commented Jul 2, 2024

"The lower dot should be omitted." Do you mean according to certain guidelines?

@craigsapp
Copy link
Contributor

In Behind Bars by Elaine Gould, page 58-59, unisons in different layers are preferred to have a single augmentation dot (in modern styles):

Screenshot 2024-07-02 at 16 35 44

However if there are no stems on the notes, the double dots are required:

Screenshot 2024-07-02 at 16 36 04

@rettinghaus
Copy link
Contributor

@axgeertinger which version are you using? Looking at the test suite this is already working for some time.

@axgeertinger
Copy link
Author

@rettinghaus That is peculiar. I didn't see the test suite example as I was looking for it in the "dot" section, not "unison"...
I am using version 4.1.0 and testing in 4.2.0 as well, but I am having the same issue in the online verovio editor. So, is it something in my encoding? Here is a screenshot:
unison_issue

And here my MEI file (bar 11 only):

<mei xmlns="http://www.music-encoding.org/ns/mei" meiversion="5.0">
    <meiHead xml:id="moakt96">
        <fileDesc xml:id="f12ouey2">
            <titleStmt xml:id="t160d0ks">
                <title>Aftensang</title>
            </titleStmt>
        </fileDesc>
    </meiHead>
    <music>
        <body>
            <mdiv xml:id="m49j6zm">
                <score xml:id="s13iq279">
                    <scoreDef xml:id="s1lzepi8">
                        <staffGrp xml:id="su2mfk9">
                            <staffGrp xml:id="s1ufjl2c">
                                <grpSym xml:id="glqhrx4" symbol="bracket"/>
                                <staffDef xml:id="P1" n="1" lines="5" ppq="2">
                                    <clef xml:id="c1cjsqit" shape="G" line="2"/>
                                    <keySig xml:id="k17lf8pi" sig="2s"/>
                                    <meterSig xml:id="mtnktsg" count="4" sym="common" unit="4"/>
                                </staffDef>
                                <staffDef xml:id="P2" n="2" lines="5" ppq="2">
                                    <clef xml:id="cq2i1pi" shape="F" line="4"/>
                                    <keySig xml:id="k12off3m" sig="2s"/>
                                    <meterSig xml:id="m10nk5cx" count="4" sym="common" unit="4"/>
                                </staffDef>
                            </staffGrp>
                        </staffGrp>
                    </scoreDef>
                    <section xml:id="s1et4tnk">
                        <pb xml:id="p9abi3r"/>
                        <measure xml:id="mdhsxr1" n="11">
                            <staff xml:id="s1y1wo7j" n="1">
                                <layer xml:id="lkgngov" n="1">
                                    <note xml:id="ncuuggu" dots="1" dur.ppq="3" dur="4" oct="4" pname="f" stem.dir="up" accid.ges="s">
                                        <verse xml:id="vrpe4f6" n="1">
                                            <syl xml:id="s1uyp1sw" con="d" wordpos="i">Stjer</syl>
                                        </verse>
                                        <verse xml:id="vh4572l" n="2">
                                            <syl xml:id="s1aa13q1" con="d" wordpos="i">Flygt</syl>
                                        </verse>
                                        <verse xml:id="vk22rpz" n="3">
                                            <syl xml:id="s1l3asrd" con="d" wordpos="m">skil</syl>
                                        </verse>
                                    </note>
                                    <note xml:id="n2kit0d" dur.ppq="1" dur="8" oct="4" pname="f" stem.dir="up" accid.ges="s">
                                        <verse xml:id="vu640pm" n="1">
                                            <syl xml:id="sa3stcn" con="s" wordpos="t">ne</syl>
                                        </verse>
                                        <verse xml:id="vpahf2" n="2">
                                            <syl xml:id="s29v3o3" con="s" wordpos="t">ning</syl>
                                        </verse>
                                        <verse xml:id="v1bsqcap" n="3">
                                            <syl xml:id="sbf2zlg" con="s" wordpos="t">les</syl>
                                        </verse>
                                    </note>
                                    <note xml:id="nir3syb" dur.ppq="2" dur="4" oct="4" pname="e" stem.dir="up">
                                        <verse xml:id="vjf52n7" n="1">
                                            <syl xml:id="s2d7eno" con="d" wordpos="i">Stjer</syl>
                                        </verse>
                                        <verse xml:id="v1uzqwhd" n="2">
                                            <syl xml:id="skg0exf" con="s" wordpos="s">som</syl>
                                        </verse>
                                        <verse xml:id="v1ah0x66" n="3">
                                            <syl xml:id="s1pw5uyf" con="s" wordpos="s">end</syl>
                                        </verse>
                                    </note>
                                    <note xml:id="nuzzcpp" dur.ppq="2" dur="4" oct="4" pname="e" stem.dir="up">
                                        <verse xml:id="vd0npy8" n="1">
                                            <syl xml:id="sdvdqn" con="s" wordpos="t">ne</syl>
                                        </verse>
                                        <verse xml:id="v1qk7u9c" n="2">
                                            <syl xml:id="s1kl43yw" con="s" wordpos="s">der</syl>
                                        </verse>
                                        <verse xml:id="v1ra57jd" n="3">
                                            <syl xml:id="soa2e5k" con="s" wordpos="s">vort</syl>
                                        </verse>
                                    </note>
                                </layer>
                                <layer xml:id="l1r2kf4l" n="2">
                                    <note xml:id="n1u5nav1" dots="1" dur.ppq="3" dur="4" oct="4" pname="d" stem.dir="down"/>
                                    <note xml:id="no0ucjy" dur.ppq="1" dur="8" oct="4" pname="d" stem.dir="down"/>
                                    <note xml:id="n49gzox" dur.ppq="2" dur="4" oct="4" pname="d" stem.dir="down"/>
                                    <note xml:id="n9391aj" dur.ppq="2" dur="4" oct="4" pname="c" stem.dir="down" accid.ges="s"/>
                                </layer>
                            </staff>
                            <staff xml:id="s1xiccjh" n="2">
                                <layer xml:id="l16v2d50" n="1">
                                    <note xml:id="n1o4uzgj" dots="1" dur.ppq="3" dur="4" oct="3" pname="a" stem.dir="up"/>
                                    <note xml:id="n1wj4dpg" dur.ppq="1" dur="8" oct="3" pname="a" stem.dir="up"/>
                                    <note xml:id="n155ttfj" dur.ppq="2" dur="4" oct="3" pname="g" stem.dir="up"/>
                                    <note xml:id="n12rqd79" dur.ppq="2" dur="4" oct="3" pname="g" stem.dir="up"/>
                                </layer>
                                <layer xml:id="lo70lob" n="2">
                                    <note xml:id="nsp94nv" dots="1" dur.ppq="3" dur="4" oct="3" pname="a" stem.dir="down"/>
                                    <note xml:id="n44qb4r" dur.ppq="1" dur="8" oct="3" pname="a" stem.dir="down"/>
                                    <note xml:id="nqesh7j" dur.ppq="2" dur="4" oct="2" pname="a" stem.dir="down"/>
                                    <note xml:id="n9i7nzp" dur.ppq="2" dur="4" oct="2" pname="a" stem.dir="down"/>
                                </layer>
                            </staff>
                            <hairpin xml:id="h1k1gl43" staff="1" tstamp="1" tstamp2="0m+4" form="dim" place="above" vgrp="4000"/>
                            <hairpin xml:id="h1udjad4" staff="2" tstamp="1" tstamp2="0m+4" form="dim" place="above" vgrp="5000"/>
                        </measure>
                    </section>
                </score>
            </mdiv>
        </body>
    </music>
</mei>

@rettinghaus
Copy link
Contributor

@axgeertinger I finally figured it out! You're encoding is just fine, but apparently you are not allowed to use it on the second staff! 🥴 So it is implemented, but weirdly only works for the first staff.

image

<?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>Unisons in multiple staves</title>
         </titleStmt>
         <pubStmt>
            <respStmt>
               <persName role="encoder">Klaus Rettinghaus</persName>
            </respStmt>
            <date isodate="2024-07-03">03 Jul 2024</date>
            <pubPlace>
               <ref target="https://github.com/rism-digital/verovio/issues/655" />
            </pubPlace>
         </pubStmt>
      </fileDesc>
   </meiHead>
   <music>
      <body>
         <mdiv>
            <score>
               <scoreDef>
                  <staffGrp>
                     <staffDef n="1" lines="5" clef.shape="G" clef.line="2" />
                     <staffDef n="2" lines="5" clef.shape="C" clef.line="3" />
                     <staffDef n="3" lines="5" clef.shape="F" clef.line="4" />
                  </staffGrp>
               </scoreDef>
               <section>
                  <measure>
                     <staff n="1">
                        <layer n="1">
                           <note dots="1" dur="2" oct="4" pname="g" />
                        </layer>
                        <layer n="2">
                           <note dots="1" dur="2" oct="4" pname="g" />
                        </layer>
                     </staff>
                     <staff n="2">
                        <layer n="1">
                           <note dots="1" dur="2" oct="4" pname="c" />
                        </layer>
                        <layer n="2">
                           <note dots="1" dur="2" oct="4" pname="c" />
                        </layer>
                     </staff>
                     <staff n="3">
                        <layer n="1">
                           <note dots="1" dur="2" oct="3" pname="f" />
                        </layer>
                        <layer n="2">
                           <note dots="1" dur="2" oct="3" pname="f" />
                        </layer>
                     </staff>
                  </measure>
                  <measure>
                     <staff n="1">
                        <layer n="1">
                           <note dots="1" dur="4" oct="4" pname="g" />
                        </layer>
                        <layer n="2">
                           <note dots="1" dur="4" oct="4" pname="g" />
                        </layer>
                     </staff>
                     <staff n="2">
                        <layer n="1">
                           <note dots="1" dur="4" oct="4" pname="c" />
                        </layer>
                        <layer n="2">
                           <note dots="1" dur="4" oct="4" pname="c" />
                        </layer>
                     </staff>
                     <staff n="3">
                        <layer n="1">
                           <note dots="1" dur="4" oct="3" pname="f" />
                        </layer>
                        <layer n="2">
                           <note dots="1" dur="4" oct="3" pname="f" />
                        </layer>
                     </staff>
                  </measure>
               </section>
            </score>
         </mdiv>
      </body>
   </music>
</mei>

@craigsapp
Copy link
Contributor

I finally figured it out! You're encoding is just fine, but apparently you are not allowed to use it on the second staff! 🥴 So it is implemented, but weirdly only works for the first staff.

Good work! I was trying to figure out the strange situation as well.

@axgeertinger
Copy link
Author

axgeertinger commented Jul 3, 2024

OK, I did some testing. It seems the upper staff is affecting the lower in some unintended way: If any note in the upper staff coincides with the dotted unison in the lower staff, two dots are shown instead of one. The encoding below renders like this in the editor:
dot-test

<?xml version="1.0" encoding="UTF-8"?>
<mei xmlns="http://www.music-encoding.org/ns/mei" meiversion="5.0">
   <meiHead>
      <fileDesc>
         <titleStmt>
            <title>Dot test</title>
         </titleStmt>
      </fileDesc>
   </meiHead>
   <music>
      <body>
         <mdiv>
            <score>
               <scoreDef>
                  <staffGrp>
                     <staffGrp>
                        <staffGrp>
                           <grpSym symbol="bracket" />
                           <staffDef n="1" lines="5" ppq="2">
                              <clef shape="G" line="2" />
                           </staffDef>
                           <staffDef n="2" lines="5" ppq="2">
                              <clef shape="F" line="4" />
                           </staffDef>
                        </staffGrp>
                     </staffGrp>
                  </staffGrp>
               </scoreDef>
               <section>
                  <measure>
                     <staff n="1">
                        <layer n="1">
                           <note dots="1" dur="4" oct="4" pname="b" />
                           <rest dots="1" dur="4" />
                           <note dots="1" dur="4" oct="4" pname="b" />
                           <note dur="4" oct="4" pname="b" />
                           <note dur="4" oct="4" pname="b" />
                           <note dur="4" oct="4" pname="b" />
                           <note dur="4" oct="4" pname="b" />
                           <rest dur="4"/>
                           <rest dur="4"/>
                           <rest dur="4"/>
                        </layer>
                        <layer n="2">
                           <note dots="1" dur="4" oct="4" pname="b" />
                           <rest dots="1" dur="4" />
                           <space dots="1" dur="4" />
                           <note dur="4" oct="4" pname="b" />
                        </layer>
                     </staff>
                     <staff n="2">
                        <layer n="1">
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                        </layer>
                        <layer n="2">
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                           <note dots="1" dur="4" oct="3" pname="a" />
                        </layer>
                     </staff>
                  </measure>
               </section>
            </score>
         </mdiv>
      </body>
   </music>
</mei>

@craigsapp
Copy link
Contributor

Here is a case where it is behaving on multiple staves:

Screenshot 2024-07-03 at 10 33 57
Click to view MEI data for above example
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/5.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="https://music-encoding.org/schema/5.0/mei-all.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<mei xmlns="http://www.music-encoding.org/ns/mei" meiversion="5.0">
 <meiHead>
  <fileDesc>
   <titleStmt>
    <title />
   </titleStmt>
   <pubStmt>
    <unpub></unpub>
   </pubStmt>
  </fileDesc>
  <encodingDesc>
   <appInfo>
    <application isodate="2024-07-03T10:31:13" version="4.3.0-dev-53d6495-dirty">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <extMeta>
   <frames xmlns="http://www.humdrum.org/ns/humxml" />
  </extMeta>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="m8mnh4p">
    <score xml:id="s1b33tyg">
     <scoreDef xml:id="s1vwalp4" tempo.dist="3.0000vu">
      <staffGrp xml:id="s1g5jw5z" symbol="bracket">
       <staffDef xml:id="staffdef-L1F3" n="1" lines="5">
        <clef xml:id="c1w9mztv" shape="G" line="2" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F2" n="2" lines="5">
        <clef xml:id="c3jczvx" shape="G" line="2" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F1" n="3" lines="5">
        <clef xml:id="c43kuk" shape="G" line="2" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1">
       <staff xml:id="staff-L1F3" n="1">
        <layer xml:id="layer-L1F3N1" n="1">
         <note xml:id="note-L3F5" dots="1" dur="4" oct="5" pname="f" accid.ges="n">
          <verse xml:id="verse-L3F7" n="1">
           <syl xml:id="syl-L3F7"> a</syl>
          </verse>
         </note>
         <note xml:id="note-L4F5" dots="1" dur="4" oct="5" pname="f" accid.ges="n">
          <verse xml:id="verse-L4F7" n="1">
           <syl xml:id="syl-L4F7"> b</syl>
          </verse>
         </note>
         <note xml:id="note-L5F5" dots="1" dur="4" oct="5" pname="f" accid.ges="n">
          <verse xml:id="verse-L5F7" n="1">
           <syl xml:id="syl-L5F7"> c</syl>
          </verse>
         </note>
        </layer>
        <layer xml:id="layer-L1F6N2" n="2">
         <note xml:id="note-L3F6" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L4F6" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L5F6" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F2" n="2">
        <layer xml:id="layer-L1F2N1" n="1">
         <note xml:id="note-L3F3" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L4F3" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L5F3" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F4N2" n="2">
         <note xml:id="note-L3F4" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L4F4" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L5F4" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F1" n="3">
        <layer xml:id="layer-L1F1N1" n="1">
         <note xml:id="note-L3F1" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L4F1" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L5F1" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F2N2" n="2">
         <note xml:id="note-L3F2" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L4F2" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
         <note xml:id="note-L5F2" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

Maybe staffDef or scoreDef might be involved?

@axgeertinger
Copy link
Author

Thanks, @craigsapp and @rettinghaus . This is a tricky one. It also seems that the issue occurs only in octave 4 and below:
dot-test2

@craigsapp
Copy link
Contributor

The problem seems to be related to the algorithm only looking at the clef of the top staff. Any secondary staff with the same clef will also behave (as in my last example), but a different clef on secondary staves will cause a problem (as in @rettinghaus example). But this does not account for @axgeertinger last example...

Test 1: bass clef on top staff and bottom staff (both with single dots):

Screenshot 2024-07-03 at 10 46 36
Click for MEI data for above example
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/5.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="https://music-encoding.org/schema/5.0/mei-all.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<mei xmlns="http://www.music-encoding.org/ns/mei" meiversion="5.0">
 <meiHead>
  <fileDesc>
   <titleStmt>
    <title />
   </titleStmt>
   <pubStmt>
    <unpub>This MEI file was created by Verovio's Humdrum converter. When published, this unpub element should be removed, and the enclosing pubStmt element should be properly filled out.</unpub>
   </pubStmt>
  </fileDesc>
  <encodingDesc>
   <appInfo>
    <application isodate="2024-07-03T10:46:56" version="4.3.0-dev-53d6495-dirty">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <extMeta>
   <frames xmlns="http://www.humdrum.org/ns/humxml">
    <metaFrame n="14" token="!!!Xfilter: extract -s 1,2,3,3,2,1" xml:id="L15">
     <frameInfo>
      <startTime float="7.5" ratfrac="1/2" />
      <frameType>reference</frameType>
      <referenceKey>Xfilter</referenceKey>
      <referenceValue>extract -s 1,2,3,3,2,1</referenceValue>
     </frameInfo>
    </metaFrame>
   </frames>
  </extMeta>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="maksgn2">
    <score xml:id="sk8nmad">
     <scoreDef xml:id="sqtmljs" tempo.dist="3.0000vu">
      <staffGrp xml:id="s1qsq5d0" symbol="bracket">
       <staffDef xml:id="staffdef-L1F6" n="1" lines="5">
        <clef xml:id="clef-L2F6" shape="F" line="4" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F5" n="2" lines="5">
        <clef xml:id="clef-L2F5" shape="C" line="3" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F4" n="3" lines="5">
        <clef xml:id="clef-L2F4" shape="G" line="2" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F3" n="4" lines="5">
        <clef xml:id="clef-L2F3" shape="G" line="2" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F2" n="5" lines="5">
        <clef xml:id="clef-L2F2" shape="C" line="3" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F1" n="6" lines="5">
        <clef xml:id="clef-L2F1" shape="F" line="4" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1">
       <staff xml:id="staff-L1F6" n="1">
        <layer xml:id="layer-L1F6N1" n="1">
         <note xml:id="note-L4F11" dots="1" dur="4" oct="2" pname="g" accid.ges="n" />
         <note xml:id="note-L5F11" dots="1" dur="4" oct="2" pname="b" accid.ges="n" />
         <note xml:id="note-L6F11" dots="1" dur="4" oct="3" pname="d" accid.ges="n" />
         <note xml:id="note-L7F11" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L8F11" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F6N2" n="2">
         <note xml:id="note-L4F12" dots="1" dur="4" oct="2" pname="g" accid.ges="n" />
         <note xml:id="note-L5F12" dots="1" dur="4" oct="2" pname="b" accid.ges="n" />
         <note xml:id="note-L6F12" dots="1" dur="4" oct="3" pname="d" accid.ges="n" />
         <note xml:id="note-L7F12" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L8F12" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F5" n="2">
        <layer xml:id="layer-L1F5N1" n="1">
         <note xml:id="note-L4F9" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L5F9" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
         <note xml:id="note-L6F9" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
         <note xml:id="note-L7F9" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L8F9" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F5N2" n="2">
         <note xml:id="note-L4F10" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L5F10" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
         <note xml:id="note-L6F10" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
         <note xml:id="note-L7F10" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L8F10" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F4" n="3">
        <layer xml:id="layer-L1F4N1" n="1">
         <note xml:id="note-L4F7" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L5F7" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
         <note xml:id="note-L6F7" dots="1" dur="4" oct="4" pname="b" accid.ges="n" />
         <note xml:id="note-L7F7" dots="1" dur="4" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L8F7" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F4N2" n="2">
         <note xml:id="note-L4F8" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L5F8" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
         <note xml:id="note-L6F8" dots="1" dur="4" oct="4" pname="b" accid.ges="n" />
         <note xml:id="note-L7F8" dots="1" dur="4" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L8F8" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F3" n="4">
        <layer xml:id="layer-L1F3N1" n="1">
         <note xml:id="note-L4F5" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L5F5" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
         <note xml:id="note-L6F5" dots="1" dur="4" oct="4" pname="b" accid.ges="n" />
         <note xml:id="note-L7F5" dots="1" dur="4" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L8F5" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F3N2" n="2">
         <note xml:id="note-L4F6" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L5F6" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
         <note xml:id="note-L6F6" dots="1" dur="4" oct="4" pname="b" accid.ges="n" />
         <note xml:id="note-L7F6" dots="1" dur="4" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L8F6" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F2" n="5">
        <layer xml:id="layer-L1F2N1" n="1">
         <note xml:id="note-L4F3" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L5F3" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
         <note xml:id="note-L6F3" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
         <note xml:id="note-L7F3" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L8F3" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F2N2" n="2">
         <note xml:id="note-L4F4" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L5F4" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
         <note xml:id="note-L6F4" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
         <note xml:id="note-L7F4" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L8F4" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F1" n="6">
        <layer xml:id="layer-L1F1N1" n="1">
         <note xml:id="note-L4F1" dots="1" dur="4" oct="2" pname="g" accid.ges="n" />
         <note xml:id="note-L5F1" dots="1" dur="4" oct="2" pname="b" accid.ges="n" />
         <note xml:id="note-L6F1" dots="1" dur="4" oct="3" pname="d" accid.ges="n" />
         <note xml:id="note-L7F1" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L8F1" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F1N2" n="2">
         <note xml:id="note-L4F2" dots="1" dur="4" oct="2" pname="g" accid.ges="n" />
         <note xml:id="note-L5F2" dots="1" dur="4" oct="2" pname="b" accid.ges="n" />
         <note xml:id="note-L6F2" dots="1" dur="4" oct="3" pname="d" accid.ges="n" />
         <note xml:id="note-L7F2" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L8F2" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

Moving the staves around, now the top staff is treble clef, and dots behave on all treble clef staves:

Screenshot 2024-07-03 at 10 50 44
Click to view MEI data for above example
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/5.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="https://music-encoding.org/schema/5.0/mei-all.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<mei xmlns="http://www.music-encoding.org/ns/mei" meiversion="5.0">
 <meiHead>
  <fileDesc>
   <titleStmt>
    <title />
   </titleStmt>
   <pubStmt>
    <unpub>This MEI file was created by Verovio's Humdrum converter. When published, this unpub element should be removed, and the enclosing pubStmt element should be properly filled out.</unpub>
   </pubStmt>
  </fileDesc>
  <encodingDesc>
   <appInfo>
    <application isodate="2024-07-03T10:51:54" version="4.3.0-dev-53d6495-dirty">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <extMeta>
   <frames xmlns="http://www.humdrum.org/ns/humxml">
    <metaFrame n="11" token="!!!Xfilter: extract -s 1,2,3,1,2,3" xml:id="L12">
     <frameInfo>
      <startTime float="4.5" ratfrac="1/2" />
      <frameType>reference</frameType>
      <referenceKey>Xfilter</referenceKey>
      <referenceValue>extract -s 1,2,3,1,2,3</referenceValue>
     </frameInfo>
    </metaFrame>
   </frames>
  </extMeta>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="mkhw14i">
    <score xml:id="s19gp51r">
     <scoreDef xml:id="sz1daec" tempo.dist="3.0000vu">
      <staffGrp xml:id="s1inxsy2" symbol="bracket">
       <staffDef xml:id="staffdef-L1F6" n="1" lines="5">
        <clef xml:id="clef-L2F6" shape="G" line="2" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F5" n="2" lines="5">
        <clef xml:id="clef-L2F5" shape="C" line="3" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F4" n="3" lines="5">
        <clef xml:id="clef-L2F4" shape="F" line="4" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F3" n="4" lines="5">
        <clef xml:id="clef-L2F3" shape="G" line="2" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F2" n="5" lines="5">
        <clef xml:id="clef-L2F2" shape="C" line="3" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F1" n="6" lines="5">
        <clef xml:id="clef-L2F1" shape="F" line="4" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1">
       <staff xml:id="staff-L1F6" n="1">
        <layer xml:id="layer-L1F6N1" n="1">
         <note xml:id="note-L4F11" dots="1" dur="4" oct="4" pname="b" accid.ges="n" />
         <note xml:id="note-L5F11" dots="1" dur="4" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L6F11" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F6N2" n="2">
         <note xml:id="note-L4F12" dots="1" dur="4" oct="4" pname="b" accid.ges="n" />
         <note xml:id="note-L5F12" dots="1" dur="4" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L6F12" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F5" n="2">
        <layer xml:id="layer-L1F5N1" n="1">
         <note xml:id="note-L4F9" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L5F9" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
         <note xml:id="note-L6F9" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F5N2" n="2">
         <note xml:id="note-L4F10" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L5F10" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
         <note xml:id="note-L6F10" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F4" n="3">
        <layer xml:id="layer-L1F4N1" n="1">
         <note xml:id="note-L4F7" dots="1" dur="4" oct="3" pname="d" accid.ges="n" />
         <note xml:id="note-L5F7" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L6F7" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F4N2" n="2">
         <note xml:id="note-L4F8" dots="1" dur="4" oct="3" pname="d" accid.ges="n" />
         <note xml:id="note-L5F8" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L6F8" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F3" n="4">
        <layer xml:id="layer-L1F3N1" n="1">
         <note xml:id="note-L4F5" dots="1" dur="4" oct="4" pname="b" accid.ges="n" />
         <note xml:id="note-L5F5" dots="1" dur="4" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L6F5" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F3N2" n="2">
         <note xml:id="note-L4F6" dots="1" dur="4" oct="4" pname="b" accid.ges="n" />
         <note xml:id="note-L5F6" dots="1" dur="4" oct="5" pname="d" accid.ges="n" />
         <note xml:id="note-L6F6" dots="1" dur="4" oct="5" pname="f" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F2" n="5">
        <layer xml:id="layer-L1F2N1" n="1">
         <note xml:id="note-L4F3" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L5F3" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
         <note xml:id="note-L6F3" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F2N2" n="2">
         <note xml:id="note-L4F4" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L5F4" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
         <note xml:id="note-L6F4" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F1" n="6">
        <layer xml:id="layer-L1F1N1" n="1">
         <note xml:id="note-L4F1" dots="1" dur="4" oct="3" pname="d" accid.ges="n" />
         <note xml:id="note-L5F1" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L6F1" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F1N2" n="2">
         <note xml:id="note-L4F2" dots="1" dur="4" oct="3" pname="d" accid.ges="n" />
         <note xml:id="note-L5F2" dots="1" dur="4" oct="3" pname="f" accid.ges="n" />
         <note xml:id="note-L6F2" dots="1" dur="4" oct="3" pname="a" accid.ges="n" />
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

@axgeertinger
Copy link
Author

axgeertinger commented Jul 3, 2024

So apparently the dots behave only in the clef and octave used in the uppermost staff OR if there are no notes at the same timestamp in the top staff?

@craigsapp
Copy link
Contributor

I think the final solution is that the unison comparison is between a note on the current staff and (incorrectly) a note on the top staff:

Screenshot 2024-07-03 at 10 59 02
Click to view MEI data for above example
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/5.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="https://music-encoding.org/schema/5.0/mei-all.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<mei xmlns="http://www.music-encoding.org/ns/mei" meiversion="5.0">
 <meiHead>
  <fileDesc>
   <titleStmt>
    <title />
   </titleStmt>
   <pubStmt>
    <unpub>This MEI file was created by Verovio's Humdrum converter. When published, this unpub element should be removed, and the enclosing pubStmt element should be properly filled out.</unpub>
   </pubStmt>
  </fileDesc>
  <encodingDesc>
   <appInfo>
    <application isodate="2024-07-03T10:59:05" version="4.3.0-dev-53d6495-dirty">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  <extMeta>
   <frames xmlns="http://www.humdrum.org/ns/humxml" />
  </extMeta>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="mzg5w8b">
    <score xml:id="s8garhr">
     <scoreDef xml:id="siqgu9n" tempo.dist="3.0000vu">
      <staffGrp xml:id="ss4wrzv" bar.thru="true" symbol="brace">
       <staffDef xml:id="staffdef-L1F2" n="1" lines="5">
        <clef xml:id="clef-L2F2" shape="G" line="2" />
       </staffDef>
       <staffDef xml:id="staffdef-L1F1" n="2" lines="5">
        <clef xml:id="clef-L2F1" shape="C" line="3" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1">
       <staff xml:id="staff-L1F2" n="1">
        <layer xml:id="layer-L1F2N1" n="1">
         <note xml:id="note-L4F3" dots="1" dur="4" oct="4" pname="c" accid.ges="n">
          <verse xml:id="verse-L4F5" n="1">
           <syl xml:id="syl-L4F5"> a</syl>
          </verse>
         </note>
         <note xml:id="note-L5F3" dots="1" dur="4" oct="4" pname="e" accid.ges="n">
          <verse xml:id="verse-L5F5" n="1">
           <syl xml:id="syl-L5F5"> b</syl>
          </verse>
         </note>
         <note xml:id="note-L6F3" dots="1" dur="4" oct="4" pname="g" accid.ges="n">
          <verse xml:id="verse-L6F5" n="1">
           <syl xml:id="syl-L6F5"> c</syl>
          </verse>
         </note>
        </layer>
        <layer xml:id="layer-L1F2N2" n="2">
         <note xml:id="note-L4F4" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
         <note xml:id="note-L5F4" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L6F4" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L1F1" n="2">
        <layer xml:id="layer-L1F1N1" n="1">
         <note xml:id="note-L4F1" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
         <note xml:id="note-L5F1" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L6F1" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L1F1N2" n="2">
         <note xml:id="note-L4F2" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
         <note xml:id="note-L5F2" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L6F2" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
        </layer>
       </staff>
      </measure>
      <measure xml:id="measure-L7">
       <staff xml:id="staff-L7F3N1" n="1">
        <layer xml:id="layer-L7F3N1" n="1">
         <note xml:id="note-L8F3" dots="1" dur="4" oct="4" pname="e" accid.ges="n">
          <verse xml:id="verse-L8F5" n="1">
           <syl xml:id="syl-L8F5"> a</syl>
          </verse>
         </note>
         <note xml:id="note-L9F3" dots="1" dur="4" oct="4" pname="g" accid.ges="n">
          <verse xml:id="verse-L9F5" n="1">
           <syl xml:id="syl-L9F5"> b</syl>
          </verse>
         </note>
         <note xml:id="note-L10F3" dots="1" dur="4" oct="4" pname="b" accid.ges="n">
          <verse xml:id="verse-L10F5" n="1">
           <syl xml:id="syl-L10F5"> c</syl>
          </verse>
         </note>
        </layer>
        <layer xml:id="layer-L7F4N2" n="2">
         <note xml:id="note-L8F4" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L9F4" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
         <note xml:id="note-L10F4" dots="1" dur="4" oct="4" pname="b" accid.ges="n" />
        </layer>
       </staff>
       <staff xml:id="staff-L7F1N1" n="2">
        <layer xml:id="layer-L7F1N1" n="1">
         <note xml:id="note-L8F1" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
         <note xml:id="note-L9F1" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L10F1" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
        </layer>
        <layer xml:id="layer-L7F2N2" n="2">
         <note xml:id="note-L8F2" dots="1" dur="4" oct="4" pname="c" accid.ges="n" />
         <note xml:id="note-L9F2" dots="1" dur="4" oct="4" pname="e" accid.ges="n" />
         <note xml:id="note-L10F2" dots="1" dur="4" oct="4" pname="g" accid.ges="n" />
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

In the first measure there are single dots in the bottom staff, but when the pitches are different from the top staff in the second measure, the double dots appear in the second staff.

@axgeertinger
Copy link
Author

@craigsapp yes, that would explain it

@ndubo
Copy link

ndubo commented Jul 3, 2024

BTW It seems that the single dot unison was working fine with version 3.4.1. Check Verovio Version comparison.

@axgeertinger
Copy link
Author

@ndubo indeed. Apparently the issue was introduced with version 3.5.0.

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

Successfully merging a pull request may close this issue.

5 participants