]> git.cworth.org Git - scherzo/commitdiff
Put all chord signatures into a single array
authorCarl Worth <cworth@cworth.org>
Fri, 27 Sep 2013 05:36:00 +0000 (22:36 -0700)
committerCarl Worth <cworth@cworth.org>
Fri, 27 Sep 2013 05:36:00 +0000 (22:36 -0700)
This simplifies the code quite a bit. Instead of a big switch
statement based on number of notes in the chord, with each case a
nearly-identical for loop, we can have one single for loop for all
signatures.

More importantly, this means that after the for loop has matched a
signature, we can have a single variable pointing to the matching
signature. That will be important for using the signature to guide in
spelling the chord correctly, which we hope to do soon.

scherzo.c

index 671d354a49ed56b5d628dae154e4f71d36fb7223..ac301ea5638e6a003c71c71018c738500236a6c0 100644 (file)
--- a/scherzo.c
+++ b/scherzo.c
@@ -616,6 +616,154 @@ _pitch_str (score_pitch_t pitch)
     exit (1);
 }
 
+typedef struct chord_signature
+{
+    int num_degrees;
+    modified_degree_t degrees[MAX_DEGREES];
+    const char *name;
+} chord_signature_t;
+
+/* XXX: The superscript rise value should be relative to the current
+ * font size. Best would be for pango to support this. See:
+ *
+ * https://bugzilla.gnome.org/show_bug.cgi?id=708780
+ *
+ * For now, these are emipirically-derived values that look reasonable
+ * at the default size that score.c is using to draw the staff. If the
+ * user scales the staff up or down then these will look wrong.
+ */
+
+#define SUP "<span font='33' rise='30000'>"
+#define PUS "</span>"
+
+chord_signature_t signatures[] = {
+    /* Octave */
+    { 1, {{1, 0}}, "P8" },
+
+    /* Intervals */
+    { 2, {{1, 0}, {2, -1}}, "m2" },
+    { 2, {{1, 0}, {2,  0}}, "M2" },
+    { 2, {{1, 0}, {3, -1}}, "m3" },
+    { 2, {{1, 0}, {3,  0}}, "M3" },
+    { 2, {{1, 0}, {4,  0}}, "P4" },
+    { 2, {{1, 0}, {5, -1}}, "Tri-tone" },
+    { 2, {{1, 0}, {5,  0}}, "P5" },
+    { 2, {{1, 0}, {6, -1}}, "m6" },
+    { 2, {{1, 0}, {6,  0}}, "M6" },
+    { 2, {{1, 0}, {7, -1}}, "m7" },
+    { 2, {{1, 0}, {7,  0}}, "M7" },
+
+    /* Triads */
+    { 3, {{1, 0}, {3, +1}, {5,  0}}, "sus" },
+    { 3, {{1, 0}, {3,  0}, {5, +1}}, SUP "+" PUS },
+    { 3, {{1, 0}, {3,  0}, {5,  0}}, "" },
+    { 3, {{1, 0}, {3, -1}, {5,  0}}, "m" },
+    { 3, {{1, 0}, {3, -1}, {5, -1}}, "°" },
+    { 3, {{1, 0}, {2,  0}, {5,  0}}, "msus2" },
+
+    /* Seventh chords with no 3rd */
+    { 3, {{1, 0}, {5, +1}, {7,  0}}, SUP "+M7" PUS },
+    { 3, {{1, 0}, {5, +1}, {7, -1}}, SUP "+7" PUS },
+    { 3, {{1, 0}, {5,  0}, {7,  0}}, "M7" },
+    { 3, {{1, 0}, {5,  0}, {7, -1}}, "7" },
+    { 3, {{1, 0}, {5, -1}, {7, -1}}, "7♭5" },
+
+    /* Seventh chords with no 5th */
+    { 3, {{1, 0}, {4,  0}, {7,  0}}, "M7sus" },
+    { 3, {{1, 0}, {4,  0}, {7, -1}}, "7sus" },
+    { 3, {{1, 0}, {3,  0}, {7,  0}}, "M7" },
+    { 3, {{1, 0}, {3,  0}, {7, -1}}, "7" },
+    { 3, {{1, 0}, {3, -1}, {7,  0}}, "m" SUP "M7" PUS },
+    { 3, {{1, 0}, {3, -1}, {7, -1}}, "m7" },
+    { 3, {{1, 0}, {2,  0}, {7,  0}}, "m" SUP "M7" PUS "sus2" },
+    { 3, {{1, 0}, {2,  0}, {7, -1}}, "m7sus2" },
+
+    /* Sixth chords */
+    { 4, {{1, 0}, {4,  0}, {5,  0}, {6,  0}}, "6sus" },
+    { 4, {{1, 0}, {3,  0}, {5,  0}, {6,  0}}, "6" }, /* Ambiguous with m7 */
+    { 4, {{1, 0}, {3, -1}, {5,  0}, {6,  0}}, "m6" },
+    { 4, {{1, 0}, {2,  0}, {5,  0}, {6,  0}}, "m6sus2" },
+
+    /* Seventh chords */
+    { 4, {{1, 0}, {4,  0}, {5, +1}, {7,  0}}, SUP "+M7" PUS "sus" },
+    { 4, {{1, 0}, {4,  0}, {5, +1}, {7, -1}}, SUP "+7" PUS "sus" },
+    { 4, {{1, 0}, {4,  0}, {5,  0}, {7,  0}}, "M7sus" },
+    { 4, {{1, 0}, {4,  0}, {5,  0}, {7, -1}}, "7sus" },
+    { 4, {{1, 0}, {4,  0}, {5, -1}, {7, -1}}, "7♭5sus" },
+    { 4, {{1, 0}, {3,  0}, {5, +1}, {7,  0}}, SUP "+M7" PUS },
+    { 4, {{1, 0}, {3,  0}, {5, +1}, {7, -1}}, SUP "+7" PUS },
+    { 4, {{1, 0}, {3,  0}, {5,  0}, {7,  0}}, "M7" },
+    { 4, {{1, 0}, {3,  0}, {5,  0}, {7, -1}}, "7" },
+    { 4, {{1, 0}, {3,  0}, {5, -1}, {7, -1}}, "7♭5" },
+    { 4, {{1, 0}, {3, -1}, {5,  0}, {7,  0}}, "m" SUP "M7" PUS },
+    { 4, {{1, 0}, {3, -1}, {5,  0}, {7, -1}}, "m7" },
+    { 4, {{1, 0}, {3, -1}, {5, -1}, {7,  0}}, "°" SUP "M7" PUS },
+    { 4, {{1, 0}, {3, -1}, {5, -1}, {7, -1}}, "𝆩" SUP "7" PUS },
+    { 4, {{1, 0}, {3, -1}, {5, -1}, {7, -2}}, "°" SUP "7" PUS },
+    { 4, {{1, 0}, {2,  0}, {5,  0}, {7,  0}}, "m" SUP "M7" PUS "sus2" },
+    { 4, {{1, 0}, {2,  0}, {5,  0}, {7, -1}}, "m7sus2" },
+    { 4, {{1, 0}, {2,  0}, {5, -1}, {7,  0}}, "°" SUP "M7" PUS "sus2" },
+    { 4, {{1, 0}, {2,  0}, {5, -1}, {7, -1}}, "𝆩" SUP "7" PUS "sus2" },
+    { 4, {{1, 0}, {2,  0}, {5, -1}, {7, -2}}, "°" SUP "7" PUS "sus2" }, /* Ambiguous with 7 */
+
+    /* The sorting for chords with degree higher than 9 is funny
+     * to keep the array in degree order after reducing each
+     * degree to an actual scale degree, (9 -> 2, 11 -> 4, 13 ->
+     * 6) */
+
+    /* Ninth chords voiced with no 5th */
+    { 4, {{1, 0}, {9,  0}, {4,  0}, {7,  0}}, "M9sus" },
+    { 4, {{1, 0}, {9,  0}, {4,  0}, {7, -1}}, "9sus" },
+    { 4, {{1, 0}, {9,  0}, {3,  0}, {7,  0}}, "M9" },
+    { 4, {{1, 0}, {9,  0}, {3,  0}, {7, -1}}, "9" },
+    { 4, {{1, 0}, {9,  0}, {3, -1}, {7,  0}}, "m" SUP "M9" PUS },
+    { 4, {{1, 0}, {9,  0}, {3, -1}, {7, -1}}, "m9" },
+    { 4, {{1, 0}, {9, -1}, {3, -1}, {7, -1}}, "m♭9" },
+    { 4, {{1, 0}, {9,  0}, {3, -1}, {6,  0}}, "m6/9" },
+    { 4, {{1, 0}, {9, -1}, {3, -1}, {6,  0}}, "m6/♭9" },
+
+    /* Sixth plus 9 */
+    { 5, {{1, 0}, {9,  0}, {3,  0}, {5,  0}, {6,  0}}, "6/9" },
+    { 5, {{1, 0}, {9,  0}, {3, -1}, {5,  0}, {6,  0}}, "m6/9" },
+    { 5, {{1, 0}, {9, -1}, {3, -1}, {5,  0}, {6,  0}}, "m6/♭9" },
+
+    /* Seventh plus altered 9 */
+    { 5, {{1, 0}, {9, +1}, {3,  0}, {5,  0}, {7, -1}}, "7♯9" },
+    { 5, {{1, 0}, {9, -1}, {3,  0}, {5,  0}, {7, -1}}, "7♭9" },
+    { 5, {{1, 0}, {9, +1}, {3,  0}, {5, -1}, {7, -1}}, "7♭5♯9" },
+    { 5, {{1, 0}, {9, -1}, {3,  0}, {5, -1}, {7, -1}}, "7♭5♭9" },
+
+    /* Ninth chords */
+    { 5, {{1, 0}, {9,  0}, {4,  0}, {5, +1}, {7,  0}}, SUP "+M9" PUS "sus" },
+    { 5, {{1, 0}, {9,  0}, {4,  0}, {5, +1}, {7, -1}}, SUP "+9" PUS "sus" },
+    { 5, {{1, 0}, {9,  0}, {4,  0}, {5,  0}, {7,  0}}, "M9sus" },
+    { 5, {{1, 0}, {9,  0}, {4,  0}, {5,  0}, {7, -1}}, "9sus" },
+    { 5, {{1, 0}, {9,  0}, {3,  0}, {5, +1}, {7,  0}}, SUP "+M9" PUS },
+    { 5, {{1, 0}, {9,  0}, {3,  0}, {5, +1}, {7, -1}}, SUP "+9" PUS },
+    { 5, {{1, 0}, {9,  0}, {3,  0}, {5,  0}, {7,  0}}, "M9" },
+    { 5, {{1, 0}, {9,  0}, {3,  0}, {5,  0}, {7, -1}}, "9" },
+    { 5, {{1, 0}, {9,  0}, {3, -1}, {5,  0}, {7,  0}}, "m" SUP "M9" PUS },
+    { 5, {{1, 0}, {9,  0}, {3, -1}, {5,  0}, {7, -1}}, "m9" },
+    { 5, {{1, 0}, {9, -1}, {3, -1}, {5,  0}, {7, -1}}, "m♭9" },
+    { 5, {{1, 0}, {9,  0}, {3,  0}, {5, -1}, {7,  0}}, "M9" SUP "♭5" PUS },
+    { 5, {{1, 0}, {9,  0}, {3,  0}, {5, -1}, {7, -1}}, "9" SUP "♭5" PUS },
+    { 5, {{1, 0}, {9,  0}, {3, -1}, {5, -1}, {7,  0}}, "m" SUP "M9♭5" PUS },
+    { 5, {{1, 0}, {9,  0}, {3, -1}, {5, -1}, {7, -1}}, "𝆩" SUP "9" PUS },
+    { 5, {{1, 0}, {9, -1}, {3, -1}, {5, -1}, {7, -1}}, "𝆩" SUP "♭9" PUS },
+    { 5, {{1, 0}, {9,  0}, {3, -1}, {5, -1}, {7, -2}}, "°" SUP "9" PUS },
+    { 5, {{1, 0}, {9, -1}, {3, -1}, {5, -1}, {7, -2}}, "°" SUP "♭9" PUS },
+
+    /* Eleventh chords */
+    { 6, {{1, 0}, {9,  0}, {3,  0}, {11,  0}, {5, +1}, {7,  0}}, SUP "+M11" PUS },
+    { 6, {{1, 0}, {9,  0}, {3,  0}, {11,  0}, {5, +1}, {7, -1}}, SUP "+11" PUS },
+    { 6, {{1, 0}, {9,  0}, {3,  0}, {11,  0}, {5,  0}, {7,  0}}, "M11" },
+    { 6, {{1, 0}, {9,  0}, {3,  0}, {11,  0}, {5,  0}, {7, -1}}, "11" },
+    { 6, {{1, 0}, {9,  0}, {3, -1}, {11,  0}, {5,  0}, {7,  0}}, "m" SUP "M11" PUS },
+    { 6, {{1, 0}, {9,  0}, {3, -1}, {11,  0}, {5,  0}, {7, -1}}, "m11" },
+    { 6, {{1, 0}, {9, -1}, {3, -1}, {11,  0}, {5, -1}, {7, -1}}, "𝆩" SUP "11" PUS },
+    { 6, {{1, 0}, {9, -1}, {3, -1}, {11, -1}, {5, -1}, {7, -2}}, "°" SUP "11" PUS }
+};
+
 static void
 scherzo_analyze_chord (scherzo_t *scherzo)
 {
@@ -634,148 +782,6 @@ scherzo_analyze_chord (scherzo_t *scherzo)
 
     num_notes = note_group->num_notes;
 
-    struct { modified_degree_t degrees[1]; const char *name; } octaves[] = {
-       { {{1, 0}}, "P8" }
-    };
-
-    struct { modified_degree_t degrees[2]; const char *name; } intervals[] = {
-       { {{1, 0}, {2, -1}}, "m2" },
-       { {{1, 0}, {2,  0}}, "M2" },
-       { {{1, 0}, {3, -1}}, "m3" },
-       { {{1, 0}, {3,  0}}, "M3" },
-       { {{1, 0}, {4,  0}}, "P4" },
-       { {{1, 0}, {5, -1}}, "Tri-tone" },
-       { {{1, 0}, {5,  0}}, "P5" },
-       { {{1, 0}, {6, -1}}, "m6" },
-       { {{1, 0}, {6,  0}}, "M6" },
-       { {{1, 0}, {7, -1}}, "m7" },
-       { {{1, 0}, {7,  0}}, "M7" }
-    };
-
-/* XXX: The superscript rise value should be relative to the current
- * font size. Best would be for pango to support this. See:
- *
- * https://bugzilla.gnome.org/show_bug.cgi?id=708780
- *
- * For now, these are emipirically-derived values that look reasonable
- * at the default size that score.c is using to draw the staff. If the
- * user scales the staff up or down then these will look wrong.
- */
-
-#define SUP "<span font='33' rise='30000'>"
-#define PUS "</span>"
-
-    struct { modified_degree_t degrees[3]; const char *name; } trichords[] = {
-       /* Triads */
-       { {{1, 0}, {3, +1}, {5,  0}}, "sus" },
-       { {{1, 0}, {3,  0}, {5, +1}}, SUP "+" PUS },
-       { {{1, 0}, {3,  0}, {5,  0}}, "" },
-       { {{1, 0}, {3, -1}, {5,  0}}, "m" },
-       { {{1, 0}, {3, -1}, {5, -1}}, "°" },
-       { {{1, 0}, {2,  0}, {5,  0}}, "msus2" },
-       /* Seventh chords with no 3rd */
-       { {{1, 0}, {5, +1}, {7,  0}}, SUP "+M7" PUS },
-       { {{1, 0}, {5, +1}, {7, -1}}, SUP "+7" PUS },
-       { {{1, 0}, {5,  0}, {7,  0}}, "M7" },
-       { {{1, 0}, {5,  0}, {7, -1}}, "7" },
-       { {{1, 0}, {5, -1}, {7, -1}}, "7♭5" },
-       /* Seventh chords with no 5th */
-       { {{1, 0}, {4,  0}, {7,  0}}, "M7sus" },
-       { {{1, 0}, {4,  0}, {7, -1}}, "7sus" },
-       { {{1, 0}, {3,  0}, {7,  0}}, "M7" },
-       { {{1, 0}, {3,  0}, {7, -1}}, "7" },
-       { {{1, 0}, {3, -1}, {7,  0}}, "m" SUP "M7" PUS },
-       { {{1, 0}, {3, -1}, {7, -1}}, "m7" },
-       { {{1, 0}, {2,  0}, {7,  0}}, "m" SUP "M7" PUS "sus2" },
-       { {{1, 0}, {2,  0}, {7, -1}}, "m7sus2" },
-    };
-
-    struct { modified_degree_t degrees[4]; const char *name; } tetrachords[] = {
-       /* Sixth chords */
-       { {{1, 0}, {4,  0}, {5,  0}, {6,  0}}, "6sus" },
-       { {{1, 0}, {3,  0}, {5,  0}, {6,  0}}, "6" }, /* Ambiguous with m7 */
-       { {{1, 0}, {3, -1}, {5,  0}, {6,  0}}, "m6" },
-       { {{1, 0}, {2,  0}, {5,  0}, {6,  0}}, "m6sus2" },
-       /* Seventh chords */
-       { {{1, 0}, {4,  0}, {5, +1}, {7,  0}}, SUP "+M7" PUS "sus" },
-       { {{1, 0}, {4,  0}, {5, +1}, {7, -1}}, SUP "+7" PUS "sus" },
-       { {{1, 0}, {4,  0}, {5,  0}, {7,  0}}, "M7sus" },
-       { {{1, 0}, {4,  0}, {5,  0}, {7, -1}}, "7sus" },
-       { {{1, 0}, {4,  0}, {5, -1}, {7, -1}}, "7♭5sus" },
-       { {{1, 0}, {3,  0}, {5, +1}, {7,  0}}, SUP "+M7" PUS },
-       { {{1, 0}, {3,  0}, {5, +1}, {7, -1}}, SUP "+7" PUS },
-       { {{1, 0}, {3,  0}, {5,  0}, {7,  0}}, "M7" },
-       { {{1, 0}, {3,  0}, {5,  0}, {7, -1}}, "7" },
-       { {{1, 0}, {3,  0}, {5, -1}, {7, -1}}, "7♭5" },
-       { {{1, 0}, {3, -1}, {5,  0}, {7,  0}}, "m" SUP "M7" PUS },
-       { {{1, 0}, {3, -1}, {5,  0}, {7, -1}}, "m7" },
-       { {{1, 0}, {3, -1}, {5, -1}, {7,  0}}, "°" SUP "M7" PUS },
-       { {{1, 0}, {3, -1}, {5, -1}, {7, -1}}, "𝆩" SUP "7" PUS },
-       { {{1, 0}, {3, -1}, {5, -1}, {7, -2}}, "°" SUP "7" PUS },
-       { {{1, 0}, {2,  0}, {5,  0}, {7,  0}}, "m" SUP "M7" PUS "sus2" },
-       { {{1, 0}, {2,  0}, {5,  0}, {7, -1}}, "m7sus2" },
-       { {{1, 0}, {2,  0}, {5, -1}, {7,  0}}, "°" SUP "M7" PUS "sus2" },
-       { {{1, 0}, {2,  0}, {5, -1}, {7, -1}}, "𝆩" SUP "7" PUS "sus2" },
-       { {{1, 0}, {2,  0}, {5, -1}, {7, -2}}, "°" SUP "7" PUS "sus2" }, /* Ambiguous with 7 */
-       /* Ninth chords voiced with no 5th */
-       { {{1, 0}, {9,  0}, {4,  0}, {7,  0}}, "M9sus" },
-       { {{1, 0}, {9,  0}, {4,  0}, {7, -1}}, "9sus" },
-       { {{1, 0}, {9,  0}, {3,  0}, {7,  0}}, "M9" },
-       { {{1, 0}, {9,  0}, {3,  0}, {7, -1}}, "9" },
-       { {{1, 0}, {9,  0}, {3, -1}, {7,  0}}, "m" SUP "M9" PUS },
-       { {{1, 0}, {9,  0}, {3, -1}, {7, -1}}, "m9" },
-       { {{1, 0}, {9, -1}, {3, -1}, {7, -1}}, "m♭9" },
-       { {{1, 0}, {9,  0}, {3, -1}, {6,  0}}, "m6/9" },
-       { {{1, 0}, {9, -1}, {3, -1}, {6,  0}}, "m6/♭9" },
-    };
-
-    /* The sorting here is funny to keep the array in degree order
-     * after reducing each degree to an actual scale degree, (9 -> 2,
-     * 11 -> 4, 13 -> 6) */
-    struct { modified_degree_t degrees[5]; const char *name; } pentachords[] = {
-       /* Sixth plus 9 */
-       { {{1, 0}, {9,  0}, {3,  0}, {5,  0}, {6,  0}}, "6/9" },
-       { {{1, 0}, {9,  0}, {3, -1}, {5,  0}, {6,  0}}, "m6/9" },
-       { {{1, 0}, {9, -1}, {3, -1}, {5,  0}, {6,  0}}, "m6/♭9" },
-       /* Seventh plus altered 9 */
-       { {{1, 0}, {9, +1}, {3,  0}, {5,  0}, {7, -1}}, "7♯9" },
-       { {{1, 0}, {9, -1}, {3,  0}, {5,  0}, {7, -1}}, "7♭9" },
-       { {{1, 0}, {9, +1}, {3,  0}, {5, -1}, {7, -1}}, "7♭5♯9" },
-       { {{1, 0}, {9, -1}, {3,  0}, {5, -1}, {7, -1}}, "7♭5♭9" },
-       /* Ninth chords */
-       { {{1, 0}, {9,  0}, {4,  0}, {5, +1}, {7,  0}}, SUP "+M9" PUS "sus" },
-       { {{1, 0}, {9,  0}, {4,  0}, {5, +1}, {7, -1}}, SUP "+9" PUS "sus" },
-       { {{1, 0}, {9,  0}, {4,  0}, {5,  0}, {7,  0}}, "M9sus" },
-       { {{1, 0}, {9,  0}, {4,  0}, {5,  0}, {7, -1}}, "9sus" },
-
-       { {{1, 0}, {9,  0}, {3,  0}, {5, +1}, {7,  0}}, SUP "+M9" PUS },
-       { {{1, 0}, {9,  0}, {3,  0}, {5, +1}, {7, -1}}, SUP "+9" PUS },
-
-       { {{1, 0}, {9,  0}, {3,  0}, {5,  0}, {7,  0}}, "M9" },
-       { {{1, 0}, {9,  0}, {3,  0}, {5,  0}, {7, -1}}, "9" },
-       { {{1, 0}, {9,  0}, {3, -1}, {5,  0}, {7,  0}}, "m" SUP "M9" PUS },
-       { {{1, 0}, {9,  0}, {3, -1}, {5,  0}, {7, -1}}, "m9" },
-       { {{1, 0}, {9, -1}, {3, -1}, {5,  0}, {7, -1}}, "m♭9" },
-       { {{1, 0}, {9,  0}, {3,  0}, {5, -1}, {7,  0}}, "M9" SUP "♭5" PUS },
-       { {{1, 0}, {9,  0}, {3,  0}, {5, -1}, {7, -1}}, "9" SUP "♭5" PUS },
-       { {{1, 0}, {9,  0}, {3, -1}, {5, -1}, {7,  0}}, "m" SUP "M9♭5" PUS },
-       { {{1, 0}, {9,  0}, {3, -1}, {5, -1}, {7, -1}}, "𝆩" SUP "9" PUS },
-       { {{1, 0}, {9, -1}, {3, -1}, {5, -1}, {7, -1}}, "𝆩" SUP "♭9" PUS },
-       { {{1, 0}, {9,  0}, {3, -1}, {5, -1}, {7, -2}}, "°" SUP "9" PUS },
-       { {{1, 0}, {9, -1}, {3, -1}, {5, -1}, {7, -2}}, "°" SUP "♭9" PUS },
-    };
-
-    struct { modified_degree_t degrees[6]; const char *name; } hexachords[] = {
-       { {{1, 0}, {9,  0}, {3,  0}, {11,  0}, {5, +1}, {7,  0}}, SUP "+M11" PUS },
-       { {{1, 0}, {9,  0}, {3,  0}, {11,  0}, {5, +1}, {7, -1}}, SUP "+11" PUS },
-       { {{1, 0}, {9,  0}, {3,  0}, {11,  0}, {5,  0}, {7,  0}}, "M11" },
-       { {{1, 0}, {9,  0}, {3,  0}, {11,  0}, {5,  0}, {7, -1}}, "11" },
-       { {{1, 0}, {9,  0}, {3, -1}, {11,  0}, {5,  0}, {7,  0}}, "m" SUP "M11" PUS },
-       { {{1, 0}, {9,  0}, {3, -1}, {11,  0}, {5,  0}, {7, -1}}, "m11" },
-       { {{1, 0}, {9, -1}, {3, -1}, {11,  0}, {5, -1}, {7, -1}}, "𝆩" SUP "11" PUS },
-       { {{1, 0}, {9, -1}, {3, -1}, {11, -1}, {5, -1}, {7, -2}}, "°" SUP "11" PUS }
-    };
-
     if (scherzo->chord) {
        score_remove_chord (scherzo->chord);
        scherzo->chord = NULL;
@@ -839,73 +845,15 @@ scherzo_analyze_chord (scherzo_t *scherzo)
     }
 
     for (inversion = 0; inversion < 4; inversion++) {
-       switch (num_notes) {
-       case 1:
-           for (i = 0; i < ARRAY_SIZE (octaves); i++) {
-               if (_chord_signature_matches (notes, num_notes,
-                                             octaves[i].degrees, 1,
-                                             inversion, &root))
-               {
-                   chord_name = octaves[i].name;
-                   goto CHORD_NAME_KNOWN;
-               }
+       for (i = 0; i < ARRAY_SIZE (signatures); i++) {
+           if (_chord_signature_matches (notes, num_notes,
+                                         signatures[i].degrees,
+                                         signatures[i].num_degrees,
+                                         inversion, &root))
+           {
+               chord_name = signatures[i].name;
+               goto CHORD_NAME_KNOWN;
            }
-           break;
-       case 2:
-           for (i = 0; i < ARRAY_SIZE (intervals); i++) {
-               if (_chord_signature_matches (notes, num_notes,
-                                             intervals[i].degrees, 2,
-                                             inversion, &root))
-               {
-                   chord_name = intervals[i].name;
-                   goto CHORD_NAME_KNOWN;
-               }
-           }
-           break;
-       case 3:
-           for (i = 0; i < ARRAY_SIZE (trichords); i++) {
-               if (_chord_signature_matches (notes, num_notes,
-                                             trichords[i].degrees, 3,
-                                             inversion, &root))
-               {
-                   chord_name = trichords[i].name;
-                   goto CHORD_NAME_KNOWN;
-               }
-           }
-           break;
-       case 4:
-           for (i = 0; i < ARRAY_SIZE (tetrachords); i++) {
-               if (_chord_signature_matches (notes, num_notes,
-                                             tetrachords[i].degrees, 4,
-                                             inversion, &root))
-               {
-                   chord_name = tetrachords[i].name;
-                   goto CHORD_NAME_KNOWN;
-               }
-           }
-           break;
-       case 5:
-           for (i = 0; i < ARRAY_SIZE (pentachords); i++) {
-               if (_chord_signature_matches (notes, num_notes,
-                                             pentachords[i].degrees, 5,
-                                             inversion, &root))
-               {
-                   chord_name = pentachords[i].name;
-                   goto CHORD_NAME_KNOWN;
-               }
-           }
-           break;
-       case 6:
-           for (i = 0; i < ARRAY_SIZE (hexachords); i++) {
-               if (_chord_signature_matches (notes, num_notes,
-                                             hexachords[i].degrees, 6,
-                                             inversion, &root))
-               {
-                   chord_name = hexachords[i].name;
-                   goto CHORD_NAME_KNOWN;
-               }
-           }
-           break;
        }
     }
     CHORD_NAME_KNOWN: