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
664 stars 184 forks source link

compound articulation interaction with staff lines #447

Open craigsapp opened 7 years ago

craigsapp commented 7 years ago

Compound articulations should not be both be placed in a single staff space. And tenutos should definitely not be placed on staff lines :-)

Example of current ten-stacc placements:

screen shot 2017-01-20 at 14 11 28

Correct placement:

screen shot 2017-01-20 at 14 24 37

test MEI data:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://music-encoding.org/schema/3.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://music-encoding.org/schema/3.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="3.0.0">
    <meiHead>
        <fileDesc>
            <titleStmt>
                <title />
            </titleStmt>
            <pubStmt>
                <date>2017-01-20 14:27:30</date>
            </pubStmt>
        </fileDesc>
        <encodingDesc>
            <projectDesc>
                <p>Transcoded from Humdrum with Verovio version 0.9.14-dev-1071670-dirty</p>
            </projectDesc>
        </encodingDesc>
        <extMeta>
            <frames xmlns:humxml="http://www.humdrum.org/ns/humxml">
                <metaFrame n="33" token="!!!RDF**kern: &gt; = above" xml:id="loc33">
                    <frameInfo>
                        <startTime float="26" />
                        <frameType>reference</frameType>
                        <referenceKey>RDF**kern</referenceKey>
                        <referenceValue>&gt; = above</referenceValue>
                    </frameInfo>
                </metaFrame>
            </frames>
        </extMeta>
    </meiHead>
    <music>
        <body>
            <mdiv>
                <score>
                    <scoreDef xml:id="scoredef-000000152984785">
                        <staffGrp xml:id="m-000000140331923">
                            <staffDef xml:id="staffdef-000000192093767" clef.shape="G" clef.line="2" n="1" lines="5" />
                        </staffGrp>
                    </scoreDef>
                    <section xml:id="section-000000093819410">
                        <measure xml:id="measure-L4" n="1">
                            <staff xml:id="staff-L4F1" n="1">
                                <layer xml:id="layer-L4F1" n="1">
                                    <note xml:id="note-L5F1" dur="4" oct="4" pname="c" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000134988335" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L6F1" dur="4" oct="4" pname="d" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000006668375" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L7F1" dur="4" oct="4" pname="e" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000165209909" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L8F1" dur="4" oct="4" pname="f" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000104486053" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L9F1" dur="4" oct="4" pname="g" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000205097769" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L10F1" dur="4" oct="4" pname="a" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000029346666" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L11F1" dur="4" oct="4" pname="b" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000001686105" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L12F1" dur="4" oct="5" pname="c" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000132582354" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L13F1" dur="4" oct="5" pname="d" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000039259924" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L14F1" dur="4" oct="5" pname="e" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000095673576" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L15F1" dur="4" oct="5" pname="f" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000208509220" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L16F1" dur="4" oct="5" pname="g" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000098179039" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L17F1" dur="4" oct="5" pname="a" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000210132456" artic="ten-stacc" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                        <measure xml:id="measure-L18" n="2" right="end">
                            <staff xml:id="staff-L18F1" n="1">
                                <layer xml:id="layer-L18F1" n="1">
                                    <note xml:id="note-L19F1" dur="4" oct="4" pname="c" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000030513536" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L20F1" dur="4" oct="4" pname="d" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000083960397" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L21F1" dur="4" oct="4" pname="e" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000169159487" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L22F1" dur="4" oct="4" pname="f" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000192672751" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L23F1" dur="4" oct="4" pname="g" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000043772225" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L24F1" dur="4" oct="4" pname="a" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000165332649" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L25F1" dur="4" oct="4" pname="b" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000179568338" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L26F1" dur="4" oct="5" pname="c" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000143523552" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L27F1" dur="4" oct="5" pname="d" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000090837694" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L28F1" dur="4" oct="5" pname="e" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000189509203" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L29F1" dur="4" oct="5" pname="f" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000159594450" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L30F1" dur="4" oct="5" pname="g" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000068392652" artic="ten-stacc" />
                                    </note>
                                    <note xml:id="note-L31F1" dur="4" oct="5" pname="a" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000047116672" artic="ten-stacc" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                    </section>
                </score>
            </mdiv>
        </body>
    </music>
