Fix up the ARM audio support (#2136)

* Get audio working on clueboard/60

* add keys for music mode

* Change doubles to floats

* add keys for all the songs

* revert to the default startup sound

* Remove music mode until we can figure out why it crashes
This commit is contained in:
skullydazed 2018-01-13 20:38:25 -08:00 committed by Jack Humbert
parent fd359e23e8
commit 5836d1a06a
8 changed files with 230 additions and 132 deletions

View file

@ -34,7 +34,11 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes)
OPT_DEFS += -DAUDIO_ENABLE OPT_DEFS += -DAUDIO_ENABLE
MUSIC_ENABLE := 1 MUSIC_ENABLE := 1
SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
ifeq ($(PLATFORM),AVR)
SRC += $(QUANTUM_DIR)/audio/audio.c SRC += $(QUANTUM_DIR)/audio/audio.c
else
SRC += $(QUANTUM_DIR)/audio/audio_arm.c
endif
SRC += $(QUANTUM_DIR)/audio/voices.c SRC += $(QUANTUM_DIR)/audio/voices.c
SRC += $(QUANTUM_DIR)/audio/luts.c SRC += $(QUANTUM_DIR)/audio/luts.c
endif endif

View file

@ -8,6 +8,30 @@ enum keyboard_layers {
_CL _CL
}; };
enum custom_keycodes {
S_BSKTC = SAFE_RANGE,
S_ODEJY,
S_RCKBY,
S_DOEDR,
S_SCALE,
S_ONEUP,
S_COIN,
S_SONIC,
S_ZELDA
};
#ifdef AUDIO_ENABLE
float song_basketcase[][2] = SONG(BASKET_CASE);
float song_ode_to_joy[][2] = SONG(ODE_TO_JOY);
float song_rock_a_bye_baby[][2] = SONG(ROCK_A_BYE_BABY);
float song_doe_a_deer[][2] = SONG(DOE_A_DEER);
float song_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float song_coin[][2] = SONG(COIN_SOUND);
float song_one_up[][2] = SONG(ONE_UP_SOUND);
float song_sonic_ring[][2] = SONG(SONIC_RING);
float song_zelda_puzzle[][2] = SONG(ZELDA_PUZZLE);
#endif
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer /* Layer 0: Default Layer
* ,-----------------------------------------------------------. * ,-----------------------------------------------------------.
@ -33,11 +57,71 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \ _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \
_______, _______, _______, _______, _______, _______, MO(_FL), _______), _______,_______,_______, _______, _______, _______, MO(_FL), _______),
[_CL] = KEYMAP( [_CL] = KEYMAP(
BL_STEP,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\ BL_STEP,S_BSKTC,S_ODEJY,S_RCKBY,S_DOEDR,S_SCALE,S_ONEUP,S_COIN, S_SONIC,S_ZELDA,_______,_______,_______,_______,_______,\
_______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \ _______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \ _______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______, _______, _______, _______, _______, MO(_FL), _______) _______, _______, _______, _______, _______, _______, MO(_FL), _______)
}; };
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case S_BSKTC:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_basketcase);
}
return false;
case S_ODEJY:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_ode_to_joy);
}
return false;
case S_RCKBY:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_rock_a_bye_baby);
}
return false;
case S_DOEDR:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_doe_a_deer);
}
return false;
case S_SCALE:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_scale);
}
return false;
case S_ONEUP:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_one_up);
}
return false;
case S_COIN:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_coin);
}
return false;
case S_SONIC:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_sonic_ring);
}
return false;
case S_ZELDA:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_zelda_puzzle);
}
return false;
}
return true;
}

View file

@ -41,13 +41,8 @@ void backlight_set(uint8_t level) {
#endif #endif
} }
void led_init_ports() {
printf("led_init_ports()\n");
palSetPadMode(GPIOB, 7, PAL_MODE_OUTPUT_PUSHPULL);
}
void led_set_kb(uint8_t usb_led) { void led_set_kb(uint8_t usb_led) {
printf("led_init_ports()\n"); printf("led_set_kb(%d)\n", usb_led);
if (usb_led & (1<<USB_LED_CAPS_LOCK)) { if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
// Turn capslock on // Turn capslock on
palSetPad(GPIOB, 7); palSetPad(GPIOB, 7);

View file

@ -71,10 +71,7 @@ void matrix_init(void) {
memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t)); memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
memset(matrix_debouncing, 0, MATRIX_COLS * sizeof(matrix_row_t)); memset(matrix_debouncing, 0, MATRIX_COLS * sizeof(matrix_row_t));
/* Setup capslock */ palClearPad(GPIOB, 7); // Turn off capslock
// palSetPadMode(GPIOB, 7, PAL_MODE_OUTPUT_PUSHPULL);
// palClearPad(GPIOB, 7);
matrix_init_quantum(); matrix_init_quantum();
} }
@ -138,6 +135,7 @@ uint8_t matrix_scan(void) {
debouncing_time = timer_read(); debouncing_time = timer_read();
} }
} }
if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
for (int row = 0; row < MATRIX_ROWS; row++) { for (int row = 0; row < MATRIX_ROWS; row++) {
matrix[row] = 0; matrix[row] = 0;

View file

@ -50,5 +50,5 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend #SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover NKRO_ENABLE = yes # USB Nkey Rollover
CUSTOM_MATRIX = yes # Custom matrix file CUSTOM_MATRIX = yes # Custom matrix file
#AUDIO_ENABLE = yes AUDIO_ENABLE = yes
# SERIAL_LINK_ENABLE = yes # SERIAL_LINK_ENABLE = yes

View file

@ -18,7 +18,6 @@
#include "ch.h" #include "ch.h"
#include "hal.h" #include "hal.h"
#include <stdio.h>
#include <string.h> #include <string.h>
#include "print.h" #include "print.h"
#include "keymap.h" #include "keymap.h"

View file

@ -53,127 +53,127 @@
// Note Timbre // Note Timbre
// Changes how the notes sound // Changes how the notes sound
#define TIMBRE_12 0.125 #define TIMBRE_12 0.125f
#define TIMBRE_25 0.250 #define TIMBRE_25 0.250f
#define TIMBRE_50 0.500 #define TIMBRE_50 0.500f
#define TIMBRE_75 0.750 #define TIMBRE_75 0.750f
#define TIMBRE_DEFAULT TIMBRE_50 #define TIMBRE_DEFAULT TIMBRE_50
// Notes - # = Octave // Notes - # = Octave
#define NOTE_REST 0.00 #define NOTE_REST 0.00f
/* These notes are currently bugged /* These notes are currently bugged
#define NOTE_C0 16.35 #define NOTE_C0 16.35f
#define NOTE_CS0 17.32 #define NOTE_CS0 17.32f
#define NOTE_D0 18.35 #define NOTE_D0 18.35f
#define NOTE_DS0 19.45 #define NOTE_DS0 19.45f
#define NOTE_E0 20.60 #define NOTE_E0 20.60f
#define NOTE_F0 21.83 #define NOTE_F0 21.83f
#define NOTE_FS0 23.12 #define NOTE_FS0 23.12f
#define NOTE_G0 24.50 #define NOTE_G0 24.50f
#define NOTE_GS0 25.96 #define NOTE_GS0 25.96f
#define NOTE_A0 27.50 #define NOTE_A0 27.50f
#define NOTE_AS0 29.14 #define NOTE_AS0 29.14f
#define NOTE_B0 30.87 #define NOTE_B0 30.87f
#define NOTE_C1 32.70 #define NOTE_C1 32.70f
#define NOTE_CS1 34.65 #define NOTE_CS1 34.65f
#define NOTE_D1 36.71 #define NOTE_D1 36.71f
#define NOTE_DS1 38.89 #define NOTE_DS1 38.89f
#define NOTE_E1 41.20 #define NOTE_E1 41.20f
#define NOTE_F1 43.65 #define NOTE_F1 43.65f
#define NOTE_FS1 46.25 #define NOTE_FS1 46.25f
#define NOTE_G1 49.00 #define NOTE_G1 49.00f
#define NOTE_GS1 51.91 #define NOTE_GS1 51.91f
#define NOTE_A1 55.00 #define NOTE_A1 55.00f
#define NOTE_AS1 58.27 #define NOTE_AS1 58.27f
*/ */
#define NOTE_B1 61.74 #define NOTE_B1 61.74f
#define NOTE_C2 65.41 #define NOTE_C2 65.41f
#define NOTE_CS2 69.30 #define NOTE_CS2 69.30f
#define NOTE_D2 73.42 #define NOTE_D2 73.42f
#define NOTE_DS2 77.78 #define NOTE_DS2 77.78f
#define NOTE_E2 82.41 #define NOTE_E2 82.41f
#define NOTE_F2 87.31 #define NOTE_F2 87.31f
#define NOTE_FS2 92.50 #define NOTE_FS2 92.50f
#define NOTE_G2 98.00 #define NOTE_G2 98.00f
#define NOTE_GS2 103.83 #define NOTE_GS2 103.83f
#define NOTE_A2 110.00 #define NOTE_A2 110.00f
#define NOTE_AS2 116.54 #define NOTE_AS2 116.54f
#define NOTE_B2 123.47 #define NOTE_B2 123.47f
#define NOTE_C3 130.81 #define NOTE_C3 130.81f
#define NOTE_CS3 138.59 #define NOTE_CS3 138.59f
#define NOTE_D3 146.83 #define NOTE_D3 146.83f
#define NOTE_DS3 155.56 #define NOTE_DS3 155.56f
#define NOTE_E3 164.81 #define NOTE_E3 164.81f
#define NOTE_F3 174.61 #define NOTE_F3 174.61f
#define NOTE_FS3 185.00 #define NOTE_FS3 185.00f
#define NOTE_G3 196.00 #define NOTE_G3 196.00f
#define NOTE_GS3 207.65 #define NOTE_GS3 207.65f
#define NOTE_A3 220.00 #define NOTE_A3 220.00f
#define NOTE_AS3 233.08 #define NOTE_AS3 233.08f
#define NOTE_B3 246.94 #define NOTE_B3 246.94f
#define NOTE_C4 261.63 #define NOTE_C4 261.63f
#define NOTE_CS4 277.18 #define NOTE_CS4 277.18f
#define NOTE_D4 293.66 #define NOTE_D4 293.66f
#define NOTE_DS4 311.13 #define NOTE_DS4 311.13f
#define NOTE_E4 329.63 #define NOTE_E4 329.63f
#define NOTE_F4 349.23 #define NOTE_F4 349.23f
#define NOTE_FS4 369.99 #define NOTE_FS4 369.99f
#define NOTE_G4 392.00 #define NOTE_G4 392.00f
#define NOTE_GS4 415.30 #define NOTE_GS4 415.30f
#define NOTE_A4 440.00 #define NOTE_A4 440.00f
#define NOTE_AS4 466.16 #define NOTE_AS4 466.16f
#define NOTE_B4 493.88 #define NOTE_B4 493.88f
#define NOTE_C5 523.25 #define NOTE_C5 523.25f
#define NOTE_CS5 554.37 #define NOTE_CS5 554.37f
#define NOTE_D5 587.33 #define NOTE_D5 587.33f
#define NOTE_DS5 622.25 #define NOTE_DS5 622.25f
#define NOTE_E5 659.26 #define NOTE_E5 659.26f
#define NOTE_F5 698.46 #define NOTE_F5 698.46f
#define NOTE_FS5 739.99 #define NOTE_FS5 739.99f
#define NOTE_G5 783.99 #define NOTE_G5 783.99f
#define NOTE_GS5 830.61 #define NOTE_GS5 830.61f
#define NOTE_A5 880.00 #define NOTE_A5 880.00f
#define NOTE_AS5 932.33 #define NOTE_AS5 932.33f
#define NOTE_B5 987.77 #define NOTE_B5 987.77f
#define NOTE_C6 1046.50 #define NOTE_C6 1046.50f
#define NOTE_CS6 1108.73 #define NOTE_CS6 1108.73f
#define NOTE_D6 1174.66 #define NOTE_D6 1174.66f
#define NOTE_DS6 1244.51 #define NOTE_DS6 1244.51f
#define NOTE_E6 1318.51 #define NOTE_E6 1318.51f
#define NOTE_F6 1396.91 #define NOTE_F6 1396.91f
#define NOTE_FS6 1479.98 #define NOTE_FS6 1479.98f
#define NOTE_G6 1567.98 #define NOTE_G6 1567.98f
#define NOTE_GS6 1661.22 #define NOTE_GS6 1661.22f
#define NOTE_A6 1760.00 #define NOTE_A6 1760.00f
#define NOTE_AS6 1864.66 #define NOTE_AS6 1864.66f
#define NOTE_B6 1975.53 #define NOTE_B6 1975.53f
#define NOTE_C7 2093.00 #define NOTE_C7 2093.00f
#define NOTE_CS7 2217.46 #define NOTE_CS7 2217.46f
#define NOTE_D7 2349.32 #define NOTE_D7 2349.32f
#define NOTE_DS7 2489.02 #define NOTE_DS7 2489.02f
#define NOTE_E7 2637.02 #define NOTE_E7 2637.02f
#define NOTE_F7 2793.83 #define NOTE_F7 2793.83f
#define NOTE_FS7 2959.96 #define NOTE_FS7 2959.96f
#define NOTE_G7 3135.96 #define NOTE_G7 3135.96f
#define NOTE_GS7 3322.44 #define NOTE_GS7 3322.44f
#define NOTE_A7 3520.00 #define NOTE_A7 3520.00f
#define NOTE_AS7 3729.31 #define NOTE_AS7 3729.31f
#define NOTE_B7 3951.07 #define NOTE_B7 3951.07f
#define NOTE_C8 4186.01 #define NOTE_C8 4186.01f
#define NOTE_CS8 4434.92 #define NOTE_CS8 4434.92f
#define NOTE_D8 4698.64 #define NOTE_D8 4698.64f
#define NOTE_DS8 4978.03 #define NOTE_DS8 4978.03f
#define NOTE_E8 5274.04 #define NOTE_E8 5274.04f
#define NOTE_F8 5587.65 #define NOTE_F8 5587.65f
#define NOTE_FS8 5919.91 #define NOTE_FS8 5919.91f
#define NOTE_G8 6271.93 #define NOTE_G8 6271.93f
#define NOTE_GS8 6644.88 #define NOTE_GS8 6644.88f
#define NOTE_A8 7040.00 #define NOTE_A8 7040.00f
#define NOTE_AS8 7458.62 #define NOTE_AS8 7458.62f
#define NOTE_B8 7902.13 #define NOTE_B8 7902.13f
// Flat Aliases // Flat Aliases
#define NOTE_DF0 NOTE_CS0 #define NOTE_DF0 NOTE_CS0

View file

@ -53,6 +53,24 @@
E__NOTE(_CS4), E__NOTE(_B4), QD_NOTE(_AS4), \ E__NOTE(_CS4), E__NOTE(_B4), QD_NOTE(_AS4), \
E__NOTE(_AS4), E__NOTE(_AS4), QD_NOTE(_B4), E__NOTE(_AS4), E__NOTE(_AS4), QD_NOTE(_B4),
#define CLUEBOARD_SOUND \
HD_NOTE(_C3), HD_NOTE(_D3), HD_NOTE(_E3), HD_NOTE(_F3), HD_NOTE(_G3), HD_NOTE(_A4), HD_NOTE(_B4), HD_NOTE(_C4)
/*
HD_NOTE(_G3), HD_NOTE(_E3), HD_NOTE(_C3), \
Q__NOTE(_E3), Q__NOTE(_C3), Q__NOTE(_G3), \
Q__NOTE(_E3)
*/
/*
HD_NOTE(_C3), HD_NOTE(_G3), HD_NOTE(_E3), \
Q__NOTE(_G3), Q__NOTE(_E3), Q__NOTE(_G3), \
Q__NOTE(_F3)
*/
#define BASKET_CASE \
QD_NOTE(_G3), E__NOTE(_F3), E__NOTE(_E3), Q__NOTE(_F3), M__NOTE(_G3, 8+32), Q__NOTE(_REST), \
Q__NOTE(_B4), Q__NOTE(_C4), Q__NOTE(_B4), E__NOTE(_A4), Q__NOTE(_G3), M__NOTE(_G3, 8+32), Q__NOTE(_REST), \
Q__NOTE(_B4), Q__NOTE(_C4), Q__NOTE(_B4), E__NOTE(_A4), Q__NOTE(_G3), Q__NOTE(_G3), Q__NOTE(_G3), Q__NOTE(_G3), E__NOTE(_A4), E__NOTE(_C4), QD_NOTE(_B4), HD_NOTE(_B4)
#define STARTUP_SOUND \ #define STARTUP_SOUND \
E__NOTE(_E6), \ E__NOTE(_E6), \
E__NOTE(_A6), \ E__NOTE(_A6), \