You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
2.2 KiB

  1. #include "alfrdmalr.h"
  2. #include "muse.h"
  3. bool muse_mode = false;
  4. uint8_t last_muse_note = 0;
  5. uint16_t muse_counter = 0;
  6. uint8_t muse_offset = 70;
  7. uint16_t muse_tempo = 50;
  8. LEADER_EXTERNS();
  9. void matrix_scan_user(void) {
  10. #ifdef AUDIO_ENABLE
  11. if (muse_mode) {
  12. if (muse_counter == 0) {
  13. uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
  14. if (muse_note != last_muse_note) {
  15. stop_note(compute_freq_for_midi_note(last_muse_note));
  16. play_note(compute_freq_for_midi_note(muse_note), 0xF);
  17. last_muse_note = muse_note;
  18. }
  19. }
  20. muse_counter = (muse_counter + 1) % muse_tempo;
  21. } else {
  22. if (muse_counter) {
  23. stop_all_notes();
  24. muse_counter = 0;
  25. }
  26. }
  27. #endif
  28. LEADER_DICTIONARY() {
  29. leading = false;
  30. // reset keyboard to bootloader
  31. SEQ_FIVE_KEYS(KC_R, KC_E, KC_S, KC_E, KC_T) {
  32. reset_keyboard();
  33. }
  34. leader_end();
  35. }
  36. }
  37. bool syml_pressed = false;
  38. bool symr_pressed = false;
  39. bool settings_active = false;
  40. bool symbols_active = false;
  41. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  42. switch(keycode) {
  43. case SYML:
  44. if (record->event.pressed) {
  45. syml_pressed = true;
  46. } else {
  47. syml_pressed = false;
  48. }
  49. break;
  50. case SYMR:
  51. if (record->event.pressed) {
  52. symr_pressed = true;
  53. } else {
  54. symr_pressed = false;
  55. }
  56. break;
  57. }
  58. // trilayer-esque behavior. If both SYMBOL layer keys are held, then the
  59. // settings layer is open. If only one is held, SYMBOL is active.
  60. if (syml_pressed && symr_pressed) {
  61. layer_on(_SETTINGS);
  62. settings_active = true;
  63. } else if (syml_pressed || symr_pressed) {
  64. if (settings_active) {
  65. layer_off(_SETTINGS);
  66. settings_active = false;
  67. }
  68. layer_on(_SYMBOL);
  69. symbols_active = true;
  70. } else {
  71. if (symbols_active) {
  72. layer_off(_SYMBOL);
  73. symbols_active = false;
  74. }
  75. }
  76. return true;
  77. }
  78. // allow access to the settings layer to turn music mode back off
  79. bool music_mask_user(uint16_t keycode) {
  80. switch (keycode) {
  81. case SYML:
  82. case SYMR:
  83. return false;
  84. default:
  85. return true;
  86. }
  87. }