Vizualitation of all chord progressions! (kinda)


Details and interactive versions are here:

I’d like the community/devs to jump on this if desired… I’ll wait a week before I post this out and around.

Can you give a Legend to explain what all the numbers and * means.


Actually, could a Dev let me know if they prefer me to offer the csv files that I saved off of the hooktheory API in my github or not? I don’t know what you prefer, to have people access the csvs directly to not hit your API unnecessarily, or to have people going through your API so you see the traffic… up to you! Pls let me know.

C → G → Am is the same as A → E → Fm

If you mean F♯m, and both of them are encoded with the same Roman numerals in the relative major, then yes. So if C - G - Am is in C Major but A - E - F♯m is in A Lydian, the former yields I - V - vi but the latter is IV - I - ii in E Major. The Trends API is still not quite complete and I would like to see more progress on this after the API is more usable.

The numbers are as they are represented in the Trends search string, here in EBNF metasyntax:

(* Roman numerals *)
           numeral = "1" | "2" | "3" | "4" | "5" | "6" | "7";

(* Borrowed modes, from Dorian to Locrian *)
              mode = "D" | "Y" | "L" | "M" | "b" | "C";

(* Figured bass for triadic and seventh chords *)
         inversion = "6" | "64" | "7" | "65" | "43" | "42";

(* Functions available for applied chords *)
          function = "4" | "5" | "7";

(* Basic chords or borrowed chords in the relative Major key *)
      simple-chord = [mode], numeral, [inversion];

(* Applied chords *)
     applied-chord = function, [inversion], "/", numeral;

(* Chord progressions for both the Trends page and the API *)
             chord = simple-chord | applied-chord;
trends-progression = chord, {".", chord};
   api-progression = chord, {",", chord};

This is reverse-engineered and does not include added/suspended chords or supermodal chords such as “4add9” or “S(3)3”, which occasionally show up in Magic Chord. “add9” and “sus4” probably go after [inversion], “S(3)” probably belongs to mode as do other supermodes. All progressions generated can be parsed unambiguously.

1 Like

HertzDevil, clearly you are an advanced user… I was attempting to give the very simple explanation of what the I, II, III mean relative to normal chords like C, D, E because most lay-people aren’t familiar with that notation. If you provide a more correct simple explanation than what I have, I’d be happy to change it. This is what I had orignally written:

Numbers represent the normalized chords (so 1, 2, 3 = I, II, III = C, D, E (in C key)

3 represents iii, the minor triad Emin in C Major. III is the Emaj chord in C Major, however it is represented by S(3)3 since it belongs not to the Major scale, but to the “supermode” of C containing 3 sharps. If 3 really represents the E-G♯-B chord it would be until the Trends API uses the parallel major of Theorytabs instead of relative major (this has been discussed before).

If you really want the said lay-people to understand the visualization, you don’t really need to retain the API chord representations on the Sankey plot. The jazz notation of the chords can be directly used while the key of C Major can be simply implied in the plot, since said people usually have an easier time transposing these chords than reading Roman numerals (scale degrees). However, a few chords may have to be manually merged that way (applied/borrowed representations of the same chord, representations of the same chord in different modes).

Indeed… perhaps it would be better if I showed C, G, E etc. I’ve also been debating perhaps not showing 29 chords… Maybe it’s enough to show the main 10 or 15 and then have a “OTHER” category… thoughts?

Also, I can see that 1,2,3,4,5,6,7 = C, dm, em, F, G, am, bo in C scale… but what about the rest of those strange chords? What’s 27 for example? If there’s a place where all these equivalences are laid out, I’d be grateful!

OK, I released it! It’s here:

Lots of people are discovering and loving hooktheory from it… hope your community keeps growing!

Quick question though… on my github I’m storing some semi-crunched data (I figured it didn’t make sense to keep hitting your API with the same queries). What license do you use? I’d like to match that on my repo. Of course, if you prefer, I can delete all your data.


1 Like

Hooktheory only contains about 5000 songs right now, not 25000.

Hrm… I misread. Modifying article accordingly. Any opinion about the license?

Hey, Just saying this is great work. Wow!!

By the way is there a problem with the line from chord 1 to chord 5? it seems to be missing and that is a prominent chord change in the database?

It seems to be missing only from the first chord change, it’s a bit more prominent in the second, and in the third it’s very prominent. It’s hard to make sense of this because since the analysis samples ALL files, it’s a mixture of bridges, intros, instrumentals, choruses, whatever… If there would be a way to seperate out what’s what that would be great, but I think before that, the biggest problem that I can see is the lack of information re: major/minor. If that info could be made availalbe I think this analysis would be much more interesting.