summaryrefslogtreecommitdiffstats
path: root/quantum/audio.c
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2016-04-16 21:31:40 -0400
committerJack Humbert <jack.humb@gmail.com>2016-04-16 21:31:40 -0400
commit41cc35425ab32c9a9492006da8b667d01d32dfa6 (patch)
tree23813e84df2687694ba82adf416f59a9e52e89b9 /quantum/audio.c
parent8f4ce501eb41cdd195d61e05c7e9dbe54545e6b9 (diff)
rests between notes as an argument
Diffstat (limited to 'quantum/audio.c')
-rw-r--r--quantum/audio.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/quantum/audio.c b/quantum/audio.c
index 470dc8e0c7..40d09d62fd 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;