rests between notes as an argument
This commit is contained in:
parent
8f4ce501eb
commit
41cc35425a
5 changed files with 37 additions and 23 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue