8000 Beam adjustment + articulation interaction · Issue #3973 · rism-digital/verovio · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Beam adjustment + articulation interaction #3973

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

Open
craigsapp opened this issue Mar 1, 2025 · 1 comment
Open

Beam adjustment + articulation interaction #3973

craigsapp opened this issue Mar 1, 2025 · 1 comment

Comments

@craigsapp
Copy link
Contributor

In the following example, notice that the staccato/tenuto on the beam ending notes are not adjusted when the beam is adjusted:

Image

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/>
  </fileDesc>
  <encodingDesc>
   <appInfo>
    <application isodate="2025-02-28T16:19:33" version="4.4.0-dev-b3784cd">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
  </meiHead>
 <music>
  <body>
   <mdiv xml:id="mgz99nh">
    <score xml:id="s1lfas4i">
     <scoreDef xml:id="s1di125g" tempo.dist="3.0000vu">
      <staffGrp xml:id="str2kkq">
       <staffDef xml:id="staffdef-L1F1" n="1" lines="5">
        <clef xml:id="clef-L4F1" shape="F" line="4" />
        <meterSig xml:id="metersig-L5F1" count="2" unit="4" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1" n="1">
       <staff xml:id="staff-L1F1" n="1">
        <layer xml:id="layer-L1F1N1" n="1">
         <beam xml:id="beam-L7F1-L8F1">
          <note xml:id="note-L7F1" type="placed" dur="8" oct="4" pname="d" stem.dir="up" accid.ges="n" />
          <note xml:id="note-L8F1" type="placed" dur="8" oct="4" pname="c" stem.dir="up" accid="s">
           <artic xml:id="artic-L8F1" artic="stacc" place="above" />
          </note>
         </beam>
         <beam xml:id="beam-L9F1-L10F1">
          <note xml:id="note-L9F1" type="placed" dur="8" oct="4" pname="d" stem.dir="up" accid.ges="n" />
          <note xml:id="note-L10F1" type="placed" dur="8" oct="4" pname="c" stem.dir="up" accid.ges="s">
           <artic xml:id="artic-L10F1" artic="stacc" place="above" />
          </note>
         </beam>
        </layer>
       </staff>
      </measure>
      <measure xml:id="measure-L11" n="2">
       <staff xml:id="staff-L11F1N1" n="1">
        <layer xml:id="layer-L11F1N1" n="1">
         <beam xml:id="beam-L13F1-L14F1">
          <note xml:id="note-L13F1" dur="8" oct="4" pname="d" accid.ges="n">
           <artic xml:id="artic-L13F1" artic="stacc" place="above" />
          </note>
          <note xml:id="note-L14F1" dur="8" oct="4" pname="c" accid="s">
           <artic xml:id="artic-L14F1" artic="stacc" />
          </note>
         </beam>
         <beam xml:id="beam-L15F1-L16F1">
          <note xml:id="note-L15F1" dur="8" oct="4" pname="d" accid.ges="n">
           <artic xml:id="artic-L15F1" artic="stacc" place="above" />
          </note>
          <note xml:id="note-L16F1" dur="8" oct="4" pname="c" accid.ges="s">
           <artic xml:id="artic-L16F1" artic="stacc" />
          </note>
         </beam>
        </layer>
        <layer xml:id="layer-L11F2N2" n="2">
         <mRest xml:id="mrest-L13F2" />
        </layer>
       </staff>
      </measure>
      <measure xml:id="measure-L18" n="1">
       <staff xml:id="staff-L18F1N1" n="1">
        <layer xml:id="layer-L18F1N1" n="1">
         <beam xml:id="beam-L19F1-L20F1">
          <note xml:id="note-L19F1" type="placed" dur="8" oct="4" pname="d" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L19F1" artic="ten" place="above" />
          </note>
          <note xml:id="note-L20F1" type="placed" dur="8" oct="4" pname="c" stem.dir="up" accid="s">
           <artic xml:id="artic-L20F1" artic="ten" place="above" />
          </note>
         </beam>
         <beam xml:id="beam-L21F1-L22F1">
          <note xml:id="note-L21F1" type="placed" dur="8" oct="4" pname="d" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L21F1" artic="ten" place="above" />
          </note>
          <note xml:id="note-L22F1" type="placed" dur="8" oct="4" pname="c" stem.dir="up" accid.ges="s">
           <artic xml:id="artic-L22F1" artic="ten" place="above" />
          </note>
         </beam>
        </layer>
       </staff>
      </measure>
      <measure xml:id="measure-L23" n="2">
       <staff xml:id="staff-L23F1N1" n="1">
        <layer xml:id="layer-L23F1N1" n="1">
         <beam xml:id="beam-L25F1-L26F1">
          <note xml:id="note-L25F1" dur="8" oct="4" pname="d" accid.ges="n">
           <artic xml:id="artic-L25F1" artic="ten" place="above" />
          </note>
          <note xml:id="note-L26F1" dur="8" oct="4" pname="c" accid="s">
           <artic xml:id="artic-L26F1" artic="ten" />
          </note>
         </beam>
         <beam xml:id="beam-L27F1-L28F1">
          <note xml:id="note-L27F1" dur="8" oct="4" pname="d" accid.ges="n">
           <artic xml:id="artic-L27F1" artic="ten" place="above" />
          </note>
          <note xml:id="note-L28F1" dur="8" oct="4" pname="c" accid.ges="s">
           <artic xml:id="artic-L28F1" artic="ten" />
          </note>
         </beam>
        </layer>
        <layer xml:id="layer-L23F2N2" n="2">
         <mRest xml:id="mrest-L25F2" />
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