</mei>
craigsapp commented 7 years ago

acc-stacc also has some problems, since the staccato and accent marks cannot be dissociated from each other:

screen shot 2017-01-20 at 14 51 39

These accents should look like this:

screen shot 2017-01-20 at 14 52 29

Or, depending on style, like this:

screen shot 2017-01-20 at 14 52 36

MEI test data:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://music-encoding.org/schema/3.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://music-encoding.org/schema/3.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="3.0.0">
    <meiHead>
        <fileDesc>
            <titleStmt>
                <title />
            </titleStmt>
            <pubStmt>
                <date>2017-01-20 14:54:42</date>
            </pubStmt>
        </fileDesc>
        <encodingDesc>
            <projectDesc>
                <p>Transcoded from Humdrum with Verovio version 0.9.14-dev-1071670-dirty</p>
            </projectDesc>
        </encodingDesc>
        <extMeta>
            <frames xmlns:humxml="http://www.humdrum.org/ns/humxml">
                <metaFrame n="33" token="!!!RDF**kern: &gt; = above" xml:id="loc33">
                    <frameInfo>
                        <startTime float="26" />
                        <frameType>reference</frameType>
                        <referenceKey>RDF**kern</referenceKey>
                        <referenceValue>&gt; = above</referenceValue>
                    </frameInfo>
                </metaFrame>
            </frames>
        </extMeta>
    </meiHead>
    <music>
        <body>
            <mdiv>
                <score>
                    <scoreDef xml:id="scoredef-000000049264611">
                        <staffGrp xml:id="m-000000092403022">
                            <staffDef xml:id="staffdef-000000172168969" clef.shape="G" clef.line="2" n="1" lines="5" />
                        </staffGrp>
                    </scoreDef>
                    <section xml:id="section-000000167132802">
                        <measure xml:id="measure-L4" n="1">
                            <staff xml:id="staff-L4F1" n="1">
                                <layer xml:id="layer-L4F1" n="1">
                                    <note xml:id="note-L5F1" dur="4" oct="4" pname="c" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000207382224" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L6F1" dur="4" oct="4" pname="d" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000051740007" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L7F1" dur="4" oct="4" pname="e" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000153262450" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L8F1" dur="4" oct="4" pname="f" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000123105105" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L9F1" dur="4" oct="4" pname="g" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000185974509" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L10F1" dur="4" oct="4" pname="a" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000167557717" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L11F1" dur="4" oct="4" pname="b" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000071111172" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L12F1" dur="4" oct="5" pname="c" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000193922141" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L13F1" dur="4" oct="5" pname="d" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000139363327" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L14F1" dur="4" oct="5" pname="e" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000175777549" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L15F1" dur="4" oct="5" pname="f" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000029722895" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L16F1" dur="4" oct="5" pname="g" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000180164395" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L17F1" dur="4" oct="5" pname="a" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000055151567" artic="acc stacc" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                        <measure xml:id="measure-L18" n="2" right="end">
                            <staff xml:id="staff-L18F1" n="1">
                                <layer xml:id="layer-L18F1" n="1">
                                    <note xml:id="note-L19F1" dur="4" oct="4" pname="c" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000169662612" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L20F1" dur="4" oct="4" pname="d" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000028072367" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L21F1" dur="4" oct="4" pname="e" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000163803588" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L22F1" dur="4" oct="4" pname="f" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000158524016" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L23F1" dur="4" oct="4" pname="g" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000125669569" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L24F1" dur="4" oct="4" pname="a" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000092696157" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L25F1" dur="4" oct="4" pname="b" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000001316435" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L26F1" dur="4" oct="5" pname="c" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000159862562" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L27F1" dur="4" oct="5" pname="d" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000167822995" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L28F1" dur="4" oct="5" pname="e" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000172326235" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L29F1" dur="4" oct="5" pname="f" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000020022039" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L30F1" dur="4" oct="5" pname="g" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000063149854" artic="acc stacc" />
                                    </note>
                                    <note xml:id="note-L31F1" dur="4" oct="5" pname="a" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000205399406" artic="acc stacc" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                    </section>
                </score>
            </mdiv>
        </body>
    </music>
