verovio
verovio copied to clipboard
Cross-staff stem + dynam interaction
In this example:
The dynamic markings rfz should not overlap the cross-staff stem. Here is the target rendering:
Click to view MEI data for above example
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/dev/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="https://music-encoding.org/schema/dev/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.0-dev">
<meiHead>
<fileDesc>
<titleStmt>
<title />
</titleStmt>
<pubStmt />
</fileDesc>
<encodingDesc>
<appInfo>
<application isodate="2023-03-12T15:27:10" version="3.16.0-dev-a4f5d00">
<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="24" token="!!!RDF**kern: < = below" xml:id="L25">
<frameInfo>
<startTime float="8" />
<frameType>reference</frameType>
<referenceKey>RDF**kern</referenceKey>
<referenceValue>< = below</referenceValue>
</frameInfo>
</metaFrame>
<metaFrame n="25" token="!!!RDF**kern: > = above" xml:id="L26">
<frameInfo>
<startTime float="8" />
<frameType>reference</frameType>
<referenceKey>RDF**kern</referenceKey>
<referenceValue>> = above</referenceValue>
</frameInfo>
</metaFrame>
</frames>
</extMeta>
</meiHead>
<music>
<body>
<mdiv xml:id="mcgdpq6">
<score xml:id="s9n7vkq">
<scoreDef xml:id="s1iaa92h" midi.bpm="112.000000">
<staffGrp xml:id="s1wr8al2" bar.thru="true" symbol="brace">
<staffDef xml:id="staffdef-L2F2" n="1" lines="5">
<clef xml:id="clef-L3F2" shape="G" line="2" />
<keySig xml:id="keysig-L4F2" pname="c" mode="major" sig="0" />
<meterSig xml:id="metersig-L6F2" count="4" unit="4" />
</staffDef>
<staffDef xml:id="staffdef-L2F1" n="2" lines="5">
<clef xml:id="clef-L3F1" shape="F" line="4" />
<keySig xml:id="keysig-L4F1" pname="c" mode="major" sig="0" />
<meterSig xml:id="metersig-L6F1" count="4" unit="4" />
</staffDef>
</staffGrp>
</scoreDef>
<section xml:id="section-L2F1">
<measure xml:id="measure-L2" n="17">
<staff xml:id="staff-L2F2" n="1">
<layer xml:id="layer-L2F2N1" n="1">
<chord xml:id="chord-L9F2" dur="8" stem.dir="up">
<note xml:id="note-L9F2S1" oct="3" pname="b" accid.ges="n" />
<note xml:id="note-L9F2S2" dur="4" staff="2" oct="3" pname="d" accid.ges="n" />
<note xml:id="note-L9F2S3" dur="4" staff="2" oct="3" pname="f" accid.ges="n" />
<artic xml:id="artic-L9F2" artic="stacc" place="above" />
</chord>
<rest xml:id="rest-L10F2" dur="8" />
<chord xml:id="chord-L11F2" dur="8" stem.dir="up">
<note xml:id="note-L11F2S1" oct="4" pname="c" accid.ges="n" />
<note xml:id="note-L11F2S2" dur="4" staff="2" oct="3" pname="e" accid.ges="n" />
<note xml:id="note-L11F2S3" dur="4" staff="2" oct="3" pname="g" accid.ges="n" />
<artic xml:id="artic-L11F2" artic="stacc" place="above" />
</chord>
<rest xml:id="rest-L12F2" dur="8" />
<chord xml:id="chord-L13F2" dur="8" stem.dir="up">
<note xml:id="note-L13F2S1" oct="4" pname="c" accid="s" />
<note xml:id="note-L13F2S2" dur="4" staff="2" oct="3" pname="e" accid.ges="n" />
<note xml:id="note-L13F2S3" dur="4" staff="2" oct="3" pname="g" accid.ges="n" />
<artic xml:id="artic-L13F2" artic="stacc" place="above" />
</chord>
<rest xml:id="rest-L14F2" dur="8" />
<chord xml:id="chord-L15F2" dur="8" stem.dir="up">
<note xml:id="note-L15F2S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L15F2S2" dur="4" staff="2" oct="3" pname="f" accid.ges="n" />
<note xml:id="note-L15F2S3" dur="4" staff="2" oct="3" pname="a" accid.ges="n" />
<artic xml:id="artic-L15F2" artic="stacc" place="above" />
</chord>
<rest xml:id="rest-L16F2" dur="8" />
</layer>
</staff>
<staff xml:id="staff-L2F1" n="2">
<layer xml:id="layer-L2F1N1" n="1">
<note xml:id="note-L9F1" dur="8" oct="2" pname="g" stem.dir="down" accid.ges="n">
<artic xml:id="artic-L9F1" artic="stacc" place="below" />
</note>
<rest xml:id="rest-L10F1" dur="8" ploc="e" oloc="2" />
<note xml:id="note-L11F1" dur="8" oct="2" pname="c" stem.dir="down" accid.ges="n">
<artic xml:id="artic-L11F1" artic="stacc" place="below" />
</note>
<rest xml:id="rest-L12F1" dur="8" ploc="e" oloc="2" />
<note xml:id="note-L13F1" dur="8" oct="2" pname="a" stem.dir="down" accid.ges="n">
<artic xml:id="artic-L13F1" artic="stacc" place="below" />
</note>
<rest xml:id="rest-L14F1" dur="8" ploc="e" oloc="2" />
<note xml:id="note-L15F1" dur="8" oct="2" pname="d" stem.dir="down" accid.ges="n">
<artic xml:id="artic-L15F1" artic="stacc" place="below" />
</note>
<rest xml:id="rest-L16F1" dur="8" ploc="e" oloc="2" />
</layer>
</staff>
<dynam xml:id="dynam-L11F3" staff="1" tstamp="2.000000" vgrp="100">rfz</dynam>
<dynam xml:id="dynam-L15F3" staff="1" tstamp="4.000000" vgrp="100">rfz</dynam>
</measure>
<measure xml:id="measure-L17" n="18">
<staff xml:id="staff-L17F2N1" n="1">
<layer xml:id="layer-L17F2N1" n="1">
<chord xml:id="chord-L18F2" dur="8" stem.dir="up">
<note xml:id="note-L18F2S1" staff="2" oct="3" pname="f" accid="s" />
<note xml:id="note-L18F2S2" staff="2" oct="3" pname="a" accid.ges="n" />
<note xml:id="note-L18F2S3" oct="4" pname="d" accid="s" />
<artic xml:id="artic-L18F2" artic="stacc" place="above" />
</chord>
<rest xml:id="rest-L19F2" dur="8" />
<chord xml:id="chord-L20F2" dur="8">
<note xml:id="note-L20F2S1" oct="3" pname="g" accid.ges="n" />
<note xml:id="note-L20F2S2" oct="3" pname="b" accid.ges="n" />
<note xml:id="note-L20F2S3" oct="4" pname="e" accid.ges="n" />
<artic xml:id="artic-L20F2" artic="stacc" place="above" />
</chord>
<rest xml:id="rest-L21F2" dur="8" />
<chord xml:id="chord-L22F2" dur="2">
<note xml:id="note-L22F2S1" oct="3" pname="g" accid.ges="n" />
<note xml:id="note-L22F2S2" oct="3" pname="b" accid.ges="n" />
<note xml:id="note-L22F2S3" oct="4" pname="f">
<accid xml:id="accid-L22F2S3" accid="n" func="caution" />
</note>
</chord>
</layer>
</staff>
<staff xml:id="staff-L17F1N1" n="2">
<layer xml:id="layer-L17F1N1" n="1">
<note xml:id="note-L18F1" dur="8" oct="2" pname="b" stem.dir="down" accid.ges="n">
<artic xml:id="artic-L18F1" artic="stacc" place="below" />
</note>
<rest xml:id="rest-L19F1" dur="8" ploc="g" oloc="2" />
<note xml:id="note-L20F1" dur="8" oct="2" pname="e" accid.ges="n">
<artic xml:id="artic-L20F1" artic="stacc" />
</note>
<rest xml:id="rest-L21F1" dur="8" />
<chord xml:id="chord-L22F1" dur="2">
<note xml:id="note-L22F1S1" oct="2" pname="d" accid.ges="n" />
<note xml:id="note-L22F1S2" oct="3" pname="d" accid.ges="n" />
</chord>
</layer>
</staff>
<dynam xml:id="dynam-L20F3" staff="1" tstamp="2.000000" vgrp="100">rfz</dynam>
<dynam xml:id="dynam-L22F3" staff="1" tstamp="3.000000" vgrp="100">rfz</dynam>
<tie xml:id="tie-L22F2S1-L23F2" type="hanging-terminal" staff="1" startid="#note-L22F2S1" tstamp2="0m+5.0000" />
<tie xml:id="tie-L22F2S2-L23F2" type="hanging-terminal" staff="1" startid="#note-L22F2S2" tstamp2="0m+5.0000" />
<tie xml:id="tie-L22F2S3-L23F2" type="hanging-terminal" staff="1" startid="#note-L22F2S3" tstamp2="0m+5.0000" />
</measure>
</section>
</score>
</mdiv>
</body>
</music>
</mei>
Also note that once implemented, the rfz should not collide with the previous cross-staff stem (probably will not for this example, but that is something to think about).