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

string symbols #796

Closed sannedubois closed 6 years ago

sannedubois commented 6 years ago

Is it possible to add a feature that allows us to add string symbols, which is normally a number with a circle around it?

lpugin commented 6 years ago

Could you provide an MEI snippet of the encoding you have in mind?

sannedubois commented 6 years ago

Hello Laurent,

Unfortunately I'm not a programmer, but I have an example of 1 note, made in finale, with a maximum of elements added to 1 note. I discussed it yesterday with Craig Sapp, because an example like this might be convenient when you want to decide which category should have which distance to a note. I added this comments, based on my experience as an engraver/guitar teacher at 'de Haske' (now Hal Leonard).

This is more or less the way we used it in de publishing house I worked and I still use it this way. It could be a good system.

1) Chords would be on top always 2) Under that Positions, always 3) the stringindicator (circled 6), righthand finger (i) and lefthand finger (4) could change places. 4) up and downstroke is closest to the note, unless there is: 5) articulation: would be always closest to the note 6) dynamics under articulation, because articulation is closest to the note 7) other directives like tempo changes could be placed under that, but certainly above: 8) dynamics (graphically) 9) lyrics lowest

png attached

Kind regards, Derk

pe-ro commented 6 years ago

@sannedubois, the image didn't make it through to GitHub. Can you attach it to the issue or send me (pdr4h@virginia.edu) a copy directly? Thanks.

lpugin commented 6 years ago

The issue can be re-opened when more information is provided.

sannedubois commented 6 years ago

Hi Laurent,

Looking at the circled numbers only (for string representations in Verovio) maybe the best would be to use unicode. All digits are listed here:

https://unicode-table.com/en/search/?q=circled+digit+

Example for the first string:

Can you let me know if this is information that you can use?

Kind regards, Derk van der Veen

2018-03-13 8:21 GMT+01:00 Laurent Pugin notifications@github.com:

Closed #796 https://github.com/rism-ch/verovio/issues/796.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/rism-ch/verovio/issues/796#event-1517910635, or mute the thread https://github.com/notifications/unsubscribe-auth/APa0E6KAMzUbbgtWpVhJPvT5KmYzlj7wks5td3OPgaJpZM4SiYpI .

sannedubois commented 6 years ago

Hi Laurent,

Maybe the stringsymbol could be part of the lyrics, so you can use the wordextension to indicate for which notes the symbol applies. I attached a jpg. There are also fonts like ZAPFDINGBATS that have circled digits. That could also be a possibility.

I noticed that importing in the veriovio viewer via music xml gave 2 problems: I posted them on github.

Best regards, Derk

2018-03-13 10:13 GMT+01:00 Derk van der Veen derkvanderveen@gmail.com:

Hi Laurent,

Looking at the circled numbers only (for string representations in Verovio) maybe the best would be to use unicode. All digits are listed here:

https://unicode-table.com/en/search/?q=circled+digit+

Example for the first string:

Can you let me know if this is information that you can use?

Kind regards, Derk van der Veen

2018-03-13 8:21 GMT+01:00 Laurent Pugin notifications@github.com:

Closed #796 https://github.com/rism-ch/verovio/issues/796.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/rism-ch/verovio/issues/796#event-1517910635, or mute the thread https://github.com/notifications/unsubscribe-auth/APa0E6KAMzUbbgtWpVhJPvT5KmYzlj7wks5td3OPgaJpZM4SiYpI .

craigsapp commented 6 years ago

Here is an example encoding string numbers as a unicode character in a text direction:

screen shot 2018-03-13 at 8 14 06 am

