WYSIWYG chords in MuseScore 2.0 and how to tweak it, to be more like 1.3

• Dec 7, 2014 - 21:01

In MuseScore 2.0 a new way was introduced to parse and render chords.

Some information can be found here:
New flexible chord symbol entry and rendering

This page talks about two modes of operation, however, now in the (almost) finished product there is basically only one mode, the WYSIWYG mode, where a variety of different chord spellings is accepted.

I would like to know how we can tweak this behaviour so it enforces a set of chord spellings.

While it is great the for example a minor chord can be entered in many different ways, it would be good to force the system to always render it in one way, so for example in the way version 1.3 used to do.

Here I am copying what was discussed in //musescore.org/en/node/33766#comment-180286

To enforce only the spelling of minor/major chords used in version 1.3, I added this to chords_jazz.xml:

That way regardless of the spelling entered, eg. Ami, A-, Am, the rendered result is always "A" followed by the special precomposed glyph "MI" provided only in the MuseJazz font.


  1. Which other additions to the chords_jazz.xml file are possible, to make the behaviour more like the one in 1.3?
  2. How do you restrict diminished to "o" (I noticed that you need to type lower case o, not 0 (zero)) and disallow "dim"?
  3. And how do disallow Ø7 and map that to mi7b5 instead? I don't understand the comment in the XML that talks about mi7b5 and 07 (zero seven).
  4. Is there a list of pre-canned names, like "mi" and "ma" that do special things? Like map to a single special character in the MuseJazz font?

Further observations:

  1. We also used to have a 7alt chord, with the "alt" as a superscript. Now it's put at the baseline.
  2. mi(ma7) chords look different to what they used to look, before the had the parenthesis, now the "Ma7" goes as a superscript (with or without parenthesis). That's a change.

Is the old jazzchords.xml really still supported? Is it a good idea to use it? Wouldn't it be better to tweak the new system to be a little more like the old while having more liberties?

I've just opened an 1.3 score with 2.0. The chord style gets imported as "Custom", in my case cchords_muse.xml. That looked OK. Switching to Jazz chords also looked OK. I tried another score, the one with the "alt" and mi(ma7) chords. Switching to the new scheme moved the alt down and the (ma7) up as described above.

So are there any recommendations for a transition?


First, the *easy* answer to your questions is: if you want the behavior to be more like 1.3, then continue to use the 1.3 chord definition files. Set the chord style to "Custom" and for best results in terms of compatibility with 1.3, check the "Use chords.xml" option. You will find all chords will continue to render as they did, since the same rendering instructions are used, and you get the "coercing" behavior for free. That is, chords are not unrecognized any more; they are simply converted to whatever your selected chord definition file expects. It's a win/win.

I don't recommend "jazzchords.xml". It was already deprecated as far as I am concerned by the time 1.1 came out. But the "cchords" files should be fine, As for making the default rendering in the "Jazz" style "more like 1.3", remember, there was no one single 1.3 look. It differed depending on which chord definition file you used. I tried to pick defaults for 2.0 that I thought represented best practices in the world of published jazz scores. It is very similar to cchords_muse.xml, which was designed with similar goals, but I made a number of improvements based on further experience and based on the more sophisticated capabilities of the 2.0 chord symbol engine.

Now, if you don't want to simply use one of the 1.3 XML files but instead want to customize behavior above and beyond the 2.0 "Jazz" defaults, we are getting into very esoteric territory, but it *is* possible. You just need to hand-edit the XML file, as you have already seen. This is not documented because I don't expect it will be worth the trouble to do so - very few people will want to bother, and those few who do will probably have difficult-to-anticipate special requirements that wouldn't be covered in any generic documentation I put together.

To answer your specific questions:

1) Way too broad. What *specifically* would you like to do? Or more to the point: what specifically would you like to do that I haven't answered elsewhere here?

