GSoC 2019: Chord Symbol Playback - Week 5

Posted 4 years ago

First evaluations done!

So far

Last week I ventured into some unfamiliar territory. I spent a lot of time reading code and documentation again to understand how to make UIs for MuseScore with Qt as well as to understand how to use the testing system. Qt is still pretty beastly to me, but I think I have a decent grasp on how to make something that is at least passably pretty to look at. I have set up the ground works for a new custom dialog and done some work to integrate it into what I have made so far. Here's a look at the dialog:

Week 5.png

For testing, I've built up a bit of code to test the realization of symbols into notes. Also since we have reached a pretty major checkpoint (basic features completed :)), I have done some more thorough testing and revisited the code I've written so far to fix or improve little things that I previously left behind to fix.

This Week

This week is another step forward to polish the feature and focus on the details. I'm hoping to first write a number of tests to make sure that the code is working as expected. These tests will include new algorithms and options. The current algorithm works okay for many common chord symbols, but it can get really messy with more and more alterations and extensions. When a musician sees a 13th chord on a lead sheet, they're probably more likely to play it voiced like Root-7th-3rd-13th than they are to play Root-9th-3rd-11th-5th-13th-7th because the second voicing is extremely muddy. I'd like to work on some options for omissions and alternate voicings to help.

Here are some of the things I'll take a look at:

  • Drop voicings (probably going to implement these for sure since it's easy to implement and common among jazz musicians)
  • 3 note and 4 note voicings (limit the notes to help with muddiness, but without needing a large range for the chords)
  • Open voicing (we essentially have close voicing right now)
  • Omit "unimportant" tones (things like omitting the 11th and the 5th when not completely necessary, will need a better name)
  • Add 9ths when appropriate
  • Add 13ths when appropriate

I also would like to improve the UI further. Last week (as you probably saw above), I only have completed the foundation for the new dialog. Now, it's time to add some more of the functionality into the UI and make it even better. Finally, I'd like to fix some bugs that I found last week.

I'm excited to have a good productive week! See you all next time!


Good job putting the dialog together in Qt! I imagine the info presented is more useful to you than to the end user, we will probably want to think about what makes to actually include. I think most will not need to see the list of chords, just the dropdown with the options.

Regarding voicings, there are indeed many different ways to go about this, but let me share some random thoughts here:

  • There's a big distinction between "literal" and "jazz" interpretations of chord symbols that should probably be presented as such rather than a bunch of individual options (even if internally there are separate options and selecting "jazz" is just a shorthand for "add 9ths and 13ths, omit unimportant notes").

  • Consider 5-6 a reasonable upper limit for number of notes to include, so 13th chords would pretty much always omit something, certainly 11th unless altered, probably fifth also. 6 is obviously a hard limit for most guitars. Might as well also consider the guitar low E string a practical low limit for bass note.

  • I often describe voicings as being like a pyramid with wide intervals at the bottom, smaller intervals at top, and there is also a heirarchy of chord tones, with root on bottom, then at least one basic chord tone (1, 3, 5, or 7) as the next note up, then anything else. A good rule of thumb is, no more than 1 note more than an octave below middle C, so you can have 1-3 at the bottom of a voicing only if that 3 is within an octave of middle C (actually I'd go with D)

  • This leads me to a somewhat guitaristic "zone" approach to voicing you might try: place the bass note in the octave from E to E below middle C, take as the next note the first basic chord tone above that but still less than an octave below middle C, then whatever else after that. You could either start with this, or start with the idea of something more top-down like drop 2, but apply this to the bottom. Not sure this makes sense, feel free to followup with me on Telegram.

In reply to by Marc Sabatella

This leads me to a somewhat guitaristic...

Since the guitar is an octave transposing instrument, the concert pitch for the low E string on a guitar is an octave below the E below middle C. This will actually put the bass note on the bass clef where ignoring this puts it on the alto clef (where middle C is on the middle line).

In reply to by Peter Hieu Vu

Sorry, I've been gone. The "guitaristic approach" doesn't require the lowest note to be the E below middle C or higher because the concert pitch of the low E string is the E below the bass staff, not the E below middle C as Marc indicated. All guitar notes sound an octave lower than written. I'm not a guitarist so I don't know about he musicians limitations but I don't think you should be concerned with whether a musician can play the same notes you are using.

In reply to by mike320

I fully agree. I't not necessary to "simulate" a pianist or guitarist. Recall the use case: to hear and "review" a melody in it's (correct) harmonic context. I doesn't need to sound particularly good - it's enough if it doesn't sound particularly bad :-)

Thus, any voicing which does that job is a good one, no matter if it's playable.