MEI data (Github converts the text encoding of the unicode character as the actual character):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://music-encoding.org/schema/4.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://music-encoding.org/schema/4.0.0/mei-all.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<mei xmlns="http://www.music-encoding.org/ns/mei" meiversion="4.0.0">
    <meiHead>
        <fileDesc>
            <titleStmt>
                <title />
            </titleStmt>
            <pubStmt />
        </fileDesc>
        <encodingDesc>
            <appInfo>
                <application isodate="2018-03-13T08:14:13" version="2.0.0-dev-10637f1-dirty">
                    <name>Verovio</name>
                    <p>Transcoded from Humdrum</p>
                </application>
            </appInfo>
        </encodingDesc>
        <workDesc>
            <work>
                <titleStmt>
                    <title />
                </titleStmt>
            </work>
        </workDesc>
    </meiHead>
    <music>
        <body>
            <mdiv xml:id="mdiv-0000001464941880">
                <score xml:id="score-0000002014542017">
                    <scoreDef xml:id="scoredef-0000002074388312">
                        <staffGrp xml:id="staffgrp-0000000495395755">
                            <staffDef xml:id="staffdef-0000000391589849" clef.shape="G" clef.line="2" n="1" lines="5">
                                <label xml:id="label-0000001564677420" />
                            </staffDef>
                        </staffGrp>
                    </scoreDef>
                    <section xml:id="section-0000001951521915">
                        <measure xml:id="measure-L2" right="end" n="1">
                            <staff xml:id="staff-L2F1N1" n="1">
                                <layer xml:id="layer-L2F1N1" n="1">
                                    <note xml:id="note-L4F1" dur="4" oct="4" pname="e" accid.ges="n" />
                                    <note xml:id="note-L6F1" dur="4" oct="4" pname="g" accid.ges="n" />
                                    <note xml:id="note-L8F1" dur="4" oct="5" pname="c" accid.ges="n" />
                                    <note xml:id="note-L10F1" dur="4" oct="5" pname="e" accid.ges="n" />
                                </layer>
                            </staff>
                            <dir xml:id="dir-L10F1" place="above" staff="1" tstamp="4.000000">
                                <rend xml:id="rend-0000001578400916" fontstyle="normal">â‘£</rend>
                            </dir>
                            <dir xml:id="dir-L8F1" place="above" staff="1" tstamp="3.000000">
                                <rend xml:id="rend-0000000095903459" fontstyle="normal">â‘¢</rend>
                            </dir>
                            <dir xml:id="dir-L6F1" place="above" staff="1" tstamp="2.000000">
                                <rend xml:id="rend-0000000182234077" fontstyle="normal">â‘¡</rend>
                            </dir>
                            <dir xml:id="dir-L4F1" place="above" staff="1" tstamp="1.000000">
                                <rend xml:id="rend-0000000457701714" fontstyle="normal">â‘ </rend>
                            </dir>
                        </measure>
                    </section>
                </score>
            </mdiv>
        </body>
    </music>
</mei>

Humdrum original data (characters displayed as typed):

**kern
=1
!LO:TX:a:t=&#9312;
4e
!LO:TX:a:t=&#9313;
4g
!LO:TX:a:t=&#9314;
4cc
!LO:TX:a:t=&#9315;
4ee
==
*-
craigsapp commented 6 years ago

@pr-ro: How should string numbers be encoded? There will be different styles, such as a number in a circle as discussed above in this thread.

Here is an example from an edition of a Bach cello sonata:

screen shot 2018-03-13 at 8 28 03 am

From page 16 of the file: http://ks.imslp.info/files/imglnks/usimg/0/0c/IMSLP108698-PMLP04291-Bach_-_6_Suites_for_Cello_(Dotzauer).pdf

The text 1a. means play the notes on the first (highest) string which is tuned to A3. The text 2a. means that the notes are to be played on the second string, tuned to D3.

Also note in this case the string number is underneath the staff.

I have also seen string numbers are capital roman numerals above the staff.

pe-ro commented 6 years ago

<dir> with (Unicode) text and optional <rend> elements for styling will work fine in most cases. Semantics -- this <dir> is a string number while that <dir> is something else -- can be captured using @type or @class.

We should also think about adding a <stringNum> element (version 5?). Doing so would permit the unambiguous labeling of string numbers, increasing the level of semantic markup and making it easier to render them in a meaningful way.

craigsapp commented 6 years ago

I think a <stringNum> element would be useful. This would be particularly useful for automatic layout, since the string number should be fairly far from the staff in terms of the stacking order (further than finger numbers for example, above text directions, above fermatas, probably lower than chord labels).

sannedubois commented 6 years ago

3 voices I agree, but I think chords must always be on top, because it's often in fact another part, equivalent to a staff. There is challenge of how to link the fingering with the stringsymbols if you have more than one. A system that could work is to place fingerings left to the notes and the strings above/under the notes:

​But placing fingerings at the left probably requires an adjustment of the spacing formula's (?).

2018-03-13 18:52 GMT+01:00 Craig Stuart Sapp notifications@github.com:

I think a element would be useful. This would be particularly useful for automatic layout, since the string number should be fairly far from the staff in terms of the stacking order (further than finger numbers for example, above text directions, above fermatas, probably lower than chord labels).

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/rism-ch/verovio/issues/796#issuecomment-372758556, or mute the thread https://github.com/notifications/unsubscribe-auth/APa0E-lByyEZSn5fMcFqQYAUzeJF2n72ks5teAdzgaJpZM4SiYpI .

sannedubois commented 6 years ago

Also: a chord can have seconds as intervals, so, they should not collide as a result of that.

2018-03-13 20:45 GMT+01:00 Derk van der Veen derkvanderveen@gmail.com:

I agree, but I think chords must always be on top, because it's often in fact another part, equivalent to a staff. There is challenge of how to link the fingering with the stringsymbols if you have more than one. A system that could work is to place fingerings left to the notes and the strings above/under the notes:

​But placing fingerings at the left probably requires an adjustment of the spacing formula's (?).

2018-03-13 18:52 GMT+01:00 Craig Stuart Sapp notifications@github.com:

I think a element would be useful. This would be particularly useful for automatic layout, since the string number should be fairly far from the staff in terms of the stacking order (further than finger numbers for example, above text directions, above fermatas, probably lower than chord labels).

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/rism-ch/verovio/issues/796#issuecomment-372758556, or mute the thread https://github.com/notifications/unsubscribe-auth/APa0E-lByyEZSn5fMcFqQYAUzeJF2n72ks5teAdzgaJpZM4SiYpI .

lpugin commented 6 years ago

@sannedubois could you have look how to include image and <> in markdown? https://guides.github.com/features/mastering-markdown/ Please submit them directly via github.com and check the preview first. It seems that you are sending them via email and they do not appear, which makes them useless.

craigsapp commented 6 years ago

Yes, images inserted into email seem to get lost when the message is posted to Github.

The best thing is to reply to messages on webpages like this one:

https://github.com/rism-ch/verovio/issues/796

Then you can drag-and-drop images into the message window. Click on the "Preview" button at the top of the message window to view the image (otherwise it will be displayed as a link in "Write" mode.

sannedubois commented 6 years ago

I was having doubts how finale would export the next bar, but somehow it seems that the program recognises what I made and exports it to musicxml in a way that is I think usable:

export fingerings

dynamics ofcourse OK:

<dynamics default-x="83" default-y="-73" halign="center">

It sees my stringnumber as:

<rehearsal default-y="20" enclosure="circle" font-family="Times">2</rehearsal>

And surprisingly it also recognises fingering:

<fingering default-y="-18" font-size="10.25" relative-x="-12">1</fingering>

So fingering should be no problem. So users should it any case know with which tool to make stringnumbers and fingerings before exporting to music-xml.

craigsapp commented 6 years ago

Commit https://github.com/rism-ch/verovio/commit/10635a9664e1a2253b8a874a395fdceba1f62f36 has a hack to encode string numbers in circles with verovio:

screen shot 2018-03-22 at 9 40 51 pm

Input data:

**kern  **fing  **string
*clefG2 *   *
*M4/4   *   *
=1  =1  =1
4c  1   0
4d  2   1
4e  3   2
4f  1   3
=2  =2  =2
4g  2   4
4a  3   5
4b  4   6
4cc 5   7
=2  =3  =3
4b  4   8
4a  3   9
4g  2   .
4f  1   1
=2  =4  =4
4e  3   2
4d  2   3
2c  1   4
==  ==  ==
*-  *-  *-