X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=score.h;h=98dd26f89cb9f20f216e84afcd43de872a7e8d5b;hb=f6b8f7f23bb8a4a5b30bfde8242578cca90ddacf;hp=25d558329eb4c05923b924119daac08e8b8041e1;hpb=7e2ab4eb3ab1fc670d9a0150996d682e7f55f183;p=scherzo diff --git a/score.h b/score.h index 25d5583..98dd26f 100644 --- a/score.h +++ b/score.h @@ -28,49 +28,81 @@ typedef struct score score_t; typedef struct score_staff score_staff_t; typedef struct score_note score_note_t; +#define SCORE_PITCH_ACCIDENTAL_MASK 0x07 +#define SCORE_PITCH_ACCIDENTAL_SHIFT 0 + +typedef enum score_pitch_accidental +{ + SCORE_PITCH_ACCIDENTAL_DOUBLE_FLAT, + SCORE_PITCH_ACCIDENTAL_FLAT, + SCORE_PITCH_ACCIDENTAL_NATURAL, + SCORE_PITCH_ACCIDENTAL_SHARP, + SCORE_PITCH_ACCIDENTAL_DOUBLE_SHARP +} score_pitch_accidental_t; + +#define SCORE_PITCH_ACCIDENTAL(pitch) (((pitch) & SCORE_PITCH_ACCIDENTAL_MASK) >> SCORE_PITCH_ACCIDENTAL_SHIFT) + +#define SCORE_PITCH_NAME_MASK 0x38 +#define SCORE_PITCH_NAME_SHIFT 3 + +typedef enum score_pitch_name +{ + SCORE_PITCH_NAME_C = 0 << SCORE_PITCH_NAME_SHIFT, + SCORE_PITCH_NAME_D = 1 << SCORE_PITCH_NAME_SHIFT, + SCORE_PITCH_NAME_E = 2 << SCORE_PITCH_NAME_SHIFT, + SCORE_PITCH_NAME_F = 3 << SCORE_PITCH_NAME_SHIFT, + SCORE_PITCH_NAME_G = 4 << SCORE_PITCH_NAME_SHIFT, + SCORE_PITCH_NAME_A = 5 << SCORE_PITCH_NAME_SHIFT, + SCORE_PITCH_NAME_B = 6 << SCORE_PITCH_NAME_SHIFT +} score_pitch_name_t; + +#define SCORE_PITCH_NAME(pitch) (((pitch) & SCORE_PITCH_NAME_MASK) >> SCORE_PITCH_NAME_SHIFT) + +#define SCORE_PITCH_VALUE(name, accidental) ((SCORE_PITCH_NAME_##name) + (SCORE_PITCH_ACCIDENTAL_##accidental)) + typedef enum score_pitch { - SCORE_PITCH_Aff, - SCORE_PITCH_Af, - SCORE_PITCH_A, - SCORE_PITCH_As, - SCORE_PITCH_Ass, - - SCORE_PITCH_Bff, - SCORE_PITCH_Bf, - SCORE_PITCH_B, - SCORE_PITCH_Bs, - SCORE_PITCH_Bss, - - SCORE_PITCH_Cff, - SCORE_PITCH_Cf, - SCORE_PITCH_C, - SCORE_PITCH_Cs, - SCORE_PITCH_Css, - - SCORE_PITCH_Dff, - SCORE_PITCH_Df, - SCORE_PITCH_D, - SCORE_PITCH_Ds, - SCORE_PITCH_Dss, - - SCORE_PITCH_Eff, - SCORE_PITCH_Ef, - SCORE_PITCH_E, - SCORE_PITCH_Es, - SCORE_PITCH_Ess, - - SCORE_PITCH_Fff, - SCORE_PITCH_Ff, - SCORE_PITCH_F, - SCORE_PITCH_Fs, - SCORE_PITCH_Fss, - - SCORE_PITCH_Gff, - SCORE_PITCH_Gf, - SCORE_PITCH_G, - SCORE_PITCH_Gs, - SCORE_PITCH_Gss + SCORE_PITCH_Aff = SCORE_PITCH_VALUE (A, DOUBLE_FLAT), + SCORE_PITCH_Af = SCORE_PITCH_VALUE (A, FLAT), + SCORE_PITCH_A = SCORE_PITCH_VALUE (A, NATURAL), + SCORE_PITCH_As = SCORE_PITCH_VALUE (A, SHARP), + SCORE_PITCH_Ass = SCORE_PITCH_VALUE (A, DOUBLE_SHARP), + + SCORE_PITCH_Bff = SCORE_PITCH_VALUE (B, DOUBLE_FLAT), + SCORE_PITCH_Bf = SCORE_PITCH_VALUE (B, FLAT), + SCORE_PITCH_B = SCORE_PITCH_VALUE (B, NATURAL), + SCORE_PITCH_Bs = SCORE_PITCH_VALUE (B, SHARP), + SCORE_PITCH_Bss = SCORE_PITCH_VALUE (B, DOUBLE_SHARP), + + SCORE_PITCH_Cff = SCORE_PITCH_VALUE (C, DOUBLE_FLAT), + SCORE_PITCH_Cf = SCORE_PITCH_VALUE (C, FLAT), + SCORE_PITCH_C = SCORE_PITCH_VALUE (C, NATURAL), + SCORE_PITCH_Cs = SCORE_PITCH_VALUE (C, SHARP), + SCORE_PITCH_Css = SCORE_PITCH_VALUE (C, DOUBLE_SHARP), + + SCORE_PITCH_Dff = SCORE_PITCH_VALUE (D, DOUBLE_FLAT), + SCORE_PITCH_Df = SCORE_PITCH_VALUE (D, FLAT), + SCORE_PITCH_D = SCORE_PITCH_VALUE (D, NATURAL), + SCORE_PITCH_Ds = SCORE_PITCH_VALUE (D, SHARP), + SCORE_PITCH_Dss = SCORE_PITCH_VALUE (D, DOUBLE_SHARP), + + SCORE_PITCH_Eff = SCORE_PITCH_VALUE (E, DOUBLE_FLAT), + SCORE_PITCH_Ef = SCORE_PITCH_VALUE (E, FLAT), + SCORE_PITCH_E = SCORE_PITCH_VALUE (E, NATURAL), + SCORE_PITCH_Es = SCORE_PITCH_VALUE (E, SHARP), + SCORE_PITCH_Ess = SCORE_PITCH_VALUE (E, DOUBLE_SHARP), + + SCORE_PITCH_Fff = SCORE_PITCH_VALUE (F, DOUBLE_FLAT), + SCORE_PITCH_Ff = SCORE_PITCH_VALUE (F, FLAT), + SCORE_PITCH_F = SCORE_PITCH_VALUE (F, NATURAL), + SCORE_PITCH_Fs = SCORE_PITCH_VALUE (F, SHARP), + SCORE_PITCH_Fss = SCORE_PITCH_VALUE (F, DOUBLE_SHARP), + + SCORE_PITCH_Gff = SCORE_PITCH_VALUE (G, DOUBLE_FLAT), + SCORE_PITCH_Gf = SCORE_PITCH_VALUE (G, FLAT), + SCORE_PITCH_G = SCORE_PITCH_VALUE (G, NATURAL), + SCORE_PITCH_Gs = SCORE_PITCH_VALUE (G, SHARP), + SCORE_PITCH_Gss = SCORE_PITCH_VALUE (G, DOUBLE_SHARP), } score_pitch_t; typedef enum score_duration @@ -98,7 +130,9 @@ typedef enum score_duration typedef enum score_clef { SCORE_CLEF_G, - SCORE_CLEF_F + SCORE_CLEF_TREBLE = SCORE_CLEF_G, + SCORE_CLEF_F, + SCORE_CLEF_BASS = SCORE_CLEF_F } score_clef_t; /* Allocate a new, empty score object, (with optional ctx as talloc