Git Product home page Git Product logo

Comments (8)

craigsapp avatar craigsapp commented on June 23, 2024

I haven't seen anyone using mixed meters in Humdrum, but I would think that they should be encoded as:

*M2+2+2/8
*M1/4+3/8
*M1+2+3/8+3/4

I did have a proposal for time signatures a while ago that no one was interested in: https://groups.google.com/d/msg/starstarhug/HtRY9oOfl7A/lIKiqiW06_IJ

This was only for resolving the metric patterns inside of 6/8 to resolve beat ambiguity (is the beat the eighth or the dotted quarter). Your first example would be:

*M6/8:4,4,4

But this system is not designed for the second or third cases, so perhaps the first encoding example is best when you want the visual groupings in the time signature, while the bottom example is better if you want to show a simple time signature, but break it into non-standard groupings (for automatic beaming or metric analysis).

I think mixed meters are possible in verovio. If you can figure out an example in MEI, I can add it to the humdrum2mei converter.

from vhv-documentation.

davidrizo avatar davidrizo commented on June 23, 2024

Verovio does not support yet:

Regarding the **kern encoding, I think the *M1+2+3/8+3/4 form is valid, but there must be a way to indicate whether it is mixed or alternating.
I've prepared an example of what could be generated (recall Verovio cannot deal with it yet)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/4.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="https://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>Examples of meter encodings</title>
                <respStmt>
                    <persName role="encoder">David Rizo</persName>
                </respStmt>
            </titleStmt>
            <pubStmt>
                <date>2020-04-05 17:15:00</date>
            </pubStmt>
        </fileDesc>
        <encodingDesc>
            <projectDesc>
                <p>MEI encoding example</p>
            </projectDesc>
        </encodingDesc>
    </meiHead>
    <music>
        <body>
            <mdiv>
                <score>
                    <scoreDef meter.count="4" meter.unit="4" meter.sym="common">
                        <staffGrp>
                            <staffDef lines="5" clef.shape="G" clef.line="2" n="1"/>
                        </staffGrp>
                    </scoreDef>
                    <section>
                        <measure>
                            <staff n="1">
                                <layer n="1">
                                    <note dur="1" oct="4" pname="c" />
                                </layer>
                            </staff>
                        </measure>
                        <scoreDef meter.count="2" meter.unit="2" meter.sym="cut"/>                        
                        <measure>
                            <staff n="1">
                                <layer n="1">                                    
                                    <note dur="1" oct="4" pname="d" />
                                </layer>
                            </staff>
                        </measure>
                        <scoreDef meter.count="7" meter.unit="4"/>
                        <measure>
                            <staff n="1">
                                <layer n="1">                                    
                                    <note dur="1" oct="4" pname="e"/>
                                    <note dur="2" oct="4" dots="1" pname="e"/>
                                </layer>
                            </staff>
                        </measure>                        
                        <scoreDef meter.count="3+2" meter.unit="4"/>
                        <measure>
                            <staff n="1">
                                <layer n="1">                                    
                                    <note dur="2" oct="4" dots="1" pname="f"/>
                                    <note dur="2" oct="4" pname="f"/>
                                </layer>
                            </staff>
                        </measure>
                        <scoreDef>
                            <meterSigGrp func="alternating">
                                <meterSig count="2" unit="4"/>
                                <meterSig count="6" unit="8"/>
                            </meterSigGrp>                            
                        </scoreDef>
                        <measure>
                            <staff n="1">
                                <layer n="1">
                                    <!-- apply first 2/4 -->
                                    <beam>
                                        <note dur="8" oct="4" pname="g"/>
                                        <note dur="8" oct="4" pname="g"/>                                   
                                    </beam>
                                    <beam>
                                        <note dur="8" oct="4" pname="g"/>
                                        <note dur="8" oct="4" pname="g"/>                                   
                                    </beam>
                                </layer>
                            </staff>
                        </measure>
                        <measure>
                            <staff n="1">
                                <layer n="1">
                                    <!-- alternate to 6/8 -->
                                    <beam>
                                        <note dur="8" oct="4" pname="g"/>
                                        <note dur="8" oct="4" pname="g"/>
                                        <note dur="8" oct="4" pname="g"/>
                                    </beam>         
                                    <beam>
                                        <note dur="8" oct="4" pname="g"/>
                                        <note dur="8" oct="4" pname="g"/>
                                        <note dur="8" oct="4" pname="g"/>
                                    </beam>                                        
                                </layer>
                            </staff>
                        </measure>
                        <scoreDef>
                            <meterSigGrp func="mixed">
                                <meterSig count="2" unit="4"/>
                                <meterSig count="1" unit="8"/>
                            </meterSigGrp>                            
                        </scoreDef>
                        <measure>
                            <staff n="1">
                                <layer n="1">
                                    <note dur="2" oct="4" pname="a"/>
                                    <note dur="8" oct="4" pname="a"/>
                                </layer>
                            </staff>
                        </measure>                        
                    </section>
                </score>
            </mdiv>
        </body>
    </music>
