aboutsummaryrefslogtreecommitdiff
path: root/quantum/audio/audio.h
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/audio/audio.h')
-rw-r--r--quantum/audio/audio.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h
new file mode 100644
index 000000000..d1ccfdb82
--- /dev/null
+++ b/quantum/audio/audio.h
@@ -0,0 +1,89 @@
1#include <stdint.h>
2#include <stdbool.h>
3#include <avr/io.h>
4#include <util/delay.h>
5#include "musical_notes.h"
6#include "song_list.h"
7#include "voices.h"
8
9#ifndef AUDIO_H
10#define AUDIO_H
11
12// Largely untested PWM audio mode (doesn't sound as good)
13// #define PWM_AUDIO
14
15// #define VIBRATO_ENABLE
16
17// Enable vibrato strength/amplitude - slows down ISR too much
18// #define VIBRATO_STRENGTH_ENABLE
19
20typedef union {
21 uint8_t raw;
22 struct {
23 bool enable :1;
24 uint8_t level :7;
25 };
26} audio_config_t;
27
28void audio_toggle(void);
29void audio_on(void);
30void audio_off(void);
31
32// Vibrato rate functions
33
34#ifdef VIBRATO_ENABLE
35
36void set_vibrato_rate(float rate);
37void increase_vibrato_rate(float change);
38void decrease_vibrato_rate(float change);
39
40#ifdef VIBRATO_STRENGTH_ENABLE
41
42void set_vibrato_strength(float strength);
43void increase_vibrato_strength(float change);
44void decrease_vibrato_strength(float change);
45
46#endif
47
48#endif
49
50// Polyphony functions
51
52void set_polyphony_rate(float rate);
53void enable_polyphony();
54void disable_polyphony();
55void increase_polyphony_rate(float change);
56void decrease_polyphony_rate(float change);
57
58void set_timbre(float timbre);
59void set_tempo(float tempo);
60
61void increase_tempo(uint8_t tempo_change);
62void decrease_tempo(uint8_t tempo_change);
63
64void audio_init();
65
66#ifdef PWM_AUDIO
67void play_sample(uint8_t * s, uint16_t l, bool r);
68#endif
69void play_note(float freq, int vol);
70void stop_note(float freq);
71void stop_all_notes(void);
72void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest);
73
74#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
75 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
76 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
77 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
78 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
79
80// These macros are used to allow play_notes to play an array of indeterminate
81// length. This works around the limitation of C's sizeof operation on pointers.
82// The global float array for the song must be used here.
83#define NOTE_ARRAY_SIZE(x) ((int16_t)(sizeof(x) / (sizeof(x[0]))))
84#define PLAY_NOTE_ARRAY(note_array, note_repeat, note_rest_style) play_notes(&note_array, NOTE_ARRAY_SIZE((note_array)), (note_repeat), (note_rest_style));
85
86void play_goodbye_tone(void);
87void play_startup_tone(void);
88
89#endif \ No newline at end of file