aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2016-04-18 21:01:48 -0400
committerJack Humbert <jack.humb@gmail.com>2016-04-18 21:01:48 -0400
commite49712b5593b887c8af18aeb7196513f1c7b7bcf (patch)
tree0de0a22806600a9512b93cf05128a4b68fbb7f7d
parent89a78f4a11a8f04777b3407c958dc989b4d7d884 (diff)
downloadqmk_firmware-e49712b5593b887c8af18aeb7196513f1c7b7bcf.tar.gz
qmk_firmware-e49712b5593b887c8af18aeb7196513f1c7b7bcf.zip
note sliding - on right now
-rw-r--r--keyboard/preonic/keymaps/default/keymap.c26
-rw-r--r--quantum/audio.c81
-rw-r--r--quantum/keymap_common.c1
3 files changed, 63 insertions, 45 deletions
diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c
index 2591af9f0..2546d8f6c 100644
--- a/keyboard/preonic/keymaps/default/keymap.c
+++ b/keyboard/preonic/keymaps/default/keymap.c
@@ -14,8 +14,9 @@
14#define _DVORAK 2 14#define _DVORAK 2
15#define _LOWER 3 15#define _LOWER 3
16#define _RAISE 4 16#define _RAISE 4
17#define _ADJUST 5 17#define _ADJUST 6
18#define _MUSIC 6 18#define _MUSIC 7
19#define _STOPPER 5
19 20
20// Macro name shortcuts 21// Macro name shortcuts
21#define QWERTY M(_QWERTY) 22#define QWERTY M(_QWERTY)
@@ -172,7 +173,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
172 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, 173 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
173 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, 174 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
174 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 175 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
176},
177
178/* Stopper
179 *
180 */
181[_STOPPER] = {
182 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
183 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
184 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
185 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
186 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
175} 187}
188
176}; 189};
177 190
178const uint16_t PROGMEM fn_actions[] = { 191const uint16_t PROGMEM fn_actions[] = {
@@ -225,6 +238,7 @@ float tone_music[][2] = {
225 {440.0*pow(2.0,(24)/12.0), 8} 238 {440.0*pow(2.0,(24)/12.0), 8}
226}; 239};
227float ode_to_joy[][2] = SONG(ODE_TO_JOY); 240float ode_to_joy[][2] = SONG(ODE_TO_JOY);
241float goodbye[][2] = SONG(GOODBYE_SOUND);
228#endif 242#endif
229 243
230void persistant_default_layer_set(uint16_t default_layer) { 244void persistant_default_layer_set(uint16_t default_layer) {
@@ -306,6 +320,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
306 if (record->event.pressed) { 320 if (record->event.pressed) {
307 #ifdef AUDIO_ENABLE 321 #ifdef AUDIO_ENABLE
308 layer_off(_MUSIC); 322 layer_off(_MUSIC);
323 layer_off(_STOPPER);
309 stop_all_notes(); 324 stop_all_notes();
310 #endif 325 #endif
311 } 326 }
@@ -317,6 +332,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
317 set_tempo(150); 332 set_tempo(150);
318 PLAY_NOTE_ARRAY(ode_to_joy, false, .25); 333 PLAY_NOTE_ARRAY(ode_to_joy, false, .25);
319 layer_on(_MUSIC); 334 layer_on(_MUSIC);
335 layer_on(_STOPPER);
320 #endif 336 #endif
321 } 337 }
322 break; 338 break;
@@ -345,3 +361,9 @@ void matrix_init_user(void) {
345 PLAY_NOTE_ARRAY(start_up, false, 0); 361 PLAY_NOTE_ARRAY(start_up, false, 0);
346 #endif 362 #endif
347} 363}
364
365void play_goodbye_tone()
366{
367 PLAY_NOTE_ARRAY(goodbye, false, 0);
368 _delay_ms(2000);
369} \ No newline at end of file
diff --git a/quantum/audio.c b/quantum/audio.c
index 69c58ca6c..6a5d43013 100644
--- a/quantum/audio.c
+++ b/quantum/audio.c
@@ -65,6 +65,7 @@ uint8_t notes_count;
65bool notes_repeat; 65bool notes_repeat;
66float notes_rest; 66float notes_rest;
67bool note_resting = false; 67bool note_resting = false;
68int note_flipper = 0;
68 69
69uint8_t current_note = 0; 70uint8_t current_note = 0;
70uint8_t rest_counter = 0; 71uint8_t rest_counter = 0;
@@ -127,6 +128,9 @@ void stop_note(double freq) {
127 voices--; 128 voices--;
128 if (voices < 0) 129 if (voices < 0)
129 voices = 0; 130 voices = 0;
131 if (voice_place >= voices) {
132 voice_place = 0;
133 }
130 if (voices == 0) { 134 if (voices == 0) {
131 #ifdef PWM_AUDIO 135 #ifdef PWM_AUDIO
132 TIMSK3 &= ~_BV(OCIE3A); 136 TIMSK3 &= ~_BV(OCIE3A);
@@ -137,25 +141,6 @@ void stop_note(double freq) {
137 frequency = 0; 141 frequency = 0;
138 volume = 0; 142 volume = 0;
139 note = false; 143 note = false;
140 } else {
141 double freq = frequencies[voices - 1];
142 int vol = volumes[voices - 1];
143 double starting_f = frequency;
144 if (frequency < freq) {
145 sliding = true;
146 for (double f = starting_f; f <= freq; f += ((freq - starting_f) / 2000.0)) {
147 frequency = f;
148 }
149 sliding = false;
150 } else if (frequency > freq) {
151 sliding = true;
152 for (double f = starting_f; f >= freq; f -= ((starting_f - freq) / 2000.0)) {
153 frequency = f;
154 }
155 sliding = false;
156 }
157 frequency = freq;
158 volume = vol;
159 } 144 }
160 } 145 }
161} 146}
@@ -248,16 +233,41 @@ ISR(TIMER3_COMPA_vect) {
248 OCR4A = sum; 233 OCR4A = sum;
249 } 234 }
250 #else 235 #else
251 if (frequency > 0) { 236 if (frequencies[voice_place] > 0) {
237 // if (frequencies[voice_place] > 880.0) {
238 // if (note_flipper == 100) {
239 // note_flipper = 0;
240 // return;
241 // }
242 // note_flipper++;
243 // } else {
244 // note_flipper = 0;
245 // }
252 // ICR3 = (int)(((double)F_CPU) / frequency); // Set max to the period 246 // ICR3 = (int)(((double)F_CPU) / frequency); // Set max to the period
253 // OCR3A = (int)(((double)F_CPU) / frequency) >> 1; // Set compare to half the period 247 // OCR3A = (int)(((double)F_CPU) / frequency) >> 1; // Set compare to half the period
254 voice_place %= voices; 248
255 if (place > (frequencies[voice_place] / 50)) { 249 double freq;
256 voice_place = (voice_place + 1) % voices; 250 if (false) {
257 place = 0.0; 251 voice_place %= voices;
252 if (place > (frequencies[voice_place] / 50)) {
253 voice_place = (voice_place + 1) % voices;
254 place = 0.0;
255 }
256 freq = frequencies[voice_place];
257 } else {
258 if (frequency != 0) {
259 if (frequency < frequencies[voices - 1]) {
260 frequency = frequency * 1.01454533494;
261 } else if (frequency > frequencies[voices - 1]) {
262 frequency = frequency * 0.98566319864;
263 }
264 } else {
265 frequency = frequencies[voices - 1];
266 }
267 freq = frequency;
258 } 268 }
259 ICR3 = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)); // Set max to the period 269 ICR3 = (int)(((double)F_CPU) / (freq * CPU_PRESCALER)); // Set max to the period
260 OCR3A = (int)((((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) * note_timbre); // Set compare to half the period 270 OCR3A = (int)((((double)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); // Set compare to half the period
261 //OCR3A = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) >> 1 * duty_place; // Set compare to half the period 271 //OCR3A = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) >> 1 * duty_place; // Set compare to half the period
262 place++; 272 place++;
263 // if (duty_counter > (frequencies[voice_place] / 500)) { 273 // if (duty_counter > (frequencies[voice_place] / 500)) {
@@ -413,23 +423,8 @@ if (audio_config.enable && voices < 8) {
413 freq = freq / SAMPLE_RATE; 423 freq = freq / SAMPLE_RATE;
414 #endif 424 #endif
415 if (freq > 0) { 425 if (freq > 0) {
416 if (frequency != 0) { 426 frequencies[voices] = freq;
417 double starting_f = frequency; 427 volumes[voices] = vol;
418 if (frequency < freq) {
419 for (double f = starting_f; f <= freq; f += ((freq - starting_f) / 2000.0)) {
420 frequency = f;
421 }
422 } else if (frequency > freq) {
423 for (double f = starting_f; f >= freq; f -= ((starting_f - freq) / 2000.0)) {
424 frequency = f;
425 }
426 }
427 }
428 frequency = freq;
429 volume = vol;
430
431 frequencies[voices] = frequency;
432 volumes[voices] = volume;
433 voices++; 428 voices++;
434 } 429 }
435 430
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index 4ee290ad0..43debf4ef 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -184,6 +184,7 @@ static action_t keycode_to_action(uint16_t keycode)
184 case RESET: ; // RESET is 0x5000, which is why this is here 184 case RESET: ; // RESET is 0x5000, which is why this is here
185 clear_keyboard(); 185 clear_keyboard();
186 #ifdef AUDIO_ENABLE 186 #ifdef AUDIO_ENABLE
187 stop_all_notes();
187 play_goodbye_tone(); 188 play_goodbye_tone();
188 #endif 189 #endif
189 _delay_ms(250); 190 _delay_ms(250);