2) Enter "o" as a chord in your XML file, just like you did for "mi". Do the same for "o7", "mi9", etc. Each chord you want coerced gets a chord tag with the name you want to win.

3) Enter "mi7b5" as a name tag in the same manner will force all variations on that syntax to render as mi7b5 - eg, m7b5, min7(b5), etc. But it won't force "07" to render that way. To do this, simply add another name tag (maybe two - one for "0", one for "07") to the same chord definition. Note the documentation that *is* present in the comments specifically describes this exact use case (for mi7b5 and 07). So please do study the existing file.

4) Best way to see what's available in MuseJazz is to grab the sources and look at the font in FontForge. But you can also see it pretty well just from the list of "sym" declarations in chords_jazz.xml.

Regarding "alt" - this is still a recognized chord; I just changed how it is rendered by default based on an analysis of published scores. But if you use one of the old XML files that superscripted it, you should still get the superscripting. See again my first comment - if you want the 1.3 behavior, use onew of the 1.3 XML files, which are still provided with the distrubtion for compatibility.

To get "alt" to superscript in chords_jazz.xml, see the "token" definition for that string. Change the render tag to add whatever vertical offset you like. "m:0:-5 alt m:0:5" will cause it to be render 5 points above the baseline (and then return the cursor back the original height), which is how it was in 1.3 for cchords_muse.xml (as you can see if you edit that file and look for the definition of that string).

For mi(ma7), again WYWIWYG. You want lower case and parens? Then *type* lower case and parens. It is true that the "ma7" is now superscripted, whereas in at least some of the older XML files it might not have been (in some it was, in others it was not). Again, I picked a set of defaults I thought would work well, and I wanted it to work well regardless of whether you typed parens or not, so superscripting seemed the best way.

If you prefer to disable the superscripting of this but for watever reason do not choose to simply use the old cchords_muse.xml, you'll have to edit the chords_jazz.xml by hand. Depending on exactly what you want - how many different chords you want this to affect - you might want to edit the ENTITY definition for "mod" and "modn", and or the "token" definition for "ma" in class "modifier", or you might just want to enter a specific "chord" definition for this chord complete with render tags (you could steal the one from cchords_muse.xml).

Yes, this is not documented. Fully documenting all the possibilities would take a long time, and hardly anyone would take advantage of it. Perhaps after the release of 2.0 when there is more time for such things, I might write something up.

In reply to by Marc Sabatella

Hi Marc and thank you for the long answer.

Referring to "jazzchords.xml" was my mistake. I've never used it, I'm using "cchords_muse.xml" as I discovered later when importing the 1.3 scores into 2.0.

I had experimented with the "o", but didn't realise there needed to be an "o7" as well.

I'm happy with the modification to mi(ma7), ie. that the (ma7) is now superscripted, with or without parenthesis.

I think the "alt" should be superscripted, because it's just a lazy way to say, well, any alteration, #9, b9, #5, etc. can be tried here (correct me, if I'm wrong). This one is of course not used a lot in published scores. However, I trust your experience.

Just for the record, here are the additions I've made to chords_jazz.xml:
<chord><name>mi7b5</name> <name>07</name></chord>
<chord><name>7alt</name><render>m:0:-5 7alt m:0:5</render></chord>

Just one last question:
Which changes would I need to make to force all minor chords to a "-" and all major chords to a "Δ"? And how (without making these changes) can I enter a Δ? I have a customised keyboard, so I can just type it, but there must be another way (and I'm not even sure I'm using the correct character in my keyboard layout, it's an U+0394 (Greek uppercase delta)).

Here (New flexible chord symbol entry and rendering ) one can see the triangles.

In reply to by jorgk3

To change the minor chords to "-", simply use "-" instead of "mi" in your chord definition. Basically, whatever you type in the "name" tag is how the chords will be coerced.

Use "t" (for "triangle", should be mneomonic in "most" languages?) or "^" (closest shape on a standard keyboard) to get the triangle in major chords. That goes for both typing and for customizing the XML file.

BTW, you'll want chord definitions for "mi7", "mi9", etc if you want them coerced as such. You need one "chord" for each distinct chord you want to be see coerced.

In reply to by Marc Sabatella

Thank you for your answer. I added these lines for some testing:

As expected, Ami is coerced to A-, Ami7 is not, since the "mi7" is missing.

Ama is coerced to AΔ as expected. However, Ama7 is not coerced to AΔ7.
So what am I doing wrong?

BTW, three, trois (FR), tres (ES) is sadly drei in German. So the word for triangle is Dreieck ;-)

In reply to by jorgk3

Funny, I knew "drei" was three, but I guess I assumed there might be other Latin-based words that came in with "tri-".

As for why you can't get "ma7" to coerce when you have a "chord" entry for "t7", I'm not sure - it works for me. You'd have to post the score and/or XML file. Unless what you typed above is literally the content of your XML file - in which case, it's the missing closing name tag on the "t" line.

In reply to by Marc Sabatella

Hi Marc, thank you for your patience.

It works for me, too. I don't know what was wrong, maybe a typo in the XML.

It's a bit of a pain to enter XML with opening < here. If - after copying and pasting the XML - you overlook one < and don't replace it with &lt; the XML tag just gets eaten. I can't edit the previous post any more to see what I typed/pasted.

In reply to by Marc Sabatella

Actually, it failed again.

This time I created a new score, placed the Ama, then switched the style to jazz chords.
So steps to reproduce.
1) Clobber the chords_jazz.xml with the one provided.
2) Create a new score, one violin.
3) Enter a few notes.
4) Enter Ama (standard chords)
5) Switch to jazz chords
6) Ama is not changed to AΔ
7) Delete it an enter a new one. Now it's coerced, but the Ama7 is not.

Actually: I just reran the steps. This time, the Ama was replaced by A with small "MA" (jazz style), Ama now doesn't get coerced, but Ama7 does. There's a bug somewhere, only one of the two gets coerced after the style change and it's somewhat random.

XML and score attached. Actually two scores, one coerces Ama, the other Ama7.

It works if you switch to jazz chords before you place the first chord.

Attachment Size
no-coercion.mscz 4.77 KB
chords_jazz.xml 13.35 KB
no-coercion-2.mscz 4.64 KB

In reply to by jorgk3

I think the problem is once you have entered chords using a style that doesn't coerce, they are considered legitimate chord entries as well and won't be coerced in the future either. If you want to get the ful advantages of coercion, you need to set it up before you start entering chords.

In reply to by Marc Sabatella

Yes, I can confirm that.

If you switch to the correct chord style before you start entering chords, everything works as expected.

If you forget loading the style and enter a chord that should be forced to something else, it doesn't get forced any more after loading the style.

That's a feature?

In reply to by Marc Sabatella

I downloaded a German lead sheet and want to edit the chord symbols. Once again it takes hours to figure out how to do something that should require no effort at all. I don't know German, but I think the system should be international. I had a chord that was H5+. Someone says that's supposed to be a B5+ but MusicSores AUTOMATICALLY changes it to Bb5+ and I can't change it manually to B5+. Actually to my ear the music sounds OK but who knows? How do you edit the German Chord Symbols. If MusicSores wants to to something automatic, it would be nice to just have some kind of setting that just changed a score to standard notation automatically. Is the German H, B or Bb? I have no idea, and no idea how to change it in MusicSores.

In reply to by gBouchard

Unfortunately there are multiple standards used in Germany, and 1.3 was limited in its support. So it's hard to say exactly what you need to do without seeing the score. But if the score was created well, it should be as simple as going to Format / Style / Chord Symbols and changing the note spelling to standard - indeed, no effort at all. But again, in order to say for sure what is going with that specific score, we'd need you to attach it.

Do you still have an unanswered question? Please log in first to post your question.