diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c index c2081f525e2..9a2c57cb18c 100644 --- a/keyboard/atomic/keymaps/pvc/keymap.c +++ b/keyboard/atomic/keymaps/pvc/keymap.c @@ -3,7 +3,7 @@ #ifdef AUDIO_ENABLE #include "audio.h" -#include "musical_notes.h" +#include "song_list.h" #endif @@ -75,140 +75,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, }; - -#ifdef AUDIO_ENABLE - - - - -float tone_lw[][2] = { -/* -Q_NOTE(_C1 ) , -Q_NOTE(_CS1 ) , -Q_NOTE(_D1 ) , -Q_NOTE(_DS1 ) , -Q_NOTE(_E1 ) , -Q_NOTE(_F1 ) , -Q_NOTE(_FS1 ) , -Q_NOTE(_G1 ) , -Q_NOTE(_GS1 ) , -Q_NOTE(_A1 ) , -Q_NOTE(_AS1 ) , -Q_NOTE(_B1 ) , -*/ - -Q_NOTE(_C4 ) , -Q_NOTE(_CS4 ) , -Q_NOTE(_D4 ) , -Q_NOTE(_DS4 ) , -Q_NOTE(_E4 ) , -Q_NOTE(_F4 ) , -Q_NOTE(_FS4 ) , -Q_NOTE(_G4 ) , -Q_NOTE(_GS4 ) , -Q_NOTE(_A4 ) , -Q_NOTE(_AS4 ) , -Q_NOTE(_B1 ) , - - -Q_NOTE(_C2 ) , -Q_NOTE(_CS2 ) , -Q_NOTE(_D2 ) , -Q_NOTE(_DS2 ) , -Q_NOTE(_E2 ) , -Q_NOTE(_F2 ) , -Q_NOTE(_FS2 ) , -Q_NOTE(_G2 ) , -Q_NOTE(_GS2 ) , -Q_NOTE(_A2 ) , -Q_NOTE(_AS2 ) , -Q_NOTE(_B2 ) , -Q_NOTE(_C3 ) , -Q_NOTE(_CS3 ) , -Q_NOTE(_D3 ) , -Q_NOTE(_DS3 ) , -Q_NOTE(_E3 ) , -Q_NOTE(_F3 ) , -Q_NOTE(_FS3 ) , -Q_NOTE(_G3 ) , -Q_NOTE(_GS3 ) , -Q_NOTE(_A3 ) , -Q_NOTE(_AS3 ) , -Q_NOTE(_B3 ) , -Q_NOTE(_C4 ) , -Q_NOTE(_CS4 ) , -Q_NOTE(_D4 ) , -Q_NOTE(_DS4 ) , -Q_NOTE(_E4 ) , -Q_NOTE(_F4 ) , -Q_NOTE(_FS4 ) , -Q_NOTE(_G4 ) , -Q_NOTE(_GS4 ) , -Q_NOTE(_A4 ) , -Q_NOTE(_AS4 ) , -Q_NOTE(_B4 ) , -Q_NOTE(_C5 ) , -Q_NOTE(_CS5 ) , -Q_NOTE(_D5 ) , -Q_NOTE(_DS5 ) , -Q_NOTE(_E5 ) , -Q_NOTE(_F5 ) , -Q_NOTE(_FS5 ) , -Q_NOTE(_G5 ) , -Q_NOTE(_GS5 ) , -Q_NOTE(_A5 ) , -Q_NOTE(_AS5 ) , -Q_NOTE(_B5 ) , -Q_NOTE(_C6 ) , -Q_NOTE(_CS6 ) , -Q_NOTE(_D6 ) , -Q_NOTE(_DS6 ) , -Q_NOTE(_E6 ) , -Q_NOTE(_F6 ) , -Q_NOTE(_FS6 ) , -Q_NOTE(_G6 ) , -Q_NOTE(_GS6 ) , -Q_NOTE(_A6 ) , -Q_NOTE(_AS6 ) , -Q_NOTE(_B6 ) , -Q_NOTE(_C7 ) , -Q_NOTE(_CS7 ) , -Q_NOTE(_D7 ) , -Q_NOTE(_DS7 ) , -Q_NOTE(_E7 ) , -Q_NOTE(_F7 ) , -Q_NOTE(_FS7 ) , -Q_NOTE(_G7 ) , -Q_NOTE(_GS7 ) , -Q_NOTE(_A7 ) , -Q_NOTE(_AS7 ) , -Q_NOTE(_B7 ) , -Q_NOTE(_C8 ) , -Q_NOTE(_CS8 ) , -Q_NOTE(_D8 ) , -Q_NOTE(_DS8 ) , -Q_NOTE(_E8 ) , -Q_NOTE(_F8 ) , -Q_NOTE(_FS8 ) , -Q_NOTE(_G8 ) , -Q_NOTE(_GS8 ) , -Q_NOTE(_A8 ) , -Q_NOTE(_AS8 ) , -Q_NOTE(_B8 ) , - -}; - -float tone_rs[][2] = { -Q_NOTE(_A4 ) , -Q_NOTE(_A4 ) , -Q_NOTE(_A4 ) , -Q_NOTE(_A4 ) , -Q_NOTE(_AS8 ) , -Q_NOTE(_B8 ) , -}; - -#endif - void update_quad_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3, uint8_t layer4, bool order) { if (order) @@ -241,7 +107,6 @@ void update_quad_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3, uint8_t l const uint16_t PROGMEM fn_actions[] = { }; -//#define MUSIC_ARRAY_SIZE(x) (((int)(sizeof(x) / (sizeof(x[0][0])))) / 2) const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -280,30 +145,140 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; + + #ifdef AUDIO_ENABLE -float start_up[][2] = { -Q_NOTE(_E4 ) , -Q_NOTE(_E4 ) , -Q_NOTE(_F4 ) , -Q_NOTE(_G4 ) , -Q_NOTE(_G4 ) , -Q_NOTE(_F4 ) , -Q_NOTE(_E4 ) , -Q_NOTE(_D4 ) , -Q_NOTE(_C4 ) , -Q_NOTE(_C4 ) , -Q_NOTE(_D4 ) , -Q_NOTE(_E4 ) , -H_NOTE(_E4 ) , -Q_NOTE(_D4 ) , -H_NOTE(_D4 ) , + +float start_up[][2] = SONG(ODE_TO_JOY); + +float tone_lw[][2] = { + /* + Q__NOTE(_C1 ) , + Q__NOTE(_CS1 ) , + Q__NOTE(_D1 ) , + Q__NOTE(_DS1 ) , + Q__NOTE(_E1 ) , + Q__NOTE(_F1 ) , + Q__NOTE(_FS1 ) , + Q__NOTE(_G1 ) , + Q__NOTE(_GS1 ) , + Q__NOTE(_A1 ) , + Q__NOTE(_AS1 ) , + Q__NOTE(_B1 ) , + */ + + Q__NOTE(_C4 ) , + Q__NOTE(_CS4 ) , + Q__NOTE(_D4 ) , + Q__NOTE(_DS4 ) , + Q__NOTE(_E4 ) , + Q__NOTE(_F4 ) , + Q__NOTE(_FS4 ) , + Q__NOTE(_G4 ) , + Q__NOTE(_GS4 ) , + Q__NOTE(_A4 ) , + Q__NOTE(_AS4 ) , + Q__NOTE(_B1 ) , + + Q__NOTE(_C2 ) , + Q__NOTE(_CS2 ) , + Q__NOTE(_D2 ) , + Q__NOTE(_DS2 ) , + Q__NOTE(_E2 ) , + Q__NOTE(_F2 ) , + Q__NOTE(_FS2 ) , + Q__NOTE(_G2 ) , + Q__NOTE(_GS2 ) , + Q__NOTE(_A2 ) , + Q__NOTE(_AS2 ) , + Q__NOTE(_B2 ) , + Q__NOTE(_C3 ) , + Q__NOTE(_CS3 ) , + Q__NOTE(_D3 ) , + Q__NOTE(_DS3 ) , + Q__NOTE(_E3 ) , + Q__NOTE(_F3 ) , + Q__NOTE(_FS3 ) , + Q__NOTE(_G3 ) , + Q__NOTE(_GS3 ) , + Q__NOTE(_A3 ) , + Q__NOTE(_AS3 ) , + Q__NOTE(_B3 ) , + Q__NOTE(_C4 ) , + Q__NOTE(_CS4 ) , + Q__NOTE(_D4 ) , + Q__NOTE(_DS4 ) , + Q__NOTE(_E4 ) , + Q__NOTE(_F4 ) , + Q__NOTE(_FS4 ) , + Q__NOTE(_G4 ) , + Q__NOTE(_GS4 ) , + Q__NOTE(_A4 ) , + Q__NOTE(_AS4 ) , + Q__NOTE(_B4 ) , + Q__NOTE(_C5 ) , + Q__NOTE(_CS5 ) , + Q__NOTE(_D5 ) , + Q__NOTE(_DS5 ) , + Q__NOTE(_E5 ) , + Q__NOTE(_F5 ) , + Q__NOTE(_FS5 ) , + Q__NOTE(_G5 ) , + Q__NOTE(_GS5 ) , + Q__NOTE(_A5 ) , + Q__NOTE(_AS5 ) , + Q__NOTE(_B5 ) , + Q__NOTE(_C6 ) , + Q__NOTE(_CS6 ) , + Q__NOTE(_D6 ) , + Q__NOTE(_DS6 ) , + Q__NOTE(_E6 ) , + Q__NOTE(_F6 ) , + Q__NOTE(_FS6 ) , + Q__NOTE(_G6 ) , + Q__NOTE(_GS6 ) , + Q__NOTE(_A6 ) , + Q__NOTE(_AS6 ) , + Q__NOTE(_B6 ) , + Q__NOTE(_C7 ) , + Q__NOTE(_CS7 ) , + Q__NOTE(_D7 ) , + Q__NOTE(_DS7 ) , + Q__NOTE(_E7 ) , + Q__NOTE(_F7 ) , + Q__NOTE(_FS7 ) , + Q__NOTE(_G7 ) , + Q__NOTE(_GS7 ) , + Q__NOTE(_A7 ) , + Q__NOTE(_AS7 ) , + Q__NOTE(_B7 ) , + Q__NOTE(_C8 ) , + Q__NOTE(_CS8 ) , + Q__NOTE(_D8 ) , + Q__NOTE(_DS8 ) , + Q__NOTE(_E8 ) , + Q__NOTE(_F8 ) , + Q__NOTE(_FS8 ) , + Q__NOTE(_G8 ) , + Q__NOTE(_GS8 ) , + Q__NOTE(_A8 ) , + Q__NOTE(_AS8 ) , + Q__NOTE(_B8 ) , +}; + +float tone_rs[][2] = { + Q__NOTE(_A4 ) , + Q__NOTE(_A4 ) , + Q__NOTE(_A4 ) , + Q__NOTE(_A4 ) , + Q__NOTE(_AS8 ) , + Q__NOTE(_B8 ) , }; -#endif void matrix_init_user(void) { - #ifdef AUDIO_ENABLE - init_notes(); - PLAY_NOTE_ARRAY(start_up, false, STACCATO); - println("Matrix Init"); - #endif + init_notes(); + PLAY_NOTE_ARRAY(start_up, false, STACCATO); + println("Matrix Init"); } + +#endif diff --git a/quantum/audio.c b/quantum/audio.c index 90f3c5a13f8..119bd922985 100644 --- a/quantum/audio.c +++ b/quantum/audio.c @@ -288,7 +288,8 @@ ISR(TIMER3_COMPA_vect) { #else if (note_frequency > 0) { ICR3 = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)); // Set max to the period - OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 1; // Set compare to half the period + //OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 1; // Set compare to half the period + OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 2; // Set compare to half the period } else { ICR3 = 0; OCR3A = 0; diff --git a/quantum/musical_notes.h b/quantum/musical_notes.h index 837f6a069d8..d2256a77362 100644 --- a/quantum/musical_notes.h +++ b/quantum/musical_notes.h @@ -4,20 +4,36 @@ // Tempo Placeholder #define TEMPO 120 +#define SONG(notes...) { notes } + // Note Types -#define WHOLE_NOTE(note) {(NOTE##note), 64} -#define HALF_NOTE(note) {(NOTE##note), 32} -#define QUARTER_NOTE(note) {(NOTE##note), 16} -#define EIGHTH_NOTE(note) {(NOTE##note), 8} -#define SIXTEENTH_NOTE(note) {(NOTE##note), 4} +#define MUSICAL_NOTE(note, duration) {(NOTE##note), duration} +#define WHOLE_NOTE(note) MUSICAL_NOTE(note, 64) +#define HALF_NOTE(note) MUSICAL_NOTE(note, 32) +#define QUARTER_NOTE(note) MUSICAL_NOTE(note, 16) +#define EIGHTH_NOTE(note) MUSICAL_NOTE(note, 8) +#define SIXTEENTH_NOTE(note) MUSICAL_NOTE(note, 4) -// Note Types Short -#define W_NOTE(n) WHOLE_NOTE(n) -#define H_NOTE(n) HALF_NOTE(n) -#define Q_NOTE(n) QUARTER_NOTE(n) -#define E_NOTE(n) EIGTH_NOTE(n) -#define S_NOTE(n) SIXTEENTH_NOTE(n) +#define WHOLE_DOT_NOTE(note) MUSICAL_NOTE(note, 64+32) +#define HALF_DOT_NOTE(note) MUSICAL_NOTE(note, 32+16) +#define QUARTER_DOT_NOTE(note) MUSICAL_NOTE(note, 16+8) +#define EIGHTH_DOT_NOTE(note) MUSICAL_NOTE(note, 8+4) +#define SIXTEENTH_DOT_NOTE(note) MUSICAL_NOTE(note, 4+2) + + +// Note Type Shortcuts +#define M__NOTE(note, duration) MUSICAL_NOTE(note, duration) +#define W__NOTE(n) WHOLE_NOTE(n) +#define H__NOTE(n) HALF_NOTE(n) +#define Q__NOTE(n) QUARTER_NOTE(n) +#define E__NOTE(n) EIGHTH_NOTE(n) +#define S__NOTE(n) SIXTEENTH_NOTE(n) +#define WD_NOTE(n) WHOLE_DOT_NOTE(n) +#define HD_NOTE(n) HALF_DOT_NOTE(n) +#define QD_NOTE(n) QUARTER_DOT_NOTE(n) +#define ED_NOTE(n) EIGTH_DOT_NOTE(n) +#define SD_NOTE(n) SIXTEENTH_DOT_NOTE(n) // Note Styles // Staccato makes sure there is a rest between each note. Think: TA TA TA diff --git a/quantum/song_list.h b/quantum/song_list.h new file mode 100644 index 00000000000..ef25eac35a4 --- /dev/null +++ b/quantum/song_list.h @@ -0,0 +1,12 @@ +#include "musical_notes.h" + +#ifndef SONG_LIST_H +#define SONG_LIST_H + +#define ODE_TO_JOY \ + Q__NOTE(_E4), Q__NOTE(_E4), Q__NOTE(_F4), Q__NOTE(_G4), \ + Q__NOTE(_G4), Q__NOTE(_F4), Q__NOTE(_E4), Q__NOTE(_D4), \ + Q__NOTE(_C4), Q__NOTE(_C4), Q__NOTE(_D4), Q__NOTE(_E4), \ + QD_NOTE(_E4), E__NOTE(_D4), H__NOTE(_D4), + +#endif \ No newline at end of file