+ /* We never spell simple intervals as inversions. */
+ if (num_degrees == 2)
+ max_inversions = 1;
+
+ for (inversion = 0; inversion < max_inversions; inversion++) {
+ for (i = 0; i < num_degrees; i++) {
+ /* The num_degrees is in the addition just to ensure all
+ * inputs to the modulus operator remain positive. */
+ int index = (i + num_degrees - inversion) % num_degrees;
+
+ /* Again, adding a 12 to keep things positive. */
+ relative_pitches[index] =
+ (12 +
+ _modified_degree_to_half_steps (°rees[i]) -
+ _modified_degree_to_half_steps (°rees[inversion])) % 12;
+
+ }
+
+ for (i = 0; i < num_notes; i++)
+ if (notes[i].relative_pitch != relative_pitches[i])
+ goto NEXT_INVERSION;
+
+ *inversion_ret = inversion;