X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;ds=sidebyside;f=pitch.h;h=657e8fe07f8f291f1a4846c4cf0e596f1f2cdf7d;hb=e77d712bf9f99c3d95f909621ae177b9f8175163;hp=525f14c8ae5038426bfe97c0c879ee8c67a3d637;hpb=659845dcf5781c10a2b292f0b7f6fe372874ff8a;p=scherzo diff --git a/pitch.h b/pitch.h index 525f14c..657e8fe 100644 --- a/pitch.h +++ b/pitch.h @@ -23,8 +23,36 @@ #ifndef PITCH_H #define PITCH_H -#define PITCH_ACCIDENTAL_MASK 0x07 -#define PITCH_ACCIDENTAL_SHIFT 0 +typedef uint32_t pitch_t; + +#define PITCH_ACCIDENTAL_SHIFT (0) +#define PITCH_ACCIDENTAL_MASK (0x07 << PITCH_ACCIDENTAL_SHIFT) + +#define PITCH_NAME_SHIFT (3) +#define PITCH_NAME_MASK (0x07 << PITCH_NAME_SHIFT) + +#define PITCH_OCTAVE_SHIFT (6) +#define PITCH_OCTAVE_MASK (0x07 << PITCH_OCTAVE_SHIFT) + +#define PITCH_ACCIDENTAL(pitch) \ + (((pitch) & PITCH_ACCIDENTAL_MASK) >> PITCH_ACCIDENTAL_SHIFT) +#define PITCH_NAME(pitch) \ + (((pitch) & PITCH_NAME_MASK) >> PITCH_NAME_SHIFT) +#define PITCH_OCTAVE(pitch) \ + (((pitch) & PITCH_OCTAVE_MASK) >> PITCH_OCTAVE_SHIFT) + +#define PITCH(name, accidental, octave) \ + (((octave) << PITCH_OCTAVE_SHIFT) | \ + ((name) << PITCH_NAME_SHIFT) | \ + ((accidental) << PITCH_ACCIDENTAL_SHIFT)) + +#define PITCH_LITERAL(literal_name, literal_accidental, octave) \ + PITCH(PITCH_NAME_##literal_name, \ + PITCH_ACCIDENTAL_##literal_accidental, \ + octave) + +#define PITCH_NATURAL(literal_name, octave) \ + PITCH_LITERAL(literal_name, NATURAL, octave) typedef enum pitch_accidental { @@ -35,11 +63,6 @@ typedef enum pitch_accidental PITCH_ACCIDENTAL_DOUBLE_SHARP } pitch_accidental_t; -#define PITCH_ACCIDENTAL(pitch) (((pitch) & PITCH_ACCIDENTAL_MASK) >> PITCH_ACCIDENTAL_SHIFT) - -#define PITCH_NAME_MASK 0x38 -#define PITCH_NAME_SHIFT 3 - typedef enum pitch_name { PITCH_NAME_C, @@ -51,13 +74,8 @@ typedef enum pitch_name PITCH_NAME_B, } pitch_name_t; -#define PITCH_NAME(pitch) (((pitch) & PITCH_NAME_MASK) >> PITCH_NAME_SHIFT) - -#define PITCH(name, accidental) (((name) << PITCH_NAME_SHIFT) | (accidental)) - -#define PITCH_LITERAL(literal_name, literal_accidental) PITCH(PITCH_NAME_##literal_name, PITCH_ACCIDENTAL_##literal_accidental) -#define PITCH_NATURAL(literal_name) PITCH_LITERAL(literal_name, NATURAL) - -typedef uint32_t pitch_t; +/* Octave numbers are ISO octave numbers [0:8], (so Octave 4 is from + * middle C to the B above middle C). + */ #endif /* PITCH_H */