A user recently noticed that the highest key on the piano (A8) was
showing up as A0 in scherzo, (the lowest note on the piano). The bug
was that scherzo was using only 3 bits for the octave number, which
obviously only covers the range [0:7].
ISO octave numbers, (and the octave numbers needed for a piano), are
the range [0:8]. So adding one bit to the octave storage does the
trick here.
#define PITCH_NAME_MASK (0x07 << PITCH_NAME_SHIFT)
#define PITCH_OCTAVE_SHIFT (6)
-#define PITCH_OCTAVE_MASK (0x07 << PITCH_OCTAVE_SHIFT)
+#define PITCH_OCTAVE_MASK (0x0F << PITCH_OCTAVE_SHIFT)
#define PITCH_ACCIDENTAL(pitch) \
(((pitch) & PITCH_ACCIDENTAL_MASK) >> PITCH_ACCIDENTAL_SHIFT)