#define PITCH_NATURAL(literal_name, octave) \
PITCH_LITERAL(literal_name, NATURAL, octave)
+/* PITCH_CLASS is useful for comparing pitches while ignoring any octave. */
+#define PITCH_CLASS(name, accidental) PITCH(name, accidental, 0)
+
+#define PITCH_CLASS_LITERAL(literal_name, literal_accidental) \
+ PITCH_LITERAL(literal_name, literal_accidental, 0)
+
+#define PITCH_NOT_A_PITCH ((pitch_t) -1)
+
typedef enum pitch_accidental
{
PITCH_ACCIDENTAL_DOUBLE_FLAT,
* middle C to the B above middle C).
*/
+/* Get a string representation of a pitch_t value.
+ *
+ * Note: The returned value is static to the pithc_string function and
+ * may be modified by future calls to pitch_string. So the caller
+ * should copy the value if needed. */
+const char *
+pitch_string (pitch_t pitch);
+
+/* Return a new pitch, a number of octaves above 'pitch'
+ *
+ * Note: Maximum octave value is 8. A pitch with octave 8 will not be
+ * raised.
+ */
+pitch_t
+pitch_raise_by_octaves (pitch_t pitch, int octaves);
+
+/* Return a new pitch, a number of octaves below 'pitch'
+ *
+ * Note: Minimum octave value is 9. A pitch with octave 8 will not be
+ * lowered.
+ */
+pitch_t
+pitch_lower_by_octaves (pitch_t pitch, int octaves);
+
#endif /* PITCH_H */