</mei>
craigsapp commented 7 years ago

marc-stacc looks good :-)

screen shot 2017-01-20 at 14 56 49

Although in terms of readability the articulations seem a bit small. Here is the same music typeset in SCORE:

screen shot 2017-01-20 at 14 59 02

MEI test data:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://music-encoding.org/schema/3.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://music-encoding.org/schema/3.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="3.0.0">
    <meiHead>
        <fileDesc>
            <titleStmt>
                <title />
            </titleStmt>
            <pubStmt>
                <date>2017-01-20 15:00:44</date>
            </pubStmt>
        </fileDesc>
        <encodingDesc>
            <projectDesc>
                <p>Transcoded from Humdrum with Verovio version 0.9.14-dev-1071670-dirty</p>
            </projectDesc>
        </encodingDesc>
        <extMeta>
            <frames xmlns:humxml="http://www.humdrum.org/ns/humxml">
                <metaFrame n="33" token="!!!RDF**kern: &gt; = above" xml:id="loc33">
                    <frameInfo>
                        <startTime float="26" />
                        <frameType>reference</frameType>
                        <referenceKey>RDF**kern</referenceKey>
                        <referenceValue>&gt; = above</referenceValue>
                    </frameInfo>
                </metaFrame>
            </frames>
        </extMeta>
    </meiHead>
    <music>
        <body>
            <mdiv>
                <score>
                    <scoreDef xml:id="scoredef-000000172250489">
                        <staffGrp xml:id="m-000000088775160">
                            <staffDef xml:id="staffdef-000000187236314" clef.shape="G" clef.line="2" n="1" lines="5" />
                        </staffGrp>
                    </scoreDef>
                    <section xml:id="section-000000176638910">
                        <measure xml:id="measure-L4" n="1">
                            <staff xml:id="staff-L4F1" n="1">
                                <layer xml:id="layer-L4F1" n="1">
                                    <note xml:id="note-L5F1" dur="4" oct="4" pname="c" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000145628493" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L6F1" dur="4" oct="4" pname="d" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000185005986" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L7F1" dur="4" oct="4" pname="e" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000038639968" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L8F1" dur="4" oct="4" pname="f" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000165909944" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L9F1" dur="4" oct="4" pname="g" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000008971997" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L10F1" dur="4" oct="4" pname="a" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000087203132" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L11F1" dur="4" oct="4" pname="b" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000016464308" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L12F1" dur="4" oct="5" pname="c" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000134986672" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L13F1" dur="4" oct="5" pname="d" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000006761152" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L14F1" dur="4" oct="5" pname="e" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000125203488" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L15F1" dur="4" oct="5" pname="f" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000068600446" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L16F1" dur="4" oct="5" pname="g" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000154481496" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L17F1" dur="4" oct="5" pname="a" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000097715871" artic="marc-stacc" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                        <measure xml:id="measure-L18" n="2" right="end">
                            <staff xml:id="staff-L18F1" n="1">
                                <layer xml:id="layer-L18F1" n="1">
                                    <note xml:id="note-L19F1" dur="4" oct="4" pname="c" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000006747920" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L20F1" dur="4" oct="4" pname="d" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000051501274" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L21F1" dur="4" oct="4" pname="e" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000175382701" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L22F1" dur="4" oct="4" pname="f" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000129258591" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L23F1" dur="4" oct="4" pname="g" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000154180636" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L24F1" dur="4" oct="4" pname="a" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000129394883" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L25F1" dur="4" oct="4" pname="b" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000071234911" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L26F1" dur="4" oct="5" pname="c" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000107157956" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L27F1" dur="4" oct="5" pname="d" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000086952230" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L28F1" dur="4" oct="5" pname="e" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000102600756" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L29F1" dur="4" oct="5" pname="f" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000210739322" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L30F1" dur="4" oct="5" pname="g" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000205945235" artic="marc-stacc" />
                                    </note>
                                    <note xml:id="note-L31F1" dur="4" oct="5" pname="a" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000007899227" artic="marc-stacc" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                    </section>
                </score>
            </mdiv>
        </body>
    </music>