</mei>

from vhv-documentation.

craigsapp avatar craigsapp commented on June 23, 2024

Yes, this one is weird:

*M1+2+3/8+3/4

I was thinking about putting parentheses in for clarification, but they are not necessary provided that parsing of + has priority over / (which is opposite from standard algebraic parsing in math).

For mixed and alternating time signatures, things get more complicated. The general aesthetic of Humdrum is for analysis, and mixed/alternating time signatures are a ambiguous shorthand for showing the time signature for every bar. Therefore, there would need to be an "invisible" time signature that would apply to only the current measure (and following if not qualified), and a "printed" time signature that shows what is seen in the printed score. The invisible time signatures would probably need to be encoded by hand, at least in the general case.

A good example is the "sunken cathedral" prelude by Debussy:
https://en.wikipedia.org/wiki/La_cath%C3%A9drale_engloutie
http://conquest.imslp.info/files/imglnks/usimg/c/c0/IMSLP00509-Debussy_-_Preludes,_Book_1.pdf

Screen Shot 2020-04-05 at 09 44 08

The only way to figure out the time signatures is to listen to the composer play the music (via piano roll):
https://www.youtube.com/watch?v=levGISzDmjs

Since all alternate/mixed time signatures would automatically be visual, maybe something like this:

*M6/4|3/2

for this case. In other words, the individual time signatures would be separated by | which makes sense as the measure is either in 6/4 or 3/2 time. | would have a lower precedence than / or + I presume.

Maybe for invisible the yy marker (which can be used on notes but is not yet defined for interpretations) could be used:

*M4/4yy

This would mean that the time signature should be 4/4 if shown, but it is not to be displayed on the graphical notation. An alternate method which seems more elegant is to use a negative sign:

*M-4/4

I think I might like that one better.

from vhv-documentation.

davidrizo avatar davidrizo commented on June 23, 2024

Then, given the examples, the different encodings would be?

Additive meter

M(1+2+2)/4
See dance rhythm Zortziko

Mixed meter

M2/4+1/8
M2/4+(1+2+3)/8

Alternating meter

*M6/4|3/2: i.e.6/4 and 3/2 that alternate repeatedly.
See an example in the main theme of America (West Side Story), or Tchaikovsky's String Quartet No. 2 in F major

Interchanging meter

I think the "sunken cathedral" seems to be an interchanging meter.
I would encode as:
*M6/4=3/2

Invisible meter

*M-4/4

from vhv-documentation.

craigsapp avatar craigsapp commented on June 23, 2024

What is the difference between alternating and interchanging meter? Alternating is predictable (one measure in first, then next measure in second, then next measure in first, etc.) and interchanging is not predictable as to when the switch happens?

Maybe using | for interchanging meter (but can be notated with = in the score), since that maps better to the indeterministic behavior of the meter (it could be A or B).

For the alternating meter, that is equal to (A then B), so maybe use : as a divider between the separate meters:

*M6/4:3/2

Then if there is a case where the meter alternation is not a 1:1 repetition, it could be encoded like this:

*M6/4;2:3/2;3

which would mean that this is an alternating time signature where the first two measures are in 6/4, then there are three measures in 3/2 before the cycle is repeated.

For parentheses:

M(1+2+2)/4

I would prefer not to have them:

M1+2+2/4

Since I do not want to use Antlr :-). If there is a case requiring parentheses to disambiguate, then they could be allowed.

from vhv-documentation.

davidrizo avatar davidrizo commented on June 23, 2024

I agree with everything ;)

from vhv-documentation.

davidrizo avatar davidrizo commented on June 23, 2024

Something I don't know is whether in the case of interchanging meter (e.g. *M6/4|3/2), the duration implied by both meters must be the same

from vhv-documentation.

craigsapp avatar craigsapp commented on June 23, 2024

I think the Debussy prelude case is rare and quite ambiguous, since it is difficult to determine which time signature should be applied without listening to the piece played by someone else (such as the composer). All other cases of interchanging meter that I have seen have different durations for each meter, making it obvious which meter should be applied to the measure.

Another metric case might be hypermeter:

https://josquin.stanford.edu/cgi-bin/jrp?a=notationEditText&f=Jos2311
Screen Shot 2020-04-06 at 03 25 53

The modern time signature for the tenor part might best be expressed as:

*M2/1;3

which is a metric cycle of three measures of 2/1.

from vhv-documentation.

Related Issues (12)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.