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
685 stars 185 forks source link

Implement mensur@level #3531

Open craigsapp opened 1 year ago

craigsapp commented 1 year ago

It would be useful to implement mensur@level which indicates which rhythmic level a (sesquialtera) proportion is applied.

Below is an example work that contains a basic example of sesquialtera applied to only one part, so you can see how the alignment should work between music with/without sesquialtera:

Fortuna desperata, attributed to Josquin des Prez (he likely wrote the contra part), Segovia Manuscript:

https://vmirror.imslp.org/files/imglnks/usimg/a/aa/IMSLP322463-PMLP521914-cancioneiro_de_segovia_parte2.pdf#page=129

Superius part (no sesquialtera):

Screenshot 2023-10-04 at 11 28 09

Tenor part (no sesquialtera):

Screenshot 2023-10-04 at 11 28 15

Contra part (sesquialtera near the end):

Screenshot 2023-10-04 at 11 28 39

The sesquialtera is indicated by the "3" mensuration sign:

Screenshot 2023-10-04 at 11 48 18

The "3" means that within the context of the current mensuration of cut-c, there are now three minims in the time of two minims.

Here is a CMN transcription:

https://josquin.stanford.edu/cgi-bin/jrp?a=notationEditText&f=Jos2711

Section of the full score where sesquialtera is active in the contra part:

Screenshot 2023-10-04 at 11 58 29

There are two possible types of sesquialtera in a fully imperfect mensuration such as C and Cut-C. And in this particular case, it does not really matter, but minor sesquialtera makes the most logical sense, occurring at the prolatio level, where the semibreve is split into three minims rather than two (but the three minims take up the same time as two of the original minims, i.e., they become triplets in CMN).

Screenshot 2023-10-04 at 12 03 29

The other possiblity is major sesquialtera:

Screenshot 2023-10-04 at 12 05 11

which means that there are three semibreves in the time of two original ones. In both cases there will be six minims. Since there are no semibreves in the music it is not totally clear that there are two or three semibreves for each breve. But the melodic contour mostly grouping minims into three implies that there are three minims for each original two rather than three semibreves for each original two semibreves.

How to represent the "3" mensuration is not totally clear. Here is a possibility:

<mensur num="3" modusmaior="2" modusminor="2" tempus="2" prolatio="3" level="minim">

One problem is that this is in the context of Cut-C, so there should also be a 2:1 proportion or slash attribute present as well as an implicit sign of C that is usually not displayed:

<mensur num="3" modusmaior="2" modusminor="2" tempus="2" prolatio="3" level="minim" sign="C" slash="1">

questions:

(1) Should @level be minim or semibrevis for minor sesquialtera (three minims in the time of two minims)?

(2) I believe there is no way to display a "3" mensuration in mensural music currently? I hack it in CMN with:

        <meterSig count="3" unit="2" form="num" />

This mensur does not print anything in verovio:

    <mensur num="3" />

Is there currently a way of displaying a "3" mensuration?

(3) Sesquialtera is a 3:2 proportion. Should this be encoded in mensur@num and mensura@numbase, or something like mensur@proport.num and mensur@proport.numbase?

(4) Note that Cut-C has an implicit porportion of 2:1 due to the slash. How would the 2:1 proportion of the main mensuration sign and the 3:2 proportion both be indicated at the same time.

(5) Note that there are mensuration signs C2, C3, O2, O3 which are not related to sesquialtera (but they can be visually the same as sesquialtera or cancellation of sesquialtera in C and O). How should non-proportion numbers on these mensuration signs be encoded (currently using mensur@num). It is unlikely that these mensuration signs will include sesquialtera (at least I have not seen any cases).

Here is the draft MEI data for this example: fortuna-desperata.zip

The 3 mensuration will probably need to be fixed. Currently it is:

        <mensur xml:id="mensur-L291F1" num="3" numbase="2" modusmaior="2" modusminor="2" tempus="2" prolatio="3" level="minim"/>
craigsapp commented 1 year ago

Here is another case that starts with O3/2 mensuration and then goes into C mensuration (both parts doing the same mensurations at the same time). The meaning of O3/2:

Screenshot 2023-10-05 at 22 23 52

This is equivalent to C with major sesquialtera, with the only difference is that the tempus level is already perfect (so does not need to be perfected as in C). The 3/2 is the sesquialtera proportion that means there are three semibreves in the time of two. Note in the following music that each measure (breve length) should have the same duration, so when switching to C, the perfect breve of O3/2 mensuration has the same duration as the imperfect breve of C mensuration:

Screenshot 2023-10-05 at 22 29 02

In verovio MIDI playback, the C mensuration music is too slow (I would have predicted that the O3/2 was too slow).

The music is otherwise aligned through the entire piece (only two parts are extant):

Screenshot 2023-10-05 at 22 14 32

Here is a zip file containing the draft MEI data for this example: ovetra.zip

Scans of the original edition:

Screenshot 2023-10-05 at 22 49 45 Screenshot 2023-10-05 at 22 49 53 Screenshot 2023-10-05 at 22 49 04 Screenshot 2023-10-05 at 22 49 18
lpugin commented 1 year ago

To your questions:

(1) Should @level be minim or semibrevis for minor sesquialtera (three minims in the time of two minims)?

Up to us to decide. @annplaksin, what did you have in mind?

(2) I believe there is no way to display a "3" mensuration in mensural music currently?

This mensur does not print anything in verovio:

<mensur num="3" />

I will change this and also implement support for showing cases with only @numbase. However, these will probably not make much sense without at least a @sign or a @num, but we can still show a @numbase alone. In that case I would put it one the lowest line and not in the middle.

(3) Sesquialtera is a 3:2 proportion. Should this be encoded in mensur@num and mensura@numbase, or something like mensur@proport.num and mensur@proport.numbase?

My question here is do we really need the proportion to be given if we have @level? The proportion will always be 3:2 in a sesquialtera, won't it? Or are you thinking for @level not to be required?

(4) Note that Cut-C has an implicit porportion of 2:1 due to the slash. How would the 2:1 proportion of the main mensuration sign and the 3:2 proportion both be indicated at the same time.

See above. If we assume an implicit 3:2 proportion for the sequialtera encoded with @level, then @num and @numbase remain free for the Cut-C proportion. The only problem is having a what for not showing them, which I think relates to the question below.

(5) Note that there are mensuration signs C2, C3, O2, O3 which are not related to sesquialtera (but they can be visually the same as sesquialtera or cancellation of sesquialtera in C and O). How should non-proportion numbers on these mensuration signs be encoded (currently using mensur@num). It is unlikely that these mensuration signs will include sesquialtera (at least I have not seen any cases).

These are cases where I think we need a distinct attribute to encode the logical value when it does not correspond to the visual one, or when there is no visual one. @num.log and @numbase.log would solve questions (4) and (5). For example,

For non-proportion numbers, (e.g., a C3), you would do:

<mensur num="3" num.log="1" sign="C"/>

For a Cut-C, you would do

<mensur num.log="2" sign="C" slash="1"/>

However, for that particular case, I wonder if we should not expect the 2:1 proportion to be inferred from the visual information (the slash). At least this is what I thought you would want to have from this discussion.

In verovio MIDI playback, the C mensuration music is too slow (I would have predicted that the O3/2 was too slow)

The MIDI playback applies the num="3" and numbase="2" proportion. I guess this is why it is is faster than C.

craigsapp commented 1 year ago

<mensur num="3" /> I will change this and also implement support for showing cases with only @numbase. However, these will probably not make much sense without at least a @sign or a @num, but we can still show a @numbase alone. In that case I would put it one the lowest line and not in the middle.

As you note, "3" mensuration has no meaning in isolation and there is an implicit @sign which can be either C or O (which is found earlier in the music). So it will be necessary to supply the implicit information, particularly @tempus and @prolatio.

A question is: should the implicit information be extracted automatically from the previous <mensur> in the music, or should it be required to be given within the <mensur num="3" />. Sometimes the 3 mensuration is cancelled by using a 2 (not very often in JRP repertory), or by repeating the original sign, such as Cut-C. Tinctoris likes fully explicit proportions, so I think he would have something such as 2/3 to cancel the 3/2 proportion.

Preferably the 3 mensuration in isolation will be centered on the middle line. In the first example given above, I think it is just for continuity that the 3 is at the bottom of the staff, since there is no meaning for it being there other than the notes are near the bottom of the staff.

annplaksin commented 1 year ago

at 1) According to the (very hard to find) paragraph in the documentation, @level contains the note level that is affected. In the case of three minims in the time of two minims it would be:

<mensur num="3" numbase="2" level="minima" />

at 2) I think it works with <proport>:

<proport num="3"/>

at 3) When @level is used, I guess, we still need to use @num/@numbase to define how the given note level will be affected.

at 4): If every part has a Cut-C, I think, there is no reason to use num/numbase for the implicit proportion. Because, I assume, a proportion is always a comparison. The question in the case of Cut-C is: 2:1 compared to what? Also, the 2:1 is not always a question of tempo, but also a question of tactus.

regarding the last comment: Giving @tempus and @prolatio is absolutely crucial for the case of "3". Not to give the information of an earlier sign but because the "3" will change the mensuration implicitly. The most common case is sesquialtera following an imperfect tempus. Something like that in a case of Cut-C followed by a 3:

<mensur sign="C" slash="1" prolatio="2" tempus="2" />
[... some music...]
<mensur num="3" numbase.log="2" level="semibrevis" tempus="3" />
craigsapp commented 1 year ago

My question here is do we really need the proportion to be given if we have @level? The proportion will always be 3:2 in a sesquialtera, won't it? Or are you thinking for @level not to be required?

@level is required since mathematically it can be applied at two possible rhythmic levels. The first case above is very simple and does not include any semibreves to resolve which one in this case, so it is not totally obvious since it works either on the semibreve or minim levels.

Perhaps @level should be described as @level="tempus" and @level="prolatio" @annplaksin? When at @level="tempus" that would mean the semibreves are in 3:2 proportion and a perfection of the breves (if they are not already perfected as in the second full example above). @level="prolatio" would mean the minims are in 3:2 proportion and a perfection of the semibreve (if it is not already perfected).

I would not have problems with @level implying a 3:2 proportion (and perfection as needed). But given the name, it seems that it should mean to apply some proportion at the specified level (not necessarily sesquialtera). Otherwise the attribute should be called @sesquialtera if it has a fixed proportion meaning.

For @slash="1", I think that is reasonable to assume a 2:1 proportion is implicitly built in. When mixed with other mensurations at the same time, such as C and Cut-C, this is the meaning of the slash. When the music only has Cut-C, then the meaning of the slash becomes more ambiguous and changes over time (i.e, it does not always mean play twice as fast as C). But those ambiguities can be handled by adjusting the tempo.

annplaksin commented 1 year ago

Perhaps @level should be described as @level="tempus" and @level="prolatio" @annplaksin?

No. Tempus describes the relation between brevis and semibrevis level. This is the main indicator if rules of imperfection or alteration should be applied. Level describes which note level is affected by a succesive proportion.

craigsapp commented 1 year ago

No. Tempus describes the relation between brevis and semibrevis level. This is the main indicator if rules of imperfection or alteration should be applied. Level describes which note level is affected by a succesive proportion.

OK, that sounds good.

In the first example given above, that would mean that @level="minim" should be used (but in this case @level="semibrevis" is also possible since there are no semibreves to resolve which level the sesquilatera/perfection is happening on).

craigsapp commented 1 year ago

Here is an analysis of the second example which has O3/2 at the start and goes into C. I extracted the timemap values for the measure just before and after the C mensuration starts:

Screenshot 2023-10-10 at 09 47 12

There is a 3:2 proportion being added, but at the wrong rhythmic level. The durations of each measure (i.e., the durations of the breves) should be equal, since the proportion is not applied to the breve level. In the above example the first measure (breve) is 2700 units, while the second is 4050, which is a relation of 3:2 between the meaures (breves). The breve level should remain 1:1.

Instead the 3:2 proportion should be applied to the semibreve level. This should make semibreves 3:2 between the two measures. Currently there is a 9:4 relation between the semibreves in the first measure compared to the second measure.

Here is a rhythm chart for O3/2 that should be happening:

Screenshot 2023-10-10 at 09 53 00

(I adjusted the charts so the proportions are under the rhythmic levels as @annplaksin wants). So the <mensur> should be (as it is in the example data):

<menur sign="O" num="3" numbase="2" modusmaior="2" modusminor="2" tempus="3" prolatio="2" level="semibrevis" />

Verovio is currently doing this:

Screenshot 2023-10-10 at 10 16 20

which is <mensur level="brevis" /> instead of <mensur level="semibrevis" />.

Here is one way of detecting the problem:

Screenshot 2023-10-10 at 10 20 37

In terms of modern notation, the semibreves are triplet semibreves in O3/2, so in modern notation the two measures are:

Screenshot 2023-10-10 at 10 30 29
lpugin commented 1 year ago

I think looking at the current implementation of the timemap in Verovio is confusing since it applies the proportion from the base level - which is why you end up with a 9:4.

What is not clear to me is the difference between a @level="brevis" and the C3 and O (column 2 and 5) in the example you give in this discussion. The proportion on the brevis level seems to duplicate the tempus being perfect. What I am misunderstanding here?

craigsapp commented 1 year ago

Here is a schematic of what is currently being done using the timemap values as an example:

Screenshot 2023-10-11 at 05 32 20

And what should be done:

Screenshot 2023-10-11 at 05 32 08

I am using 4050 for the duration of the breve in C as a reference. The problem to resolve is why the breve duration in O3/2 is not equal to the breve in C.

Conceptually what seems to be happening is that the longa is perfected on the left for O3/2. The theoretical longa would have a duration of 8100, so the breve is 1/3 = 2700 while for C the breve is 1/2 of a longa = 4050. This is where the extra 3:2 proportion is coming from to generate the 9:4 proportions at the semibreve level.

Something is causing the breves between the two mensurations to not have the same durations, but they need to be the same.

craigsapp commented 1 year ago

Here is a schematic that seems to make things clearer:

Screenshot 2023-10-11 at 09 16 26

The gray boxes are the durations of the notes. The 3:2 proportion is applied at the semibreve level. This causes the original perfect breve duration to shorten to 2/3 of its original length, and now the breve duration in O3/2 is the same as the breve in C.

O mensuration is given on the right for comparison. The breve in O has a duration of 1.5 (3:2) times longer than the breve in C due to the perfection of the tempus. The sesquialtera being applied in O3/2 is making the breve have the same duration in C and O3/2.

craigsapp commented 1 year ago

Here is a demonstration of how @level works:

Screenshot 2023-10-11 at 09 36 22

Note that C3/2 is not usually fully spelled out (except for Tincoris who compliains that proportions should be fully spelled out). Most typically 3 is used to represent the same thing, but also C3 is used (and in most if not all cases in JRP, the C is replaced with a Cut-C) [And note C3 is also a separate mensuration sign describing the divisions of the modusminor and tempus levels]. Also note that to cancel sesquialtera, often 2 is given as the mensuration sign, although in JRP most cancellations are done by given the original mensuration sign before the sesquialtera.

Whenever there is a sesquialtera, that implies that the given rhythm level is perfected so that the 3:2 proportion can be applied to their durations, making three of the perfected notes fit into the time of two of the imperfect notes. Before the Petrucci style sesquialtera mensuration signs, there is an additional implied change from 2 to 3 for the given level that the sesquialtera is done at. With a mensuration sign such as 03/2, the level is already perfected, so the step of perfecting the rhythmic level is not needed.

Notice in the above figure that there are six minims in either major sesquialtera (left side) or minor sesquialtera (right side). The original example Fortuna desperata at the top of this thread has six minims in the time of four, so either type of sesquialtera can be used since there are no semibreves to resolve which one. But if you look at the pattern of the minims, they look like they are grouped into threes, making minor sesquialtera a better description of what is happening.

lpugin commented 1 year ago

How does this look?

image
```xml </titleStmt> <pubStmt /> </fileDesc> <encodingDesc> <appInfo> <application isodate="2023-10-18T13:45:51" version="4.1.0-dev-b3d4df4-dirty"> <name>Verovio</name> <p>Transcoded from Humdrum</p> </application> </appInfo> </encodingDesc> <workList> <work> <title /> </work> </workList> </meiHead> <music> <body> <mdiv> <score> <scoreDef midi.bpm="280.000000"> <staffGrp symbol="bracket"> <staffDef n="1" notationtype="mensural.white" lines="5"> <label>C (reference)</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="2" notationtype="mensural.white" lines="5"> <label>C3/2 (semibrevis)</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="3" notationtype="mensural.white" lines="5"> <label>C</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="4" notationtype="mensural.white" lines="5"> <label>C2/3 (minima)</label> <clef shape="C" line="3" /> </staffDef> </staffGrp> </scoreDef> <section> <staff n="1"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="2"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" level="semibrevis" num="3" numbase="2" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="3"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="4"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" level="minima" num="3" numbase="2" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> </section> </score> </mdiv> </body> </music> </mei> ``` </details> </div> </div> <div class="comment"> <div class="user"> <a rel="noreferrer nofollow" target="_blank" href="https://github.com/craigsapp"><img src="https://avatars.githubusercontent.com/u/3487289?v=4" />craigsapp</a> commented <strong> 1 year ago</strong> </div> <div class="markdown-body"> <p>That looks great! Although I hope the <code>C2/3</code> staff label is a typo :-)</p> <img width="739" alt="Screenshot 2023-10-18 at 9 58 05 AM" src="https://github.com/rism-digital/verovio/assets/3487289/2f20dc28-b4c7-424e-879d-33e8562ee0d1"> <p>There are a few things to discuss with @annplaksin:</p> <p>(1) The encodings of the two sesquialteras encodings in the above example are:</p> <pre><code class="language-xml"><mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" level="semibrevis" num="3" numbase="2" /> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" level="minima" num="3" numbase="2" /></code></pre> <p>For the first one, <code>@prolatio</code> is actually <code>3</code>, and for the second one <code>@tempus</code> is actually <code>3</code>. Applying the <code>3:2</code> proportion to their durations make them fit in <code>@prolatio="2"</code> and <code>@tempus="2"</code> durations, respectively. So I belive the proper representation in MEI should be:</p> <pre><code class="language-xml"><mensur modusmaior="2" modusminor="2" prolatio="2" tempus="3" sign="C" level="semibrevis" num="3" numbase="2" /> <mensur modusmaior="2" modusminor="2" prolatio="3" tempus="2" sign="C" level="minima" num="3" numbase="2" /></code></pre> <p>The perfection at the breve (tempus) or semibreve (prolatio) levels are needed to infer "gestural" durations of the notes properly (before the sesquialtera proportion is applied).</p> <p>If implicit logical default attributes can be used, then these could be reduced to:</p> <pre><code class="language-xml"><mensur sign="C" level="semibrevis" num="3" numbase="2" /> <mensur sign="C" level="minima" num="3" numbase="2" /></code></pre> <p>When <code>@level="semibrevis"</code> is given, then this could also imply <code>@tempus="3"</code>, since it would not make sense to apply sesquialtera to an imperfect division of a rhythmic level (at least nothing I have every seen or heard about). If the <code>@tempus</code> is actually supposed to be imperfect yet have sesquialtera applied to it, then an explicit <code>@tempus="2"</code> could be given (and the sesquialtera would not be aligned with the breves).</p> <p>Likewise with <code>@level="minim"</code> implying <code>@prolatio="3"</code>.</p> <p><code>O</code> mensurations with minor sesquialtera (<code>@level="minima"</code>) works the same way as in <code>C</code>: the prolatio is perfected and a <code>3:2</code> duration reduction to the durations at the minim level is applied. Major sesquialtera (<code>@level="semibrevis</code>) don't occur before Petrucci that I know of (c1500), but are common later on (that is the primary way of doing sesquialtera in Tasso in the late 16th century, for example). In that case <code>@tempus</code> is already three, so it remains unchanged when doing sesquialtera at the semibreve level.</p> <p>(2) It is not common for the full sesquialtera proportion to be visible in the mensuration sign. So a method of specifying the visual aspects that override the logical aspects (or vice-versa) need to be formalized.</p> <p>For example, <code>3</code> is the most common sign for sesquialtera in the 15th and early 16th century. The meaning of the "3" is dependent on the previous mensural sign, such as <code>C</code> or <code>O</code> (or more likely <code>Cut-C</code> or <code>Cut-Circle</code>). For representing <code>3</code> in the MEI score, it could be done in several ways (this was discussed a bit before and elsewhere but needs review in any case). An encoding that is closest to the <code>accid</code> model:</p> <pre><code class="language-xml"><mensur sign.ges="C" slash.ges="1" num="3" numbase.ges="2" level="semibrevis"/></code></pre> <p>With additional implicit attributes added:</p> <pre><code class="language-xml"><mensur sign.ges="C" slash.ges="1" num="3" numbase.ges="2" level="semibrevis" modusmaior="2" modusminor="2" tempus="3" prolatio="2"/></code></pre> <p>Sesquialtera can also be written a <code>C3</code> or (<code>Cut-C3</code>), which could be indicated as:</p> <pre><code class="language-xml"><mensur sign="C" num="3" numbase.ges="2" level="semibrevis"/></code></pre> <p>The 16th century sesquialtera notation <code>O/3</code> or <code>Cut-O/3</code> would be:</p> <pre><code class="language-xml"><mensur sign.ges="O" num.ges="3" numbase="3" numbase.ges="2" level="semibrevis"/></code></pre> <p>The <code>3</code> under the <code>O</code> is actually the <code>@num</code> of a proportion and not the <code>@numbase</code>, so in this case the visual <code>3</code> is indicated by <code>@numbase</code>, and the correct numbase is given by <code>@numbase.ges</code> and the implicit <code>@num</code> is given by <code>@num.ges</code>.</p> <p>For cancelling sesquialtera, there are also many different styles to do the same logical (gestural) procedure. The most common in JRP data (late 15th and early 16th century music) is to repeat the orginal unsesquialtered mensuration sign, which is almost always Cut-C. But it would also be possible to indicate as a plain <code>2</code>, <code>2/3</code> (Tinctoris only), or as <code>Cut-C 2</code>.</p> <p>And note that <code>C3</code> also can have a totally different meaning related to divisions rather than duration adjustments such as sesquialtera (@annplaksin mentioned the Latin name for this somewhere that I cannot find at the moment). In this case the <code>C</code> indicates <code>@modusminor="2"</code> rather than <code>@tempus="2"</code>, and the <code>3</code> indicates <code>@tempus="3"</code> (and <code>@prolatio="2"</code> is implied).</p> <img width="920" alt="Screenshot 2023-10-18 at 9 47 29 AM" src="https://github.com/rism-digital/verovio/assets/3487289/7df67a87-6c6d-4b92-90ae-fe655ec65f3a"> </div> </div> <div class="comment"> <div class="user"> <a rel="noreferrer nofollow" target="_blank" href="https://github.com/lpugin"><img src="https://avatars.githubusercontent.com/u/689412?v=4" />lpugin</a> commented <strong> 1 year ago</strong> </div> <div class="markdown-body"> <blockquote> <p>For the first one, <code>@prolatio</code> is actually 3, and for the second one <code>@tempus</code> is actually 3. Applying the 3:2 proportion to their durations make them fit in <code>@prolatio="2"</code> and <code>@tempus="2"</code> durations, respectively. So I belive the proper representation in MEI should be:</p> <pre><code class="language-xml"><mensur modusmaior="2" modusminor="2" prolatio="2" tempus="3" sign="C" level="semibrevis" num="3" numbase="2" /> <mensur modusmaior="2" modusminor="2" prolatio="3" tempus="2" sign="C" level="minima" num="3" numbase="2" /></code></pre> </blockquote> <p>I am not convinced. Because then what is the difference with <code>O</code> and <code>C.</code> respectively? Here is your suggestion. For it to render I had to remove the code applying the <code>3:2:</code> based on <code>@level</code> (basically ignore <code>@num</code>, <code>@numbase</code> and <code>@level</code> completely):</p> <img width="626" alt="image" src="https://github.com/rism-digital/verovio/assets/689412/4c37d021-931c-4d00-a89d-473db003bf4c"> <details> ```xml <?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="2023-10-18T13:45:51" version="4.1.0-dev-b3d4df4-dirty"> <name>Verovio</name> <p>Transcoded from Humdrum</p> </application> </appInfo> </encodingDesc> <workList> <work> <title /> </work> </workList> </meiHead> <music> <body> <mdiv> <score> <scoreDef midi.bpm="280.000000"> <staffGrp symbol="bracket"> <staffDef n="1" notationtype="mensural.white" lines="5"> <label>C (reference)</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="2" notationtype="mensural.white" lines="5"> <label>C3/2 (semibrevis)</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="3" notationtype="mensural.white" lines="5"> <label>O</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="4" notationtype="mensural.white" lines="5"> <label>C</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="5" notationtype="mensural.white" lines="5"> <label>C3/2 (minima)</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="6" notationtype="mensural.white" lines="5"> <label>C.</label> <clef shape="C" line="3" /> </staffDef> </staffGrp> </scoreDef> <section> <staff n="1"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="2"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="3" sign="C" level="semibrevis" num="3" numbase="2" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="3"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="3" sign="O"/> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="4"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="5"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="3" tempus="2" sign="C" level="minima" num="3" numbase="2" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="6"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="3" tempus="2" sign="C" dot="true" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> </section> </score> </mdiv> </body> </music> </mei> ``` </details> <p>(I must say I am less and less convinced that we can reliably infer the different values from the visual domain. It looks like a nice idea, and if we were limited to Morley's table cases, that would be fine. However, since this is a domain where there is so much different understandings of what the signs or absence of signs mean, including between the authors of the treatises of the time, I think we are going to loose ourselves if we try to do that.) </p> </div> </div> <div class="comment"> <div class="user"> <a rel="noreferrer nofollow" target="_blank" href="https://github.com/craigsapp"><img src="https://avatars.githubusercontent.com/u/3487289?v=4" />craigsapp</a> commented <strong> 1 year ago</strong> </div> <div class="markdown-body"> <p>You need to keep in mind these diagrams:</p> <img width="660" alt="Screenshot 2023-10-19 at 01 27 23" src="https://github.com/rism-digital/verovio/assets/3487289/e29cc9a9-7fe7-456e-9e7b-61f324940fd3"> <img width="620" alt="Screenshot 2023-10-19 at 01 28 33" src="https://github.com/rism-digital/verovio/assets/3487289/e06535c7-98f3-4b71-8980-e288704e0b1f"> <p>There is no difference between <code>O3/2</code> and <code>C3/2</code> in the first column. Note also that they both have the same number divisions for each rhythmic level as <code>O</code> as well (but <code>O</code> is performed slower and hence is wider in the plot below):</p> <img width="201" alt="Screenshot 2023-10-19 at 01 33 11" src="https://github.com/rism-digital/verovio/assets/3487289/5ab69794-7f90-4ec1-aded-4996412bd8d1"> <img width="142" alt="Screenshot 2023-10-19 at 01 33 04" src="https://github.com/rism-digital/verovio/assets/3487289/0c578f87-96f4-4cf2-a9a2-52d8d9d669cf"> <p>In other words <code>@tempus="3"</code> and <code>@prolatio="3"</code> for both <code>C3/2</code> and <code>O</code> (with <code>O3/2</code> being a weirder more modern way of being the same way as doing <code>C3/2</code>). As you note: if you see music in <code>C3/2</code> and <code>O</code> without the mensuration signs, they cannot be distinguished. <code>C3/2</code> is actually <code>O</code>, but the tempo is sped up so that the duration of the breves is the same as in <code>C</code>.</p> <p>But notice that the <strong>width</strong> of each chart (showing performance time) is different: the one on the right has has sesquialtera applied to it: where there used to be two semibreves in <code>C</code>, there are now three (but they are performed in the time of three).</p> <p>In this case your example is incorrect for both <code>O</code> and <code>C.</code> in terms of alignment between the parts. Here is the <code>C3/2</code> and <code>O</code> examples:</p> <img width="646" alt="Screenshot 2023-10-19 at 01 40 51" src="https://github.com/rism-digital/verovio/assets/3487289/3627426e-5bb0-43a1-bd5e-b87be75808a3"> <p>The number of notes is correct, but their durations are not equal. Here is the alignment of the notes between the two in terms of performance duration (excluding the first breve which do not have the same durations, which make the alignment points more messy):</p> <img width="835" alt="Screenshot 2023-10-19 at 02 03 29" src="https://github.com/rism-digital/verovio/assets/3487289/d49abe76-35a7-4e69-95c8-7c025d2ecd91"> <p>The sesquialtera is analogous to triplets in modern notation:</p> <img width="594" alt="Screenshot 2023-10-19 at 02 15 23" src="https://github.com/rism-digital/verovio/assets/3487289/91fc821a-1383-41d8-849d-6a776a92a97d"> <hr /> <p>Likewise, the number of notes on each of these two staves is correct:</p> <img width="630" alt="Screenshot 2023-10-19 at 02 16 05" src="https://github.com/rism-digital/verovio/assets/3487289/be065d34-d7ec-4522-a62a-4d580df0bbeb"> <p>but the durations of each are incorrect since there are three minims from the top staff in the time of two minims in the bottom staff. Here is what I think the modern notation rendering of both are:</p> <img width="702" alt="Screenshot 2023-10-19 at 02 57 46" src="https://github.com/rism-digital/verovio/assets/3487289/775e0aab-d74e-49f6-900b-b8099831aa44"> <p>I am probably aligning the two mensurations incorrectly, with <code>C-dot</code> needing to be twice as long. In Morley's chart, there are numbers to the left of the notes. This number indicates the duration (<code>@dur.ges</code>) of the note in terms of a semibreve:</p> <img width="919" alt="Screenshot 2023-10-19 at 03 37 55" src="https://github.com/rism-digital/verovio/assets/3487289/514ca053-4137-4dfa-8c43-7c5a2658b15d"> <p>Notice that the <code>C-dot</code> and <code>O-dot</code> mensuration signs have a <code>1</code> next to the minims, implying that the minims in those two mensurations have the same duration as a semibreve in the other mensurations (and the semibreve in those two mensurations are equal to three semibreves of the other mensurations). He does not explain very well why these two mensurations basically have a 1:2 proportion built into them (minims being twice as long as in the other mensurations).</p> <p>So my transcription of <code>C3/2</code> and <code>C-dot</code> probably needs to make <code>C-dot</code> durations twice as long as I did. (But Morley should be cross-checked against similar tables made by other writers). But whatever anyone write about this, it is the music notation which determine the answer about how the alignment needs to be done: the music can only be aligned properly in one way and will be nonsense in (nearly) every other way.</p> <p>If the semibreve durations were the same in all mensuration, then <code>C-dot</code> and <code>O-dot</code> would have a built-in sort of sesquialtera for the minims (3 minims in one semibreve, while other mensurations would have 2 minims in a semibreve having the same duration).</p> <blockquote> <p>Because then what is the difference with <code>O</code> and <code>C.</code> respectively?</p> </blockquote> <p>According to Morley's chart, <code>C-dot</code> minims are twice as long as <code>O</code> minims. <code>C-dot</code> semibreves are three times longer than <code>O</code> semibreves. <code>C-dot</code> breves are twice as long as <code>O</code> breves. <code>C-dot</code> longs are twice as long as <code>O</code> longs. And <code>C-dot</code> maximas are twice as long as <code>O</code> maximas.</p> <p>These sorts of complications are not important when you only use a single mensuration sign (which covers most music). But the semibreve numbers in the Morley chart help to align notation of different mensuration signs happening at the same time since these are essentially <code>@dur.ges</code> values. </p> <blockquote> <p>However, since this is a domain where there is so much different understandings of what the signs or absence of signs mean, including between the authors of the treatises of the time</p> </blockquote> <p>I do not see where any significant disagreements with respect to white mensural notation can occur (I don't know black mensuration notation very much). Morley gives the standard interpretations for white mensural notation. There will be corner cases where the modus minor or modus maior may have a different number of divisions since they are implied and not explicit in the mensurations (modus minor is explicitly given for the first four mensuration signs). When there is an exception to the Morley table, it would be overridden with the correct logical value. For example, if <code>O3</code> which usually has <code>@modusmaior="3"</code> instead uses <code>@modusmaior="2"</code>, then the imperfect division of the maxima would be required to be given in the <code><mensur></code>:</p> <pre><code class="language-xml"><mensur sign="O" num="3" /></code></pre> <p>Equal to default perfect maximodus:</p> <pre><code class="language-xml"><mensur sign="O" num="3" modusmaior="3" /></code></pre> <p>But if the maximodus were imperfect in the music, <code>@modusmaior</code> would be required:</p> <pre><code class="language-xml"><mensur sign="O" num="3" modusmaior="2" /></code></pre> <p>The number of divisions between each rhythmic level, either 2 (imperfect) or 3 (perfect) these are the numbers above each note in the table. The Morley table is in agreement with any other writer discussing white mensural notation in this respect, with any exceptions related to the implicit values as mentioned above.</p> <p>Perhaps the numbers to the left of each note in the Morley table are different between different writers, but I don't quite see how there can be very much disagreement, and those disagreements would be indicated with attributes that override the default values. These values can also be checked in actual music when there are different mensuration signs occurring at the same time (which would mostly happen only in masses). And if the mensuration signs are the same in all parts, then there is no problem, other than what general tempo (physical duration of the semibreve) is implied (which would be the concern of the performer and not of alignment of notes in different parts in verovio).</p> <p>Most of the complexity of the visual/gestural is related to how sesquialtera is visually represented: <code>C3</code> as sesquialtera is implied to be <code>C3/2</code>. The strange case is <code>O/3</code> for sesquialtera, which does not mean <code>O2/3</code> but rather <code>O3/2</code>. And the strange part is that sesquialtera does two things: it perfects an imperfected rhythmic level and applied the 3:2 proportion at the same time, while for <code>O/3</code> the <code>@tempus</code> is already perfected so only the 3:2 proportion needs to be applied.</p> <p>If you see <code>C3</code>, then there are two possibilities the meaning of <code>3</code>: it is either a regular mensuration sign (as seen in Morley's table), or it is a proportion. A problem currently in MEI mensural is that these two broad categories are encoded with the same attribute (<code>@num</code>). And this is related to the similar visual display of <code>C3</code> which have different meanings.</p> <p>If it is a proportion, then it could be either 3:1 or 3:2 (in which case <code>@numbase.ges</code> would need to clarify which one it is, probably with <code>3:1</code> being the default interpretation even though it would be less common than <code>3:2</code>. For a performer, the result the meaning of the mensuration sign by what make the music align properly between the parts. Any given mensuration sign without context can be ambiguous, but there is no ambiguity given a musical context. If you have only a single part, then there could be problems since the different proportions could not be resolved with a single part.</p> <p>Morley's table does not deal with proportions which can modify the durations (<code>@dur.ges</code>) of the notes. How to deal with proportions in a general manner is the messy part (we haven't discussed <code>reverse-C</code> yet which usually mean a 4:3 proportion...). Visual indications of proportions are not consistent across repertories. Sometimes they are written as dice above the mensuration signs, sometimes the proportion is written in text form. Or otherwise the proportions are left to the performers to figure out, since there will only be one proportion to align the parts.</p> </div> </div> <div class="comment"> <div class="user"> <a rel="noreferrer nofollow" target="_blank" href="https://github.com/lpugin"><img src="https://avatars.githubusercontent.com/u/689412?v=4" />lpugin</a> commented <strong> 1 year ago</strong> </div> <div class="markdown-body"> <p>I changed the duration for the <code>breve</code> in tempus perfectum so make it longer than in tempus imperfectum. This is what I get:</p> <img width="750" alt="image" src="https://github.com/rism-digital/verovio/assets/689412/d4ead5f1-08fc-435d-add8-c08c3f0c00fd"> <details> ```xml <?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="2023-10-18T13:45:51" version="4.1.0-dev-b3d4df4-dirty"> <name>Verovio</name> <p>Transcoded from Humdrum</p> </application> </appInfo> </encodingDesc> <workList> <work> <title /> </work> </workList> </meiHead> <music> <body> <mdiv> <score> <scoreDef midi.bpm="280.000000"> <staffGrp symbol="bracket"> <staffDef n="1" notationtype="mensural.white" lines="5"> <label>C (reference)</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="2" notationtype="mensural.white" lines="5"> <label>C3/2 (semibrevis)</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="3" notationtype="mensural.white" lines="5"> <label>O</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="4" notationtype="mensural.white" lines="5"> <label>C</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="5" notationtype="mensural.white" lines="5"> <label>C3/2 (minima)</label> <clef shape="C" line="3" /> </staffDef> <staffDef n="6" notationtype="mensural.white" lines="5"> <label>C.</label> <clef shape="C" line="3" /> </staffDef> </staffGrp> </scoreDef> <section> <staff n="1"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="2"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" level="semibrevis" num="3" numbase="2" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="3"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="3" sign="O"/> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="4"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="5"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="2" tempus="2" sign="C" level="minima" num="3" numbase="2" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> <staff n="6"> <layer n="1"> <mensur modusmaior="2" modusminor="2" prolatio="3" tempus="2" sign="C" dot="true" /> <note dur="brevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="semibrevis" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="minima" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <note dur="brevis" oct="4" pname="c" /> <barLine form="single" /> </layer> </staff> </section> </score> </mdiv> </body> </music> </mei> ``` </details> <p>I am now not sure how O3/2 can have a breve of the same duration as C3/2. That does not make sense to me. Did you mean C3/2 and O3/2 were the same in terms for division into semibreve and minima?</p> </div> </div> <div class="comment"> <div class="user"> <a rel="noreferrer nofollow" target="_blank" href="https://github.com/lpugin"><img src="https://avatars.githubusercontent.com/u/689412?v=4" />lpugin</a> commented <strong> 1 year ago</strong> </div> <div class="markdown-body"> <p>(Basically the change above is setting the reference (equivalence) on the semibreve instead of the breve)</p> </div> </div> <div class="page-bar-simple"> </div> <div class="footer"> <ul class="body"> <li>© <script> document.write(new Date().getFullYear()) </script> Githubissues.</li> <li>Githubissues is a development platform for aggregating issues.</li> </ul> </div> <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script> <script src="/githubissues/assets/js.js"></script> <script src="/githubissues/assets/markdown.js"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/highlight.min.js"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/go.min.js"></script> <script> hljs.highlightAll(); </script> </body> </html>