diff options
Diffstat (limited to 'quantum/audio/muse.c')
-rw-r--r-- | quantum/audio/muse.c | 137 |
1 files changed, 41 insertions, 96 deletions
diff --git a/quantum/audio/muse.c b/quantum/audio/muse.c index f3cb592d81..01b95671fd 100644 --- a/quantum/audio/muse.c +++ b/quantum/audio/muse.c @@ -1,111 +1,56 @@ #include "muse.h" -enum { - MUSE_OFF, - MUSE_ON, - MUSE_C_1_2, - MUSE_C1, - MUSE_C2, - MUSE_C4, - MUSE_C8, - MUSE_C3, - MUSE_C6, - MUSE_B1, - MUSE_B2, - MUSE_B3, - MUSE_B4, - MUSE_B5, - MUSE_B6, - MUSE_B7, - MUSE_B8, - MUSE_B9, - MUSE_B10, - MUSE_B11, - MUSE_B12, - MUSE_B13, - MUSE_B14, - MUSE_B15, - MUSE_B16, - MUSE_B17, - MUSE_B18, - MUSE_B19, - MUSE_B20, - MUSE_B21, - MUSE_B22, - MUSE_B23, - MUSE_B24, - MUSE_B25, - MUSE_B26, - MUSE_B27, - MUSE_B28, - MUSE_B29, - MUSE_B30, - MUSE_B31 -}; +enum { MUSE_OFF, MUSE_ON, MUSE_C_1_2, MUSE_C1, MUSE_C2, MUSE_C4, MUSE_C8, MUSE_C3, MUSE_C6, MUSE_B1, MUSE_B2, MUSE_B3, MUSE_B4, MUSE_B5, MUSE_B6, MUSE_B7, MUSE_B8, MUSE_B9, MUSE_B10, MUSE_B11, MUSE_B12, MUSE_B13, MUSE_B14, MUSE_B15, MUSE_B16, MUSE_B17, MUSE_B18, MUSE_B19, MUSE_B20, MUSE_B21, MUSE_B22, MUSE_B23, MUSE_B24, MUSE_B25, MUSE_B26, MUSE_B27, MUSE_B28, MUSE_B29, MUSE_B30, MUSE_B31 }; -bool number_of_ones_to_bool[16] = { - 1, 0, 0, 1, 0, 1, 1, 0, - 0, 1, 1, 0, 1, 0, 0, 1 -}; +bool number_of_ones_to_bool[16] = {1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1}; -uint8_t muse_interval[4] = {MUSE_B7, MUSE_B19, MUSE_B3, MUSE_B28}; +uint8_t muse_interval[4] = {MUSE_B7, MUSE_B19, MUSE_B3, MUSE_B28}; uint8_t muse_theme[4] = {MUSE_B8, MUSE_B23, MUSE_B18, MUSE_B17}; -bool muse_timer_1bit = 0; -uint8_t muse_timer_2bit = 0; -uint8_t muse_timer_2bit_counter = 0; -uint8_t muse_timer_4bit = 0; -uint32_t muse_timer_31bit = 0; +bool muse_timer_1bit = 0; +uint8_t muse_timer_2bit = 0; +uint8_t muse_timer_2bit_counter = 0; +uint8_t muse_timer_4bit = 0; +uint32_t muse_timer_31bit = 0; bool bit_for_value(uint8_t value) { - switch (value) { - case MUSE_OFF: - return 0; - case MUSE_ON: - return 1; - case MUSE_C_1_2: - return muse_timer_1bit; - case MUSE_C1: - return (muse_timer_4bit & 1); - case MUSE_C2: - return (muse_timer_4bit & 2); - case MUSE_C4: - return (muse_timer_4bit & 4); - case MUSE_C8: - return (muse_timer_4bit & 8); - case MUSE_C3: - return (muse_timer_2bit & 1); - case MUSE_C6: - return (muse_timer_2bit & 2); - default: - return muse_timer_31bit & (1UL << (value - MUSE_B1)); - } + switch (value) { + case MUSE_OFF: + return 0; + case MUSE_ON: + return 1; + case MUSE_C_1_2: + return muse_timer_1bit; + case MUSE_C1: + return (muse_timer_4bit & 1); + case MUSE_C2: + return (muse_timer_4bit & 2); + case MUSE_C4: + return (muse_timer_4bit & 4); + case MUSE_C8: + return (muse_timer_4bit & 8); + case MUSE_C3: + return (muse_timer_2bit & 1); + case MUSE_C6: + return (muse_timer_2bit & 2); + default: + return muse_timer_31bit & (1UL << (value - MUSE_B1)); + } } uint8_t muse_clock_pulse(void) { - - bool top = number_of_ones_to_bool[ - bit_for_value(muse_theme[0]) + - (bit_for_value(muse_theme[1]) << 1) + - (bit_for_value(muse_theme[2]) << 2) + - (bit_for_value(muse_theme[3]) << 3) - ]; - - if (muse_timer_1bit == 0) { - if (muse_timer_2bit_counter == 0) { - muse_timer_2bit = (muse_timer_2bit + 1) % 4; + bool top = number_of_ones_to_bool[bit_for_value(muse_theme[0]) + (bit_for_value(muse_theme[1]) << 1) + (bit_for_value(muse_theme[2]) << 2) + (bit_for_value(muse_theme[3]) << 3)]; + + if (muse_timer_1bit == 0) { + if (muse_timer_2bit_counter == 0) { + muse_timer_2bit = (muse_timer_2bit + 1) % 4; + } + muse_timer_2bit_counter = (muse_timer_2bit_counter + 1) % 3; + muse_timer_4bit = (muse_timer_4bit + 1) % 16; + muse_timer_31bit = (muse_timer_31bit << 1) + top; } - muse_timer_2bit_counter = (muse_timer_2bit_counter + 1) % 3; - muse_timer_4bit = (muse_timer_4bit + 1) % 16; - muse_timer_31bit = (muse_timer_31bit << 1) + top; - } - - muse_timer_1bit = (muse_timer_1bit + 1) % 2; - return - bit_for_value(muse_interval[0]) + - (bit_for_value(muse_interval[1]) << 1) + - (bit_for_value(muse_interval[2]) << 2) + - (bit_for_value(muse_interval[3]) << 3); + muse_timer_1bit = (muse_timer_1bit + 1) % 2; + return bit_for_value(muse_interval[0]) + (bit_for_value(muse_interval[1]) << 1) + (bit_for_value(muse_interval[2]) << 2) + (bit_for_value(muse_interval[3]) << 3); } |