]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
breaking changes - restructuring audio.c a little
authorJack Humbert <jack.humb@gmail.com>
Wed, 20 Apr 2016 01:25:48 +0000 (21:25 -0400)
committerJack Humbert <jack.humb@gmail.com>
Wed, 20 Apr 2016 01:25:48 +0000 (21:25 -0400)
keyboard/planck/keymaps/default/keymap.c
keyboard/preonic/keymaps/default/keymap.c
quantum/audio.c
quantum/audio.h

index 25a0d78f3be32d5ac0ba3c8129bbfb190d79f3a7..ccf9c7adefb9863d09c5b73a937f4ae5ff9b1a64 100644 (file)
@@ -145,7 +145,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER,   XXXXXXX, XXXXXXX, RAISE,   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
 },
 
-/* Plover layer (http://openstenoproject.org)
+/* Plover layer (http://opensteno.org)
  * ,-----------------------------------------------------------------------------------.
  * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
  * |------+------+------+------+------+-------------+------+------+------+------+------|
@@ -225,16 +225,10 @@ float tone_dvorak[][2] = {
   {440.0*pow(2.0,(31)/12.0), 8}
 };
 
-float tone_music[][2] = {
-  {440.0*pow(2.0,(12)/12.0), 8},
-  {440.0*pow(2.0,(14)/12.0), 8},
-  {440.0*pow(2.0,(16)/12.0), 8},
-  {440.0*pow(2.0,(17)/12.0), 8},
-  {440.0*pow(2.0,(19)/12.0), 8},
-  {440.0*pow(2.0,(21)/12.0), 8},
-  {440.0*pow(2.0,(23)/12.0), 8},
-  {440.0*pow(2.0,(24)/12.0), 8}
-};
+
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+
 #endif
 
 
@@ -324,7 +318,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_NOTE_ARRAY(tone_music, false, 0);
+              PLAY_NOTE_ARRAY(music_scale, false, 0);
               layer_on(_MUSIC);
             #endif
           }
@@ -374,3 +368,9 @@ void matrix_init_user(void) {
     PLAY_NOTE_ARRAY(tone_startup, false, 0);
   #endif
 }
+
+void play_goodbye_tone()
+{
+  PLAY_NOTE_ARRAY(goodbye, false, 0);
+  _delay_ms(150);
+}
index 144e9c3086bf0727063a8e2de80ca427202f0dff..ecf3400f8db9b06ad7b560bb0bf30314c2fb793f 100644 (file)
@@ -15,7 +15,7 @@
 #define _LOWER 3
 #define _RAISE 4
 #define _MUSIC 5
-#define _ADJUST 6
+#define _ADJUST 16
 
 // Macro name shortcuts
 #define QWERTY M(_QWERTY)
@@ -142,6 +142,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
 },
 
+/* Music (reserved for process_action_user)
+ *
+ */
+[_MUSIC] = {
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER,   XXXXXXX, XXXXXXX, RAISE,   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
 /* Adjust (Lower + Raise)
  * ,-----------------------------------------------------------------------------------.
  * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
@@ -161,19 +172,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {_______, _______, _______, AUD_ON,  AUD_OFF, AG_NORM, AG_SWAP,  QWERTY, COLEMAK, DVORAK,  _______, _______},
   {_______, _______, _______, MUS_ON,  MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-
-/* Music (reserved for process_action_user)
- *
- */
-[_MUSIC] = {
-  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
-  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
-  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
-  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
-  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER,   XXXXXXX, XXXXXXX, RAISE,   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
 }
 
+
 };
 
 const uint16_t PROGMEM fn_actions[] = {
@@ -315,7 +316,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
         case 9:
           if (record->event.pressed) {
             #ifdef AUDIO_ENABLE
-              init_notes();
               PLAY_NOTE_ARRAY(music_scale, false, 0);
               layer_on(_MUSIC);
             #endif
@@ -341,11 +341,12 @@ void process_action_user(keyrecord_t *record) {
 }
 
 void matrix_init_user(void) {
-  #ifdef AUDIO_ENABLE
-    init_notes();
-    _delay_ms(10);
-    PLAY_NOTE_ARRAY(start_up, false, 0);
-  #endif
+  play_startup_tone();
+}
+
+void play_startup_tone()
+{
+  PLAY_NOTE_ARRAY(start_up, false, 0);
 }
 
 void play_goodbye_tone()
index 8ea1bf6ff08b960ace6a8ca803b79877609627c3..bbdbc824c907a3b44a14b260ba6e775fdf969b53 100644 (file)
@@ -74,7 +74,9 @@ float vibrato_counter = 0;
 float vibrato_strength = .5;
 float vibrato_rate = 0.125;
 
-float polyphony_rate = .5;
+float polyphony_rate = 0;
+
+bool inited = false;
 
 audio_config_t audio_config;
 
@@ -170,7 +172,49 @@ void increase_tempo(uint8_t tempo_change) {
     }
 }
 
+void audio_init() {
+
+    /* check signature */
+    if (!eeconfig_is_enabled()) {
+        eeconfig_init();
+    }
+    audio_config.raw = eeconfig_read_audio();
+
+    #ifdef PWM_AUDIO
+        PLLFRQ = _BV(PDIV2);
+        PLLCSR = _BV(PLLE);
+        while(!(PLLCSR & _BV(PLOCK)));
+        PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */
+
+        /* Init a fast PWM on Timer4 */
+        TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */
+        TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */
+        OCR4A = 0;
+
+        /* Enable the OC4A output */
+        DDRC |= _BV(PORTC6);
+
+        TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
+
+        TCCR3A = 0x0; // Options not needed
+        TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC
+        OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback
+    #else
+        DDRC |= _BV(PORTC6);
+
+        TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
+
+        TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
+        TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30);
+    #endif
+
+    inited = true;
+}
+
 void stop_all_notes() {
+    if (!inited) {
+        audio_init();
+    }
     voices = 0;
     #ifdef PWM_AUDIO
         TIMSK3 &= ~_BV(OCIE3A);
@@ -191,7 +235,9 @@ void stop_all_notes() {
 
 void stop_note(double freq) {
     if (note) {
-        cli();
+        if (!inited) {
+            audio_init();
+        }
         #ifdef PWM_AUDIO
             freq = freq / SAMPLE_RATE;
         #endif
@@ -225,47 +271,9 @@ void stop_note(double freq) {
             volume = 0;
             note = false;
         }
-        sei();
     }
 }
 
-void init_notes() {
-
-    /* check signature */
-    if (!eeconfig_is_enabled()) {
-        eeconfig_init();
-    }
-    audio_config.raw = eeconfig_read_audio();
-
-    #ifdef PWM_AUDIO
-        PLLFRQ = _BV(PDIV2);
-        PLLCSR = _BV(PLLE);
-        while(!(PLLCSR & _BV(PLOCK)));
-        PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */
-
-        /* Init a fast PWM on Timer4 */
-        TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */
-        TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */
-        OCR4A = 0;
-
-        /* Enable the OC4A output */
-        DDRC |= _BV(PORTC6);
-
-        TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
-
-        TCCR3A = 0x0; // Options not needed
-        TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC
-        OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback
-    #else
-        DDRC |= _BV(PORTC6);
-
-        TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
-
-        TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
-        TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30);
-    #endif
-}
-
 float mod(float a, int b)
 {
     float r = fmod(a, b);
@@ -456,7 +464,10 @@ ISR(TIMER3_COMPA_vect) {
 void play_notes(float (*np)[][2], uint8_t n_count, bool n_repeat, float n_rest) {
 
 if (audio_config.enable) {
-    cli();
+    TIMSK3 &= ~_BV(OCIE3A);
+    if (!inited) {
+        audio_init();
+    }
        // Cancel note if a note is playing
     if (note)
         stop_all_notes();
@@ -485,7 +496,6 @@ if (audio_config.enable) {
         TIMSK3 |= _BV(OCIE3A);
         TCCR3A |= _BV(COM3A1);
     #endif
-    sei();
 }
 
 }
@@ -493,7 +503,10 @@ if (audio_config.enable) {
 void play_sample(uint8_t * s, uint16_t l, bool r) {
 
 if (audio_config.enable) {
-
+    TIMSK3 &= ~_BV(OCIE3A);
+    if (!inited) {
+        audio_init();
+    }
     stop_all_notes();
     place_int = 0;
     sample = s;
@@ -512,7 +525,10 @@ if (audio_config.enable) {
 void play_note(double freq, int vol) {
 
 if (audio_config.enable && voices < 8) {
-    cli();
+    TIMSK3 &= ~_BV(OCIE3A);
+    if (!inited) {
+        audio_init();
+    }
     // Cancel notes if notes are playing
     if (notes)
         stop_all_notes();
@@ -532,7 +548,6 @@ if (audio_config.enable && voices < 8) {
         TIMSK3 |= _BV(OCIE3A);
         TCCR3A |= _BV(COM3A1);
     #endif
-    sei();
 }
 
 }
@@ -545,8 +560,11 @@ void play_startup_tone()
 {
 }
 
+
+
 __attribute__ ((weak))
 void play_goodbye_tone()
 {
+
 }
 //------------------------------------------------------------------------------
index 85756af9d4a772453ed42dd11adbdacb47a56ce8..0fe3eac9afc356df7657403cb67de661da55bd7c 100644 (file)
@@ -55,7 +55,6 @@ void play_sample(uint8_t * s, uint16_t l, bool r);
 void play_note(double freq, int vol);
 void stop_note(double freq);
 void stop_all_notes(void);
-void init_notes(void);
 void play_notes(float (*np)[][2], uint8_t n_count, bool n_repeat, float n_rest);
 
 #define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \