humdrum-tools / verovio-humdrum-viewer

Verovio Humdrum Viewer
http://verovio.humdrum.org
37 stars 9 forks source link

kern2mens met(c) to met(C) #156

Closed davidrizo closed 6 years ago

davidrizo commented 6 years ago

When compiling the kern2mens filter, should the met(c) be converted into met(C)?

craigsapp commented 6 years ago

I have a system for dual-encoding of mensural signs which is similar to the system for dual-encoding of clefs. *oclef is used like *clef to indicate the "original clef" that should be used when displaying the notation in mensural form, and likewise for *met, there is *omet which indicates how to display the "original mensurations" in the mensural notation.

*met(c) is used for the modern common-time meter signature, and *met(C) is used for the C mensuration. But I do not automatically convert between these two, since they are similar but not identical in meaning. Instead I encode the modern and original styles in both the **kern and **mens data. This allows for easy transformation between the two displays without having the computer guess what should be done with the mensurations and clefs when converting.

Here is a visual display of *met(c) and *met(C):

screen shot 2018-10-15 at 3 36 30 pm

Currently the Humdrum-to-MEI converter requires a time signature for the time signature change (but not the initial time signature for some reason).


For clefs, there is the modern clef, such as: *clefG2 for a treble clef (this is standard *kern encoding in Humdrum). If you prefix an "o", this will indicate the "original" clef (of the manuscript/source): `oclefG2. When displaying*kerndata in modern notation, theclef` form gets priority:

screen shot 2018-10-15 at 1 35 54 pm

and when the data is converted to **mens, priority is given to the *oclef form:

screen shot 2018-10-15 at 1 37 51 pm

Pressing alt-c to compile the filter and display the **mens data in the VHV editor:

screen shot 2018-10-15 at 1 37 59 pm

Note that in the **mens format, if a *oclef is not found, then any *clef will be used:

screen shot 2018-10-15 at 1 39 04 pm

The **kern data will not default to *oclef if *clef is not used. It would be possible to allow this. But the primary purpose of the oclef/clef system was to display scores for the Tasso in Music Project scores in modern notation, but with an optional display of the original clefs by pressing the "o" button in the notation toolbar on work pages such as this:

http://www.tassomusic.org/work/?id=Trm0047a

screen shot 2018-10-15 at 1 42 47 pm

Clicking on the "o" on the top right side of the notation toolbar causes the music to be displayed in the original clefs:

screen shot 2018-10-15 at 1 43 27 pm

[Note that the "original" notation shows both a mensuration sign and a time signature. Here is a bug report to verovio to suppress the time signature: https://github.com/rism-ch/verovio/issues/853]

You can see how it is encoded in MEI via this link:

https://verovio.humdrum.org/?file=https://raw.githubusercontent.com/TassoInMusicProject/tasso-scores/master/Trm/kern/Trm0047a-Non_egrave_questa_la_mano--Pallavicino_1579.krn

And then pressing alt-m to view the MEI conversion. Near the start of the music you will see this code:

<app xml:id="app-0000000297977571">
                            <lem xml:id="lem-0000000653270779" />
                            <rdg xml:id="rdg-0000000357440679" label="original-clef">
                                <scoreDef xml:id="scoredef-0000000013330015">
                                    <staffGrp xml:id="staffgrp-0000001514854801">
                                        <staffDef xml:id="staffdef-0000001230742793" clef.shape="C" clef.line="1" mensur.sign="C" mensur.slash="1" n="1" />
                                        <staffDef xml:id="staffdef-0000000404399634" clef.shape="C" clef.line="3" mensur.sign="C" mensur.slash="1" n="2" />
                                        <staffDef xml:id="staffdef-0000001578592168" clef.shape="C" clef.line="4" mensur.sign="C" mensur.slash="1" n="3" />
                                        <staffDef xml:id="staffdef-0000001946511480" clef.shape="F" clef.line="4" mensur.sign="C" mensur.slash="1" n="4" />
                                    </staffGrp>
                                </scoreDef>
                            </rdg>
                        </app>

I am using the variant-control system in MEI to encode the original clefs in a reading called original-clef. On the Tasso website, I set an option called --app-x-path-query on the command line or appXPathQuery in JavaScript. If you display the vrvOptions variable in the JavaScript console of the web browser on a Tasso work page, you will see the options used to print the score on the page. In this case the options are:

screen shot 2018-10-15 at 1 55 47 pm

Note that the appXPathQuery is set to an array of filters, and the xpath filter is ./rdg[contains(@label, 'original-clef')]. This means to choose the reading with the label original-clef in the <app>. If no xpath is given, then the <lem> (lemma) of the reading is selected by verovio. And in this case the </lem> is empty since the stadard clef is already being set above the <app>.


Now on to mensural signs finally :smile:

Like clef/oclef, there is a met/omet system:

screen shot 2018-10-15 at 3 20 43 pm

And displaying in mensural form:

screen shot 2018-10-15 at 3 21 07 pm

The met has priority, and then the time signature has second priority:

screen shot 2018-10-15 at 3 27 56 pm

Removing *met will cause display of time signature:

screen shot 2018-10-15 at 3 23 30 pm

And currently omet is never displayed in VHV (but could be displayed using xpath as mentioned above).

screen shot 2018-10-15 at 3 24 28 pm

Using *met for a mensuration is a little weird since met mean meter signature. But modern meter signatures are a corruption of the mensuration system, so I expanded the same abbreviation to handle mensuration signs. *men() could be used to specify the subdivisions of each rhythmic level, such as *men(2,2) for *met(C) and *men(3,3) for met(O.) (three subdivisions of the breve and three for the semibreve).