</mei>
craigsapp commented 7 years ago

You got this tricky case right :-)

screen shot 2017-01-20 at 15 03 47

Although Behind Bars, p. 121 recommends placing in one of the centeral spaces rather than the outer space (I don't see a problem with the above layout).

MEI test data:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://music-encoding.org/schema/3.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://music-encoding.org/schema/3.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="3.0.0">
    <meiHead>
        <fileDesc>
            <titleStmt>
                <title />
            </titleStmt>
            <pubStmt>
                <date>2017-01-20 15:06:22</date>
            </pubStmt>
        </fileDesc>
        <encodingDesc>
            <projectDesc>
                <p>Transcoded from Humdrum with Verovio version 0.9.14-dev-1071670-dirty</p>
            </projectDesc>
        </encodingDesc>
        <extMeta>
            <frames xmlns:humxml="http://www.humdrum.org/ns/humxml">
                <metaFrame n="18" token="!!!RDF**kern: &lt; = below" xml:id="loc18">
                    <frameInfo>
                        <startTime float="12" />
                        <frameType>reference</frameType>
                        <referenceKey>RDF**kern</referenceKey>
                        <referenceValue>&lt; = below</referenceValue>
                    </frameInfo>
                </metaFrame>
                <metaFrame n="19" token="!!!RDF**kern: &gt; = above" xml:id="loc19">
                    <frameInfo>
                        <startTime float="12" />
                        <frameType>reference</frameType>
                        <referenceKey>RDF**kern</referenceKey>
                        <referenceValue>&gt; = above</referenceValue>
                    </frameInfo>
                </metaFrame>
            </frames>
        </extMeta>
    </meiHead>
    <music>
        <body>
            <mdiv>
                <score>
                    <scoreDef xml:id="scoredef-000000061095602">
                        <staffGrp xml:id="m-000000077635067">
                            <staffDef xml:id="staffdef-000000001508832" clef.shape="G" clef.line="2" n="1" lines="5" />
                        </staffGrp>
                    </scoreDef>
                    <section xml:id="section-000000010673678">
                        <measure xml:id="measure-L3" n="1">
                            <staff xml:id="staff-L3F1" n="1">
                                <layer xml:id="layer-L3F1" n="1">
                                    <note xml:id="note-L4F1" dur="4" oct="4" pname="c" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000044212577" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L5F1" dur="4" oct="3" pname="b" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000112653381" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L6F1" dur="4" oct="3" pname="a" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000006551383" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L7F1" dur="4" oct="3" pname="g" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000203726694" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L8F1" dur="4" oct="3" pname="f" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000014079136" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L9F1" dur="4" oct="3" pname="e" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000001037828" artic="ten" place="above" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                        <measure xml:id="measure-L10" right="end">
                            <staff xml:id="staff-L10F1" n="1">
                                <layer xml:id="layer-L10F1" n="1">
                                    <note xml:id="note-L11F1" dur="4" oct="5" pname="a" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000158299017" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L12F1" dur="4" oct="5" pname="b" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000001887225" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L13F1" dur="4" oct="6" pname="c" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000146023263" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L14F1" dur="4" oct="6" pname="d" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000052708477" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L15F1" dur="4" oct="6" pname="e" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000128629166" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L16F1" dur="4" oct="6" pname="f" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000010145081" artic="ten" place="below" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                    </section>
                </score>
            </mdiv>
        </body>
    </music>
</mei>
craigsapp commented 7 years ago

stacc placement is also good:

screen shot 2017-01-20 at 15 10 53

But there is a bug in the placement of the staccato: it is bottom justified to the middle of the space rather than center justified to the center of the space:

screen shot 2017-01-20 at 15 12 44

Test MEI data:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://music-encoding.org/schema/3.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://music-encoding.org/schema/3.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="3.0.0">
    <meiHead>
        <fileDesc>
            <titleStmt>
                <title />
            </titleStmt>
            <pubStmt>
                <date>2017-01-20 15:06:22</date>
            </pubStmt>
        </fileDesc>
        <encodingDesc>
            <projectDesc>
                <p>Transcoded from Humdrum with Verovio version 0.9.14-dev-1071670-dirty</p>
            </projectDesc>
        </encodingDesc>
        <extMeta>
            <frames xmlns:humxml="http://www.humdrum.org/ns/humxml">
                <metaFrame n="18" token="!!!RDF**kern: &lt; = below" xml:id="loc18">
                    <frameInfo>
                        <startTime float="12" />
                        <frameType>reference</frameType>
                        <referenceKey>RDF**kern</referenceKey>
                        <referenceValue>&lt; = below</referenceValue>
                    </frameInfo>
                </metaFrame>
                <metaFrame n="19" token="!!!RDF**kern: &gt; = above" xml:id="loc19">
                    <frameInfo>
                        <startTime float="12" />
                        <frameType>reference</frameType>
                        <referenceKey>RDF**kern</referenceKey>
                        <referenceValue>&gt; = above</referenceValue>
                    </frameInfo>
                </metaFrame>
            </frames>
        </extMeta>
    </meiHead>
    <music>
        <body>
            <mdiv>
                <score>
                    <scoreDef xml:id="scoredef-000000061095602">
                        <staffGrp xml:id="m-000000077635067">
                            <staffDef xml:id="staffdef-000000001508832" clef.shape="G" clef.line="2" n="1" lines="5" />
                        </staffGrp>
                    </scoreDef>
                    <section xml:id="section-000000010673678">
                        <measure xml:id="measure-L3" n="1">
                            <staff xml:id="staff-L3F1" n="1">
                                <layer xml:id="layer-L3F1" n="1">
                                    <note xml:id="note-L4F1" dur="4" oct="4" pname="c" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000044212577" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L5F1" dur="4" oct="3" pname="b" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000112653381" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L6F1" dur="4" oct="3" pname="a" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000006551383" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L7F1" dur="4" oct="3" pname="g" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000203726694" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L8F1" dur="4" oct="3" pname="f" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000014079136" artic="ten" place="above" />
                                    </note>
                                    <note xml:id="note-L9F1" dur="4" oct="3" pname="e" accid.ges="n" stem.dir="down">
                                        <artic xml:id="artic-000000001037828" artic="ten" place="above" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                        <measure xml:id="measure-L10" right="end">
                            <staff xml:id="staff-L10F1" n="1">
                                <layer xml:id="layer-L10F1" n="1">
                                    <note xml:id="note-L11F1" dur="4" oct="5" pname="a" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000158299017" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L12F1" dur="4" oct="5" pname="b" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000001887225" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L13F1" dur="4" oct="6" pname="c" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000146023263" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L14F1" dur="4" oct="6" pname="d" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000052708477" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L15F1" dur="4" oct="6" pname="e" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000128629166" artic="ten" place="below" />
                                    </note>
                                    <note xml:id="note-L16F1" dur="4" oct="6" pname="f" accid.ges="n" stem.dir="up">
                                        <artic xml:id="artic-000000010145081" artic="ten" place="below" />
                                    </note>
                                </layer>
                            </staff>
                        </measure>
                    </section>
                </score>
            </mdiv>
        </body>
    </music>
</mei>
craigsapp commented 7 years ago

Also, to be slightly picky :-), the tenuto line should be thicker than a staff line. In verovio it is thinner than a staff line. Here is a verovio rendering of a tenuto showing staff lines and ledger lines as well:

screen shot 2017-01-20 at 15 16 57

Equivalent music typeset in SCORE:

screen shot 2017-01-20 at 15 19 43

The standard style for a tenuto is to be the width of a notehead. In verovio it is a little shorter, but readability is not a problem. However, the thinness of the tenuto is a slight readability problem.

Ledger lines should be thicker than staff lines as well...

craigsapp commented 7 years ago

The good news is that staccatos have the correct size, being smaller than augmentation dots:

screen shot 2017-01-20 at 15 26 20
lpugin commented 7 years ago

tenuto staccato: you should use "ten stacc" instead of "ten-stacc". The later uses one single SMuFL glyph and will collide with staff lines. One possible option is to make them displayed outside the staves as "marc-stacc". The same should apply to "acc-stacc".

craigsapp commented 7 years ago

ten stacc gives this amusing rendering:

screen shot 2017-01-23 at 05 42 45

stacc ten gives nice output:

screen shot 2017-01-23 at 05 42 02

See https://github.com/music-encoding/music-encoding/issues/375 for @pe-ro's note about ordering of articulations.

I would say that ten stacc and stacc ten should both output the current rendering of stacc ten, and if someone wants the current output for ten stacc they would have to add these children elements to a note:

<artic artic="ten" order="1"/>
<artic artic="stacc" order="2"/>

ten-stacc and marc-stacc may be retired; otherwise, it is better to map to them internally to stacc ten and stacc marc so that they behave well.

One possible option is to make them displayed outside the staves as "marc-stacc". The same should apply to "acc-stacc".

Yes, it should be sufficient to place both articulations outside of the staff for stacc marc and stacc acc (stacc marc and stacc acc currently have a rendering bug, with the two articulations are being placed independent of each other):

screen shot 2017-01-23 at 06 04 35
lpugin commented 7 years ago

You are right, it should be encoded stacc ten and not ten stacc to get them displayed in the correct order.

craigsapp commented 7 years ago

And so the ordering of articulations in @artic will be the stacking order? (i.e., no @order that Perry was thinking about).

lpugin commented 7 years ago

Yes. I do not think @order on artic is necessary and that it is not a good idea. I would instead expect the order of the values in the attribute or of the elements to be taken into account.

craigsapp commented 7 years ago

That sounds good to me. Just tell @pe-ro :-)

And you are also saying in the last message that the sequence of note/artic elements also will determine their stacking order (as well as the token sequence in note@artic). That is also good for me.

But note this is slightly different from <measure> or <layer> content. In those cases it is a temporal sequence, while in this case it is a spatial sequence. <artic> could also be treated like floating elements such as trill or <fermata> but in those case the @tstamp or @startid are used to place the items (so they don't have to be encoded in any particular order). But I also can't imagine a case yet where @order on note/accid would be necessary.

pe-ro commented 7 years ago

Laurent and I had a conversation about this recently and decided that the order of values within @artic and @accid as well as the order of a note's <artic> and <accid> children would be significant. I think it makes the most sense to translate the left-to-right order of the attribute values as closest-farthest from the note head. For example,

<note artic="acc stacc marc"/>

would result in the accent mark being closest to the note head no matter which direction the stem points.

I also can't imagine a case yet where @order on note/accid would be necessary.

If encoding order is not significant, then @order is necessary to assign a different/explicit spatial order. But if encoding order is significant, then @order isn't necessary.

rettinghaus commented 7 years ago

@pe-ro This seems to me as the most logical and "natural" approach. Just to make it totally clear, how about this:

<note>
  <artic artic="marc stacc" place="above" />
  <artic artic="acc ten" place="below" />
  <artic artic="stacciss open snap" />
</note>

At first the marcato is put over the note, then the dot above it. Next an accent below and afterwards the tenuto under that. The remaining articulation symbols would then be placed (freely) above and under the other marks. And of course does the order of the artic elements matter too.

pe-ro commented 7 years ago

I think your example and explanation are on the mark. Since @place is missing on the 3rd <artic> element, the articulations given there would have to follow the renderer's own internal ordering methodology.

pe-ro commented 7 years ago

I just realize I contradicted myself (hey, it happens occasionally) re: the order of articulations vis-a-vis #375.

Presumably, the encoding order of accidentals would be left-to-right (that is, from farthest from the note to closest to the note). Encoding order of articulations may match this farthest -> closest pattern or we could reverse it in the vertical dimension.

Suggestions?

rettinghaus commented 7 years ago

I think a note can be seen as the primary element in music notation, so everything outside the staff should be encoded from closest to farthest to the note.

lpugin commented 3 years ago

This is what we currently get with

<artic artic="stacc"/>
<artic artic="acc"/>

image

It remains unclear how to encode this

image

or

image

lpugin commented 3 years ago

See https://github.com/music-encoding/music-encoding/issues/761

craigsapp commented 3 years ago

Moving a staccato articulation out of the staff is very rare, so in this case the second example is highly preferred.

rettinghaus commented 3 years ago

What's the status of this?