Plugin embellishing harmony (chord symbols) for jazz lead sheets in the 4-note voicing idiom

• Aug 8, 2020 - 07:15

I attach a plugin that embellishes harmony (chord symbols) for jazz lead sheets in the 4-note voicing idiom.

The underlying idea is this: what characterizes a chord pair c1-c2? In first approximation it is the chord types and the distance between them (in half notes from -5 (fourth) to 6 (tritone)) . For example Dm7 G7 becomes “m7 5 7”, but so does Em7 A7. So this is not ‘strictly true’ but makes things manageable. For every chord pair type1-d-type2 I searched in my jazz standards database for instances of type1-x-type2 and tested if chord symbol x can be used to embellish the c1-c2 sequence. On this basis I constructed the embel table.

The most surprising result is that very often a number of embellishments are possible, but typically about half of them do not sound good in any particular instance, usually because of a conflict with the melody note (those can still be useful in improvisation), or because of larger context issues or other, unclear reasons. You need to test the suggested embellishments and see/hear for yourself which ones sound good/interesting. This is in itself instructive. Experiment with inversions for best voice leading. Sometimes things that sound good initially don’t sound so good after a while, and vice versa.The good news is that you can edit/expand/contract the embel table to suit your own taste.

In Embel Examples.mscz I show some examples where I manually colored the good sounding chord symbols blue. In ResultsMaster.mscz I show how I would play these same examples implementing my top embel choice.

1. Add quarter note rests in voice2 throughout. This creates segments needed by the plugin if there is no note on a beat in voice 1 (h/t Marc Sabatella). They can be removed afterwards.
2. Color the existing chord symbols red (or any color). The added chord symbols are black.
3. Adjust mingap = 480 (quarter note) if desired. Embellishments are only added if space between existing symbols is > mingap.

Known issues:
Remove all Staff Text: they hang the plugin & MuseScore.

Play Chord Symbols (in MuseScore 3.5) does not help: from the sound of it, it plays all the stacked chord symbols at once.
Naked chord symbols (Bb etc.) are recognized as Maj.
Slash chords are recognized, but the /bass is ignored internally.
Other recognized chords are limited to what you see in the embel table, which you can adapt to your own symbols with a – careful! - global replace.

I fully agree with what has been opined here before: don’t expect the computer to compose interesting music. I see this plugin as an aid in developing your harmonic palette. And after a while (10 years or so) these new ideas become second nature to you and then ‘your fingers know...’. That’s when the fun starts...

Attachment Size
Embel Examples.mscz 17.01 KB
ResultsMaster.mscz 26.29 KB
Embellish.qml 13.96 KB


By popular demand (?!) I wrote a new version of the plugin, which takes into account the melody note. This avoids some clearly bad choices, but you still need to check which ones sound good (to you). For example: melody note b can sound quite good over C7, but also quite bad in other contexts. My original hope was to formulate rules that distinguish these cases, but that failed miserably. As my former boss was fond of saying: “Object oriented programming is all right, but can you model reality?”

In preparing the score fill voice2 with eight note rests instead of quarter note rests. This allows for a better positioning of the embellishments. Be sure to be back in normal mode before running the plugin.

For scores in 3/4 adjust the onemeasure variable in the plugin.
Ubiquitous Circle of Fifths progressions are not considered for embellishment.

In working on this project I found 7#11 & 7b13 voicings often useful and versatile: e.g. (from low to high) f a b e = F7#11 (1 3 #4 7) = G7b13 (7 2 3 6b). I attach a score with examples of 7#11 and 7b13 embellishments.

7 and m7b5 voicings can be identical: e.g. d g ab c = Dm7b5 = Bb7
Sometimes both of these will appear in the same embellish stack. This is because there is also another regular voicing of m7b5 = 7 1 3 b5, e.g. Am7b5 = g a c eb
Consult the plugin (in a text editor) for further details.

Attachment Size
Embellish4.qml 45.42 KB
Modified7Voicings.mscz 31.24 KB

In reply to by Jojo-Schmitz

The plugin repository is too high-tech for me, Jojo. (Github and markup language are Chinese to me). So I post my new version here.

This new version shows the embellishments horizontally and provides tools to analyze them further.

How to proceed:
Pull your leadsheet in Hortemplate.mscz (all Musescore files & plugins mentioned attached). Remove upbeat if present & color your chord symbols red and save (at every step). The 1/32nd rests create segments that may be needed by the plugin.
Be sure you are not in note input mode when running the plugins.
See embellish7 code header for more details.

Run embellish7.qml (from the plugin creator window)
Run WriteHarmonyVoicings2.qml
If there is an error, look for missing chord symbols.
In that case:
Correct typo’s or define the missing chord symbol in an empty piano score


and run ReadHarmonyVoicings.

This outputs the chord in a format that you can directly insert in the chords table of WriteHarmonyVoicings2 (at the appropriate alpha place) and save.

Debug: ["Ab7/Eb",[51,54,56,60,11,8,10,14],1,1], //eb,gb,ab,c

To be on the safe side discard the latest file (with harmonyvoicings partially filled in) and go back to the embellished file. Run WriteHarmonyVoicings2 again and it should be fine.

Turn off play of the chord symbols, and If you play the score slowly enough so you can already hear which embellishments sound good.
WriteHarmonyVoicings makes an attempt at voice leading: if more than one voicing is listed for chord symbol x in the chords table it will chose the one closest to the previous chord (by comparing pitches) If the result does not look right most likely the best voicing is still missing in the chords table. But this is still buggy in places. You can als manually enter one or more voicings (which the plugin reads and respects) to steer voice leading in another direction.
You can also limit the number of embellishments shown by adjusting the maxembel variable.
Applied to a complete song, it looks like Embeltest;mscz.

If you wish to examine a particular chord pair closer, proceed as follows:
Copy a chord pair of interest in CatTemplatex.mscz (Depending on If the chord pair occupies 1,2,3 measures, use CatTemplate1,2 3). Remove the chord symbols to the left and right of the sequence of interest and the rests in voice 2.


Run CatWrite2.qml (or 1 or 3 as the case may be) and the result will look like this


Hit F6, disable Chord Symbols, select the melody notes, an copy them (using R) to the new right hand staves. Restore the outside chords and the result looks like this:


Here you can carefully listen to each embellishment separately. Be sure to always have your CatTemplate files filled with eight note rests in voice 1 & 2 of the right hand and voice 1 of the left hand.

Sometimes the entire embellish sequence sounds quite good: Play Samples.mscz

If the embellishments do not sound good, experiment with different inversions, also in the neighboring chords. If there is a clash with a nearby melody note, consider even altering the melody note (like Mark Levine suggests in his chapter on reharmonization).

The embellishments are suggestions only. Nothing beats human ingenuity!!

Attachment Size
HorTemplate.mscz 10.34 KB
CatWrite1.qml 35.17 KB
CatWrite2.qml 36.64 KB
CatWrite3.qml 36.62 KB
Embellish7.qml 70.78 KB
ReadHarmonyVoicings.qml 6.9 KB
WriteHarmonyVoicings2.qml 35.52 KB
EmbelTest.mscz 28.35 KB
Samples.mscz 33.43 KB
CatTemplate1.mscz 10.91 KB
CatTemplate2.mscz 13.2 KB
CatTemplate3.mscz 14.12 KB

In reply to by elsewhere

Well, here in the Forum your plugin and all the work and time you invested will largly get lost, dueto lack of visibililty and rediscovery.
Don't care to much about baking that entry in the plugin repo beautiful, just created it, attach your files , just like you did here, it really isn't more work than creating a forum post.

In reply to by Jojo-Schmitz

You are right Jojo, and I followed your advice.

Part of the problem is that your link referred me to the Dutch Repository site (I am Flemish)
where I had problems: I could only attach one file(?!). Also both the English and Dutch site kept telling me the short name should not contain special characters which it did not, and it is not explained what the short name should be.

Many thanks for the encouragement.

In reply to by Jojo-Schmitz

True to the spirit of the OpenSource mantra: "publish early, publish often”, here is yet another version.

Major changes:
1) I noticed that different chord symbols sometimes suggest the same voicing, thereby cluttering the landscape. This is true for dim, e.g.Ddim & Fdim are equivalent, and also for 7#11 & 7b13 (F7#11 = B7#11 = G7b13 = Db7b13, see For uniformity’s sake I converted all 7#11 embel chords to 7b13.
2) I introduced an adjustable minshift variable set at 120 as default, which specifies that the minimal space between embel chords is 1/16 notes. Thus in a quarter note space only 4 embel chords are allowed, but in a whole note space up to 16 (but this never happens).This is more flexible than the previous maxembel variable. If the embel table has more suggestions than allowed , only the most common are shown.
3) The embel suggestions are now sorted and shown from least to most frequent. This enhances the ‘flow’ of the suggested sequence. This is still somewhat of a mystery to me: the embel chords are chosen for compatibility with the first melody note, yet they often sound good with subsequent melody notes.

The whole process is now semi-automatic. Manual intervention is mostly needed in the case of triplets/tuplets, and odd or syncopated rhythms. Using inversions, deleting some embel chords, or rearranging their sequence can also help in bad sounding cases.

I attach an example which was generated without manual intervention (Demo.mscz)

Jojo, I'd be grateful if you could update the plugin page…
with the new versions of embellish7.qml, WriteHarmonyVoicings2.qml and Hortemplate.mscz.

Attachment Size
Demo.mscz 25.26 KB
Embellish7.qml 63.86 KB
WriteHarmonyVoicings2.qml 35.94 KB
HorTemplate.mscz 12.77 KB

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