-
Notifications
You must be signed in to change notification settings - Fork 192
Take into account key changes not only from the first staff #3877
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
The file does not import into Finale and Dorico. Is does import into MuseScore 4 (4.4.3). Exporting MusicXML from it or MEI both work properly with Verovio, so this it more looking like a bad data issue than a Verovio one. |
Verovios MusicXML importer only takes key changes from the first staff into account. |
First staff in part or in general? |
In general. No plans right now to fix this. For now you should go with the proposed workarounds. |
Ok. The same holds true for time signatures I guess? |
Clefs should work fine. |
Hello there. We are facing the same issue with an OMR system we are working on. The signature for transposed instruments is aligned with the other ones, even though they are correct in the MusicXML source. I understand that there is no short term plan to fix that, but you mention a "workaround" above. I could not find any specific info about such a workaround. Any clue ? Again and again, thanks for this wonderful tool. PR |
Thanks Craig ! Hmmm here is my specific case. My OMR identifies (wrongly) a key signature with one sharp on the piano part at measure 11, and none on the vocal part. This is correctly shown with MuseScore (see copy), but Verovio, when given the MusicXML file, does not show any key signature. Thus, our user cannot correct the situation by removing the wrong key sign. Verovio (converting the MusicXML): The MusicXML file In that case, this is a recognition error. But when we will encounter a transposing instruments, the signatures will be different in the source, and I am afraid they will be unified in the Verovio output after conversion. BTW and the analyzed image is here: https://gallica.bnf.fr/ark:/12148/bpt6k382117c/f8.item |
Yes, that is a different situation requiring independent key signatures for each part (in other words, polytonality). And @rettinghaus can complain about implementation of that case :-). Correcting errors from OMR in a semantic graphical editor seems difficult. Suppose you are missing a note in the middle of a measure. How would you encode it and how should it be displayed? For example, and original source might have: ![]() But your OMR program (you are creating your own, or using an existing one?) identifies most of the music but misses one note: ![]() How will that be represented in the MusicXML export? Ideally there would be a place holder (forward) in the bottom voice. If there is now, then perhaps the MusicXML data would be more like this: ![]() Where the missing note causes a shift in the music for the second voice/layer. Ideally you would add Preferrably you would use a non-semantic music editor such as SCORE and then after correcting the music, convert the data to a more semantic music representation. SharpEye does something similar with a basic graphical editor with low semantics where corrections are done and then exported to MusicXML. The source has an interesting alternate for vocal tenor clef: ![]() (two dots on the second-to-bottom staff line) which is equivalent to: ![]() Looking at measure 11 in the source: ![]() https://gallica.bnf.fr/ark:/12148/bpt6k382117c/f5.item.zoom I am wondering how a g-sharp on a note can be interpreted as an f-sharp key signature. Then the second note in the piano RH (F#4) has its sharp removed since the sharp is being assigned from the false key signature... So interpretation of accidentals also becomes a problem (fixing a key signature in Verovio will necessitate fixing all of the following accidentals on F. In a previous example: ![]() The semantics of this line of music is tricky. Ideally OMR would notice the blank staff lines on the bottom staff, and then split the notes across the two staves for two voices based on the stem directions in this case (one voice in the top staff for the right hand and one voice for the left hand in the bottom staff). Then in MEI, the LH notes on the bottom staff can be displayed on the top staff although they are attached to the bottom staff (measures 8—14): ![]() Click to view MEI data for above example<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/5.1/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="https://music-encoding.org/schema/5.1/mei-all.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<mei xmlns="http://www.music-encoding.org/ns/mei" meiversion="5.1">
<meiHead>
<fileDesc>
<titleStmt>
<title>Mouvᵗ de Valse.</title>
</titleStmt>
<pubStmt>
</pubStmt>
</fileDesc>
<encodingDesc>
<appInfo>
<application isodate="2025-05-17T11:31:38" version="5.2.0-dev-4660ee3-dirty">
<name>Verovio</name>
<p>Transcoded from Humdrum</p>
</application>
</appInfo>
</encodingDesc>
<workList>
<work xml:id="work0_encoded" type="encoded">
<title type="uniform">
<titlePart type="movementName" analog="humdrum:OMD">Mouvᵗ de Valse.</titlePart>
</title>
</work>
</workList>
</meiHead>
<music decls="#work0_encoded">
<body>
<mdiv xml:id="payjwf7">
<score xml:id="imx9pzp">
<scoreDef xml:id="gb1tecu" tempo.dist="3vu">
<staffGrp xml:id="o381rg3" bar.thru="true" symbol="brace">
<label xml:id="a1a9qrvb">Piano</label>
<staffDef xml:id="staffdef-L2F2" n="1" lines="5">
<clef xml:id="clef-L4F2" shape="G" line="2" />
<keySig xml:id="keysig-L6F2" sig="2f" />
<meterSig xml:id="metersig-L7F2" count="3" unit="4" />
<instrDef xml:id="k8zj7c3" midi.instrnum="0" midi.instrname="Acoustic_Grand_Piano" />
</staffDef>
<staffDef xml:id="staffdef-L2F1" n="2" lines="5">
<clef xml:id="clef-L4F1" shape="F" line="4" />
<keySig xml:id="keysig-L6F1" sig="2f" />
<meterSig xml:id="metersig-L7F1" count="3" unit="4" />
<instrDef xml:id="h1xjlvbd" midi.instrnum="0" midi.instrname="Acoustic_Grand_Piano" />
</staffDef>
</staffGrp>
</scoreDef>
<section xml:id="section-L2F1">
<measure xml:id="measure-L1" n="1">
<staff xml:id="staff-L2F2" n="1">
<layer xml:id="layer-L1F2N1" n="1">
<chord xml:id="chord-L9F2" type="placed" dots="1" dur="2" stem.dir="up">
<note xml:id="note-L9F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L9F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L9F2" artic="acc" place="above" />
</chord>
</layer>
</staff>
<staff xml:id="staff-L2F1" n="2">
<layer xml:id="layer-L1F1N1" n="1">
<mRest xml:id="mrest-L9F1" />
</layer>
</staff>
<tempo xml:id="tempo-L1F1" staff="1" tstamp="1">Mouvᵗ de Valse.</tempo>
<dynam xml:id="dynam-L9F3" place="between" staff="1 2" tstamp="1">f</dynam>
</measure>
<measure xml:id="measure-L10" n="2">
<staff xml:id="staff-L10F2N1" n="1">
<layer xml:id="layer-L10F2N1" n="1">
<mRest xml:id="mrest-L11F2" />
</layer>
</staff>
<staff xml:id="staff-L10F1N1" n="2">
<layer xml:id="layer-L10F1N1" n="1">
<chord xml:id="chord-L11F1" dots="1" dur="2">
<note xml:id="note-L11F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L11F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L11F1" artic="acc" place="below" />
</chord>
</layer>
</staff>
</measure>
<measure xml:id="measure-L12" n="3">
<staff xml:id="staff-L12F2N1" n="1">
<layer xml:id="layer-L12F2N1" n="1">
<chord xml:id="chord-L13F2" type="placed" dur="2" stem.dir="up">
<note xml:id="note-L13F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L13F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L13F2" artic="acc" place="above" />
</chord>
<chord xml:id="chord-L14F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L14F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L14F2S2" oct="5" pname="e" accid.ges="f" />
</chord>
</layer>
</staff>
<staff xml:id="staff-L12F1N1" n="2">
<layer xml:id="layer-L12F1N1" n="1">
<mRest xml:id="mrest-L13F1" />
</layer>
</staff>
</measure>
<measure xml:id="measure-L15" n="4">
<staff xml:id="staff-L15F2N1" n="1">
<layer xml:id="layer-L15F2N1" n="1">
<mRest xml:id="mrest-L16F2" />
</layer>
</staff>
<staff xml:id="staff-L15F1N1" n="2">
<layer xml:id="layer-L15F1N1" n="1">
<chord xml:id="chord-L16F1" dur="2">
<note xml:id="note-L16F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L16F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L16F1" artic="acc" place="below" />
</chord>
<chord xml:id="chord-L17F1" dur="4">
<note xml:id="note-L17F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L17F1S2" oct="4" pname="a" accid.ges="n" />
</chord>
</layer>
</staff>
</measure>
<measure xml:id="measure-L18" n="5">
<staff xml:id="staff-L18F2N1" n="1">
<layer xml:id="layer-L18F2N1" n="1">
<beam xml:id="beam-L19F2-L20F2" type="placed">
<chord xml:id="chord-L19F2" dur="8" stem.dir="up">
<note xml:id="note-L19F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L19F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L19F2" artic="acc" place="above" />
</chord>
<chord xml:id="chord-L20F2" dur="8" stem.dir="up">
<note xml:id="note-L20F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L20F2S2" oct="5" pname="e" accid.ges="f" />
</chord>
</beam>
<chord xml:id="chord-L21F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L21F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L21F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L21F2" artic="stacc" place="above" />
</chord>
<rest xml:id="rest-L22F2" dur="4" />
</layer>
</staff>
<staff xml:id="staff-L18F1N1" n="2">
<layer xml:id="layer-L18F1N1" n="1">
<rest xml:id="rest-L19F1" dur="2" />
<chord xml:id="chord-L22F1" dur="4">
<note xml:id="note-L22F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L22F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L22F1" artic="stacc" />
</chord>
</layer>
</staff>
</measure>
<measure xml:id="measure-L23" n="5">
<staff xml:id="staff-L23F2N1" n="1">
<layer xml:id="layer-L23F2N1" n="1">
<beam xml:id="beam-L24F2-L25F2" type="placed">
<chord xml:id="chord-L24F2" dur="8" stem.dir="up">
<note xml:id="note-L24F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L24F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L24F2" artic="acc" place="above" />
</chord>
<chord xml:id="chord-L25F2" dur="8" stem.dir="up">
<note xml:id="note-L25F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L25F2S2" oct="5" pname="e" accid.ges="f" />
</chord>
</beam>
<chord xml:id="chord-L26F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L26F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L26F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L26F2" artic="stacc" place="above" />
</chord>
<rest xml:id="rest-L27F2" dur="4" />
</layer>
</staff>
<staff xml:id="staff-L23F1N1" n="2">
<layer xml:id="layer-L23F1N1" n="1">
<rest xml:id="rest-L24F1" dur="2" />
<chord xml:id="chord-L27F1" dur="4">
<note xml:id="note-L27F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L27F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L27F1" artic="stacc" />
</chord>
</layer>
</staff>
</measure>
<measure xml:id="measure-L28" right="dbl" n="7">
<staff xml:id="staff-L28F2N1" n="1">
<layer xml:id="layer-L28F2N1" n="1">
<chord xml:id="chord-L29F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L29F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L29F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L29F2" artic="stacc" place="above" />
</chord>
<rest xml:id="rest-L30F2" dur="4" />
<chord xml:id="chord-L31F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L31F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L31F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L31F2" artic="stacc" place="above" />
</chord>
</layer>
</staff>
<staff xml:id="staff-L28F1N1" n="2">
<layer xml:id="layer-L28F1N1" n="1">
<rest xml:id="rest-L29F1" dur="4" />
<chord xml:id="chord-L30F1" dur="4">
<note xml:id="note-L30F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L30F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L30F1" artic="stacc" />
</chord>
<rest xml:id="rest-L31F1" dur="4" />
</layer>
</staff>
</measure>
<measure xml:id="measure-L32">
<staff xml:id="staff-L32F2N1" n="1">
<layer xml:id="layer-L32F2N1" n="1">
<chord xml:id="chord-L33F2" type="placed" dots="1" dur="2" stem.dir="up">
<note xml:id="note-L33F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L33F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L33F2" artic="acc" place="above" />
</chord>
</layer>
</staff>
<staff xml:id="staff-L32F1N1" n="2">
<layer xml:id="layer-L32F1N1" n="1">
<mRest xml:id="mrest-L33F1" visible="false" />
</layer>
</staff>
<dynam xml:id="dynam-L33F3" place="between" staff="1 2" tstamp="1">f</dynam>
</measure>
<measure xml:id="measure-L34" n="2">
<staff xml:id="staff-L34F2N1" n="1">
<layer xml:id="layer-L34F2N1" n="1">
<mRest xml:id="mrest-L35F2" visible="false" />
</layer>
</staff>
<staff xml:id="staff-L34F1N1" n="2">
<layer xml:id="layer-L34F1N1" n="1">
<chord xml:id="chord-L35F1" dots="1" dur="2" staff="1" stem.dir="down">
<note xml:id="note-L35F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L35F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L35F1" artic="acc" place="below" />
</chord>
</layer>
</staff>
</measure>
<measure xml:id="measure-L36" n="3">
<staff xml:id="staff-L36F2N1" n="1">
<layer xml:id="layer-L36F2N1" n="1">
<chord xml:id="chord-L37F2" type="placed" dur="2" stem.dir="up">
<note xml:id="note-L37F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L37F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L37F2" artic="acc" place="above" />
</chord>
<chord xml:id="chord-L38F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L38F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L38F2S2" oct="5" pname="e" accid.ges="f" />
</chord>
</layer>
</staff>
<staff xml:id="staff-L36F1N1" n="2">
<layer xml:id="layer-L36F1N1" n="1">
<mRest xml:id="mrest-L37F1" visible="false" />
</layer>
</staff>
</measure>
<measure xml:id="measure-L39" n="4">
<staff xml:id="staff-L39F2N1" n="1">
<layer xml:id="layer-L39F2N1" n="1">
<mRest xml:id="mrest-L40F2" visible="false" />
</layer>
</staff>
<staff xml:id="staff-L39F1N1" n="2">
<layer xml:id="layer-L39F1N1" n="1">
<chord xml:id="chord-L40F1" dur="2" staff="1" stem.dir="down">
<note xml:id="note-L40F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L40F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L40F1" artic="acc" place="below" />
</chord>
<chord xml:id="chord-L41F1" dur="4" staff="1" stem.dir="down">
<note xml:id="note-L41F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L41F1S2" oct="4" pname="a" accid.ges="n" />
</chord>
</layer>
</staff>
</measure>
<measure xml:id="measure-L42" n="5">
<staff xml:id="staff-L42F2N1" n="1">
<layer xml:id="layer-L42F2N1" n="1">
<beam xml:id="beam-L43F2-L44F2" type="placed">
<chord xml:id="chord-L43F2" dur="8" stem.dir="up">
<note xml:id="note-L43F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L43F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L43F2" artic="acc" place="above" />
</chord>
<chord xml:id="chord-L44F2" dur="8" stem.dir="up">
<note xml:id="note-L44F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L44F2S2" oct="5" pname="e" accid.ges="f" />
</chord>
</beam>
<chord xml:id="chord-L45F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L45F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L45F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L45F2" artic="stacc" place="above" />
</chord>
<space xml:id="space-L46F2" dur="4" />
</layer>
</staff>
<staff xml:id="staff-L42F1N1" n="2">
<layer xml:id="layer-L42F1N1" n="1">
<space xml:id="space-L43F1" dur="2" />
<chord xml:id="chord-L46F1" dur="4" staff="1" stem.dir="down">
<note xml:id="note-L46F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L46F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L46F1" artic="stacc" />
</chord>
</layer>
</staff>
</measure>
<measure xml:id="measure-L47" n="5">
<staff xml:id="staff-L47F2N1" n="1">
<layer xml:id="layer-L47F2N1" n="1">
<beam xml:id="beam-L48F2-L49F2" type="placed">
<chord xml:id="chord-L48F2" dur="8" stem.dir="up">
<note xml:id="note-L48F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L48F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L48F2" artic="acc" place="above" />
</chord>
<chord xml:id="chord-L49F2" dur="8" stem.dir="up">
<note xml:id="note-L49F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L49F2S2" oct="5" pname="e" accid.ges="f" />
</chord>
</beam>
<chord xml:id="chord-L50F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L50F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L50F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L50F2" artic="stacc" place="above" />
</chord>
<space xml:id="space-L51F2" dur="4" />
</layer>
</staff>
<staff xml:id="staff-L47F1N1" n="2">
<layer xml:id="layer-L47F1N1" n="1">
<space xml:id="space-L48F1" dur="2" />
<chord xml:id="chord-L51F1" dur="4" staff="1" stem.dir="down">
<note xml:id="note-L51F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L51F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L51F1" artic="stacc" />
</chord>
</layer>
</staff>
</measure>
<measure xml:id="measure-L52" n="7">
<staff xml:id="staff-L52F2N1" n="1">
<layer xml:id="layer-L52F2N1" n="1">
<chord xml:id="chord-L53F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L53F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L53F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L53F2" artic="stacc" place="above" />
</chord>
<space xml:id="space-L54F2" dur="4" />
<chord xml:id="chord-L55F2" type="placed" dur="4" stem.dir="up">
<note xml:id="note-L55F2S1" oct="4" pname="a" accid.ges="n" />
<note xml:id="note-L55F2S2" oct="5" pname="e" accid.ges="f" />
<artic xml:id="artic-L55F2" artic="stacc" place="above" />
</chord>
</layer>
</staff>
<staff xml:id="staff-L52F1N1" n="2">
<layer xml:id="layer-L52F1N1" n="1">
<space xml:id="space-L53F1" dur="4" />
<chord xml:id="chord-L54F1" dur="4" staff="1" stem.dir="down">
<note xml:id="note-L54F1S1" oct="4" pname="d" accid.ges="n" />
<note xml:id="note-L54F1S2" oct="4" pname="a" accid.ges="n" />
<artic xml:id="artic-L54F1" artic="stacc" />
</chord>
<space xml:id="space-L55F1" dur="4" />
</layer>
</staff>
</measure>
</section>
</score>
</mdiv>
</body>
</music>
</mei> Somewhat related and of interest to you: The Polish Scores in Open Access project has 60000 pages of music transcription (8000 scores containing 12000000 notes): All of the scores has links to IIIF scans of the source editions, with 1000 of them linked at the system level, click on the "I" button for scores where the IIIF images have been linked to the transcriptions at the system level: ![]() such as: https://polishscores.org/?id=18xx:3726 Double clicking on a note in the score will bring up the system image from the full page: IIIF URL: https://zas.bn.org.pl/iiif/74775867/86210581.tif/286,409,2656,1027/full/0/default.jpg Notation in verovio: ![]() Humdrum data: Line 38 has bounding box information for the two staves:
Which means image 2 of the IIIF document, bounding box 286,409,2656,1027 (xywh), And the manifest is on line 22: https://polona2.pl/iiif/item/NzQ3NzU4Njc/manifest.json Are used together to generate the IIIF image of the music: https://zas.bn.org.pl/iiif/74775867/86210581.tif/286,409,2656,1027/full/0/default.jpg Recent paper on the project in JNMR: https://www.tandfonline.com/doi/full/10.1080/09298215.2025.2487093 |
Woooh a lot to say. Yes we are producing our own OMR system. Yes, distinction of key signatures and accidentals still requires some work (we are almost there). Regarding our correction method: we provide interfaces to correct the output of OMR, but we do NOT allow for insertion of any object. The prototype is in place in case to want to have a look (https://collabscore.cnam.fr/, fully in French, sorry). Regarding the example (Danse macabre), our system preserves the staff of the notes/silences, regardless of the voice (a voice can be distributed on all the staves of a part). I will be glad to look at your examples and paper. And your help and advices are always much appreciated, hope we will soon have an opportunity for a face to face discussion. Thanks for all ! |
Verovio renders wrong key signatures for the minimal musicxml example I attached.
It should look like this (rendered using musescore):


but verovio renders key signatures wrong for second part:
Here the musicxml to reproduce the behaviour:
The text was updated successfully, but these errors were encountered: