summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--keyboard/planck/keymaps/default/keymap.c10
-rw-r--r--keyboard/preonic/keymaps/default/keymap.c16
-rw-r--r--quantum/audio.c29
-rw-r--r--quantum/audio.h3
-rw-r--r--quantum/keymap_common.c2
5 files changed, 37 insertions, 23 deletions
diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c
index ede08ad7f..a6edefefd 100644
--- a/keyboard/planck/keymaps/default/keymap.c
+++ b/keyboard/planck/keymaps/default/keymap.c
@@ -194,7 +194,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case _QW:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- play_notes(&tone_qw, 4, false);
+ play_notes(&tone_qw, 4, false, 0);
#endif
default_layer_set(1UL<<_QW);
}
@@ -202,7 +202,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case _CM:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- play_notes(&tone_cm, 6, false);
+ play_notes(&tone_cm, 6, false, 0);
#endif
default_layer_set(1UL<<_CM);
}
@@ -210,7 +210,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case _DV:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- play_notes(&tone_dv, 8, false);
+ play_notes(&tone_dv, 8, false, 0);
#endif
default_layer_set(1UL<<_DV);
}
@@ -254,7 +254,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
audio_on();
- play_notes(&start_up, 5, false);
+ play_notes(&start_up, 5, false, 0);
#endif
}
break;
@@ -265,6 +265,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
init_notes();
- play_notes(&start_up, 5, false);
+ play_notes(&start_up, 5, false, 0);
#endif
}
diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c
index 6b6262318..1223793cf 100644
--- a/keyboard/preonic/keymaps/default/keymap.c
+++ b/keyboard/preonic/keymaps/default/keymap.c
@@ -242,7 +242,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case _QWERTY:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- play_notes(&tone_qwerty, 4, false);
+ play_notes(&tone_qwerty, 4, false, 0);
#endif
persistant_default_layer_set(1UL<<_QWERTY);
}
@@ -250,7 +250,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case _COLEMAK:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- play_notes(&tone_colemak, 6, false);
+ play_notes(&tone_colemak, 6, false, 1);
#endif
persistant_default_layer_set(1UL<<_COLEMAK);
}
@@ -258,7 +258,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case _DVORAK:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- play_notes(&tone_dvorak, 8, false);
+ play_notes(&tone_dvorak, 8, false, 10);
#endif
persistant_default_layer_set(1UL<<_DVORAK);
}
@@ -302,7 +302,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
audio_on();
- play_notes(&start_up, 4, false);
+ play_notes(&start_up, 4, false, 0);
#endif
}
break;
@@ -317,7 +317,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case 9:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- play_notes(&tone_music, 8, false);
+ play_notes(&tone_music, 8, false, 0);
layer_on(_MUSIC);
#endif
}
@@ -333,9 +333,9 @@ void process_action_user(keyrecord_t *record) {
if (IS_LAYER_ON(_MUSIC)) {
if (record->event.pressed) {
- play_note(((double)261.626)*pow(2.0, -3.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
+ play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
} else {
- stop_note(((double)261.626)*pow(2.0, -3.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
+ stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
}
}
@@ -344,6 +344,6 @@ void process_action_user(keyrecord_t *record) {
void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
init_notes();
- play_notes(&start_up, 4, false);
+ play_notes(&start_up, 4, false, 0);
#endif
}
diff --git a/quantum/audio.c b/quantum/audio.c
index 470dc8e0c..40d09d62f 100644
--- a/quantum/audio.c
+++ b/quantum/audio.c
@@ -61,7 +61,11 @@ uint16_t note_position = 0;
float (* notes_pointer)[][2];
uint8_t notes_length;
bool notes_repeat;
+float notes_rest;
+bool note_resting = false;
+
uint8_t current_note = 0;
+uint8_t rest_counter = 0;
audio_config_t audio_config;
@@ -314,13 +318,21 @@ ISR(TIMER3_COMPA_vect) {
return;
}
}
- #ifdef PWM_AUDIO
- note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE;
- note_length = (*notes_pointer)[current_note][1];
- #else
- note_frequency = (*notes_pointer)[current_note][0];
- note_length = (*notes_pointer)[current_note][1] / 4;
- #endif
+ if (!note_resting && ((int)notes_rest != 0)) {
+ note_resting = true;
+ note_frequency = 0;
+ note_length = notes_rest;
+ current_note--;
+ } else {
+ note_resting = false;
+ #ifdef PWM_AUDIO
+ note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE;
+ note_length = (*notes_pointer)[current_note][1];
+ #else
+ note_frequency = (*notes_pointer)[current_note][0];
+ note_length = (*notes_pointer)[current_note][1] / 4;
+ #endif
+ }
note_position = 0;
}
@@ -332,7 +344,7 @@ ISR(TIMER3_COMPA_vect) {
}
}
-void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat) {
+void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat, float n_rest) {
if (audio_config.enable) {
@@ -343,6 +355,7 @@ if (audio_config.enable) {
notes_pointer = np;
notes_length = n_length;
notes_repeat = n_repeat;
+ notes_rest = n_rest;
place = 0;
current_note = 0;
diff --git a/quantum/audio.h b/quantum/audio.h
index 58270015d..65a6f9434 100644
--- a/quantum/audio.h
+++ b/quantum/audio.h
@@ -2,6 +2,7 @@
#include <stdbool.h>
#include <avr/io.h>
#include <util/delay.h>
+#include "musical_notes.h"
typedef union {
uint8_t raw;
@@ -20,4 +21,4 @@ void play_note(double freq, int vol);
void stop_note(double freq);
void stop_all_notes();
void init_notes();
-void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat);
+void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat, float n_rest);
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index 899437f44..457f70a44 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -189,7 +189,7 @@ static action_t keycode_to_action(uint16_t keycode)
case RESET: ; // RESET is 0x5000, which is why this is here
clear_keyboard();
#ifdef AUDIO_ENABLE
- play_notes(&goodbye, 3, false);
+ play_notes(&goodbye, 3, false, 0);
#endif
_delay_ms(250);
#ifdef ATREUS_ASTAR