The articulation should follow the beam's vertical position when the beam is adjusted such that the spacing between the beam and the articulation is the same for both beams.

If the articulations are within the staff this would be less of a problem since they would be constrained to be in the middle of the staff space (but in that case the articulations would be on the notehead sides if the notes, away from the beams).

The sharp stretches out the beam, causing a change in the algorithm that triggers adjustment of the beam angle (or more likely the opposite). Perhaps a more ideal situation is to have a sort of hysteresis where small changes in beam length on a system would not trigger an adjustment in the beam angles so that changes in the beam angle are not noticeable. In other words, if the angle of beam 1 is 10 degrees and beam 10.5 degrees between adjacent or nearby beams, it would be noted that these angles are close, and so either both or neither would have an adjustment. (I am not suggesting implementing this, but something to think about in the future :-).

@craigsapp
Copy link
Contributor Author
craigsapp commented Mar 1, 2025

There is a somewhat related case when the staccatoCenter option is used:

Without staccatoCenter:

Image

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/>
  </fileDesc>
  <encodingDesc>
   <appInfo>
    <application isodate="2025-02-28T16:43:40" version="4.4.0-dev-b3784cd">
     <name>Verovio</name>
     <p>Transcoded from Humdrum</p>
    </application>
   </appInfo>
  </encodingDesc>
 </meiHead>
 <music>
  <body>
   <mdiv xml:id="m1udl4o9">
    <score xml:id="s1csichp">
     <scoreDef xml:id="s1qjes55" tempo.dist="3.0000vu">
      <staffGrp xml:id="s1dcchk6">
       <staffDef xml:id="staffdef-L1F1" n="1" lines="5">
        <clef xml:id="c1gywlbk" shape="G" line="2" />
       </staffDef>
      </staffGrp>
     </scoreDef>
     <section xml:id="section-L1F1">
      <measure xml:id="measure-L1" right="invis">
       <staff xml:id="staff-L1F1" n="1">
        <layer xml:id="layer-L1F1N1" n="1">
         <beam xml:id="beam-L2F1-L5F1" type="placed" beam.with="below">
          <note xml:id="note-L2F1" dur="16" oct="4" pname="a" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L2F1" artic="stacc" place="above" />
          </note>
          <note xml:id="note-L3F1" dur="16" oct="5" pname="c" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L3F1" artic="stacc" place="above" />
          </note>
          <note xml:id="note-L4F1" dur="16" oct="5" pname="e" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L4F1" artic="stacc" place="above" />
          </note>
          <note xml:id="note-L5F1" dur="16" oct="5" pname="g" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L5F1" artic="stacc" place="above" />
          </note>
         </beam>
         <beam xml:id="beam-L6F1-L9F1" type="placed" beam.with="below">
          <note xml:id="note-L6F1" dur="16" oct="5" pname="g" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L6F1" artic="stacc" place="above" />
          </note>
          <note xml:id="note-L7F1" dur="16" oct="5" pname="e" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L7F1" artic="stacc" place="above" />
          </note>
          <note xml:id="note-L8F1" dur="16" oct="5" pname="c" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L8F1" artic="stacc" place="above" />
          </note>
          <note xml:id="note-L9F1" dur="16" oct="4" pname="a" stem.dir="up" accid.ges="n">
           <artic xml:id="artic-L9F1" artic="stacc" place="above" />
          </note>
         </beam>
        </layer>
       </staff>
      </measure>
     </section>
    </score>
   </mdiv>
  </body>
 </music>
</mei>

The staccatos are placed vertically as expected (although technically they are a little too close to the beams).

When staccatoCenter option is used:

Image

The staccatos are centered on the noteheads as expected, but the vertical heights are not adjusted for the angle of the beam (i.e. they need to move down on the beam going up and up on the beam going down.

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

1 participant
0