From e405ab4bc6ff47d189d99c4d51aadf60a642d82a Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 18 Feb 2017 03:12:13 -0800
Subject: initial implementation of polyphony using variable length array of
notes on
---
quantum/process_keycode/process_midi.c | 199 ++++++++++++++++++++++++++++++++-
1 file changed, 197 insertions(+), 2 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 577dad43ac..bc48b39059 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -1,10 +1,204 @@
#include "process_midi.h"
+#if 0
bool midi_activated = false;
uint8_t midi_starting_note = 0x0C;
int midi_offset = 7;
+#endif
+
+typedef union {
+ uint16_t raw;
+ struct {
+ uint8_t octave :4;
+ uint8_t velocity :4;
+ uint8_t channel :4;
+ };
+} midi_config_t;
+
+midi_config_t midi_config;
+
+#define MIDI_INVALID_NOTE 0xFF
+
+#if 0
+typedef struct {
+ uint64_t low;
+ uint64_t high;
+} uint128_t;
+
+#if 0
+static void right_shift_uint128_t(uint128_t* val, uint8_t shift)
+{
+ uint64_t high_mask = ~0 >> (64 - shift);
+ uint64_t high_bits = (val->high & high_mask) << (64 - shift);
+ val->high = val->high >> shift;
+ val->low = (val->low >> shift) | high_bits;
+}
+#endif
+
+static uint64_t left_shift_uint64_t(uint64_t val, uint8_t shift)
+{
+ dprintf("left_shift_uint64_t(val, %c) ...\n", val, shift);
+ while (shift > 16u) {
+ dprintf(" left_shift_uint64_t: val=?, shift=%c\n", val, shift);
+ val <<= 16;
+ shift -= 16;
+ }
+ dprintf(" left_shift_uint64_t: val=?, shift=%c\n", val, shift);
+ val <<= shift;
+ return val;
+}
+
+static void set_bit_uint128_t(uint128_t* val, uint8_t shift)
+{
+ uint64_t x = 1u;
+
+ if (shift < 64)
+ {
+ x = left_shift_uint64_t(x, shift);
+ dprintf("x: %d\n", x);
+ dprintf("set_bit_uint128_t (%d): 0x%016X%016X\n", shift, 0, x);
+ val->low = val->low | left_shift_uint64_t(1u, shift);
+ }
+ else
+ {
+ x = left_shift_uint64_t(x, shift - 64);
+ dprintf("set_bit_uint128_t (%d): 0x%016X%016X\n", shift, x, 0);
+ val->high = val->high | left_shift_uint64_t(1u, shift - 64);
+ }
+}
+
+static void clear_bit_uint128_t(uint128_t* val, uint8_t shift)
+{
+ if (shift < 64)
+ {
+ val->low = val->low & ~left_shift_uint64_t(1u, shift);
+ }
+ else
+ {
+ val->high = val->high & ~left_shift_uint64_t(1u, shift - 64);
+ }
+}
-bool process_midi(uint16_t keycode, keyrecord_t *record) {
+static bool is_bit_set_uint128_t(const uint128_t* val, uint8_t shift)
+{
+ if (shift < 64)
+ {
+ return !!(val->low & (1u << shift));
+ }
+ else
+ {
+ return !!(val->high & (1u << (shift - 64)));
+ }
+}
+
+uint128_t note_status = { 0, 0 };
+#endif
+
+
+#define MIDI_MAX_NOTES_ON 10
+
+typedef struct {
+ uint8_t note;
+ uint8_t tone;
+} midi_notes_on_array_entry_t;
+
+typedef struct {
+ uint8_t length;
+ midi_notes_on_array_entry_t values[MIDI_MAX_NOTES_ON];
+} midi_notes_on_array_t;
+
+static midi_notes_on_array_t notes_on;
+
+inline uint8_t compute_velocity(uint8_t setting)
+{
+ return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1));
+}
+
+void midi_init(void)
+{
+ midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+ midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN);
+ midi_config.channel = 0;
+ notes_on.length = 0;
+}
+
+bool process_midi(uint16_t keycode, keyrecord_t *record)
+{
+ switch (keycode) {
+ case MIDI_TONE_MIN ... MIDI_TONE_MAX:
+ {
+ uint8_t channel = midi_config.channel;
+ uint8_t tone = keycode - MIDI_TONE_MIN;
+ uint8_t velocity = compute_velocity(midi_config.velocity);
+ if (record->event.pressed && notes_on.length < MIDI_MAX_NOTES_ON) {
+ uint8_t note = 12 * midi_config.octave + tone;
+ midi_send_noteon(&midi_device, channel, note, velocity);
+ dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ notes_on.values[notes_on.length].note = note;
+ notes_on.values[notes_on.length].tone = tone;
+ notes_on.length++;
+ }
+ else {
+ for (uint8_t i = 0; i < notes_on.length; i++) {
+ uint8_t note = notes_on.values[i].note;
+ if (tone == notes_on.values[i].tone) {
+ midi_send_noteoff(&midi_device, channel, note, velocity);
+ dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity);
+
+ for (uint8_t j=i; j < notes_on.length - 1; j++)
+ {
+ notes_on.values[j] = notes_on.values[j + 1];
+ }
+
+ notes_on.length--;
+ break;
+ }
+ }
+ }
+ return false;
+ }
+ case MIDI_OCTAVE_MIN ... MIDI_OCTAVE_MAX:
+ if (record->event.pressed)
+ midi_config.octave = keycode - MIDI_OCTAVE_MIN;
+ return false;
+ case MI_OCTD:
+ if (record->event.pressed && midi_config.octave > 0)
+ midi_config.octave--;
+ return false;
+ case MI_OCTU:
+ if (record->event.pressed && midi_config.octave < (MIDI_OCTAVE_MAX - MIDI_OCTAVE_MIN))
+ midi_config.octave++;
+ return false;
+ case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX:
+ if (record->event.pressed)
+ midi_config.velocity = keycode - MIDI_VELOCITY_MIN;
+ return false;
+ case MI_VELD:
+ if (record->event.pressed && midi_config.velocity > 0)
+ midi_config.velocity--;
+ return false;
+ case MI_VELU:
+ if (record->event.pressed)
+ midi_config.velocity++;
+ return false;
+ case MIDI_CHANNEL_MIN ... MIDI_CHANNEL_MAX:
+ if (record->event.pressed)
+ midi_config.channel = keycode - MIDI_CHANNEL_MIN;
+ return false;
+ case MI_CHD:
+ if (record->event.pressed)
+ midi_config.channel--;
+ return false;
+ case MI_CHU:
+ if (record->event.pressed)
+ midi_config.channel++;
+ return false;
+ case MI_SUS:
+ //TODO
+ return false;
+ };
+
+#if 0
if (keycode == MI_ON && record->event.pressed) {
midi_activated = true;
#ifdef AUDIO_ENABLE
@@ -64,5 +258,6 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) {
if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through
return false;
}
- return true;
+#endif
+ return true;
}
--
cgit v1.2.3
From f2b2e05f126403c8a6f0fc3d542beddac7974e9b Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 18 Feb 2017 03:13:43 -0800
Subject: clean up commented code
---
quantum/process_keycode/process_midi.c | 137 ---------------------------------
1 file changed, 137 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index bc48b39059..acaae7c30a 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -19,82 +19,6 @@ midi_config_t midi_config;
#define MIDI_INVALID_NOTE 0xFF
-#if 0
-typedef struct {
- uint64_t low;
- uint64_t high;
-} uint128_t;
-
-#if 0
-static void right_shift_uint128_t(uint128_t* val, uint8_t shift)
-{
- uint64_t high_mask = ~0 >> (64 - shift);
- uint64_t high_bits = (val->high & high_mask) << (64 - shift);
- val->high = val->high >> shift;
- val->low = (val->low >> shift) | high_bits;
-}
-#endif
-
-static uint64_t left_shift_uint64_t(uint64_t val, uint8_t shift)
-{
- dprintf("left_shift_uint64_t(val, %c) ...\n", val, shift);
- while (shift > 16u) {
- dprintf(" left_shift_uint64_t: val=?, shift=%c\n", val, shift);
- val <<= 16;
- shift -= 16;
- }
- dprintf(" left_shift_uint64_t: val=?, shift=%c\n", val, shift);
- val <<= shift;
- return val;
-}
-
-static void set_bit_uint128_t(uint128_t* val, uint8_t shift)
-{
- uint64_t x = 1u;
-
- if (shift < 64)
- {
- x = left_shift_uint64_t(x, shift);
- dprintf("x: %d\n", x);
- dprintf("set_bit_uint128_t (%d): 0x%016X%016X\n", shift, 0, x);
- val->low = val->low | left_shift_uint64_t(1u, shift);
- }
- else
- {
- x = left_shift_uint64_t(x, shift - 64);
- dprintf("set_bit_uint128_t (%d): 0x%016X%016X\n", shift, x, 0);
- val->high = val->high | left_shift_uint64_t(1u, shift - 64);
- }
-}
-
-static void clear_bit_uint128_t(uint128_t* val, uint8_t shift)
-{
- if (shift < 64)
- {
- val->low = val->low & ~left_shift_uint64_t(1u, shift);
- }
- else
- {
- val->high = val->high & ~left_shift_uint64_t(1u, shift - 64);
- }
-}
-
-static bool is_bit_set_uint128_t(const uint128_t* val, uint8_t shift)
-{
- if (shift < 64)
- {
- return !!(val->low & (1u << shift));
- }
- else
- {
- return !!(val->high & (1u << (shift - 64)));
- }
-}
-
-uint128_t note_status = { 0, 0 };
-#endif
-
-
#define MIDI_MAX_NOTES_ON 10
typedef struct {
@@ -198,66 +122,5 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
return false;
};
-#if 0
- if (keycode == MI_ON && record->event.pressed) {
- midi_activated = true;
-#ifdef AUDIO_ENABLE
- music_scale_user();
-#endif
- return false;
- }
-
- if (keycode == MI_OFF && record->event.pressed) {
- midi_activated = false;
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- return false;
- }
-
- if (midi_activated) {
- if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) {
- if (record->event.pressed) {
- midi_starting_note++; // Change key
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- }
- return false;
- }
- if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) {
- if (record->event.pressed) {
- midi_starting_note--; // Change key
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- }
- return false;
- }
- if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
- midi_offset++; // Change scale
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- return false;
- }
- if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
- midi_offset--; // Change scale
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- return false;
- }
- // basic
- // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row);
- // advanced
- // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row);
- // guitar
- uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row);
- // violin
- // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row);
-
- if (record->event.pressed) {
- // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
- midi_send_noteon(&midi_device, 0, note, 127);
- } else {
- // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
- midi_send_noteoff(&midi_device, 0, note, 127);
- }
-
- if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through
- return false;
- }
-#endif
return true;
}
--
cgit v1.2.3
From a4163466cb09144a96e2ea7bc697af1af8a5e770 Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 18 Feb 2017 03:40:49 -0800
Subject: Alternative version with a tone array
tone array:
text data bss dec hex filename
0 25698 0 25698 6462 satan_newsboytko.hex
0x6480 bytes written into 0x7000 bytes memory (89.73%).
note on array:
text data bss dec hex filename
0 25802 0 25802 64ca satan_newsboytko.hex
0x6500 bytes written into 0x7000 bytes memory (90.18%).
---
quantum/process_keycode/process_midi.c | 109 +++++++++++++++++++++++++++++++++
1 file changed, 109 insertions(+)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index acaae7c30a..4fbb288162 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -19,6 +19,10 @@ midi_config_t midi_config;
#define MIDI_INVALID_NOTE 0xFF
+#define MIDI_USE_NOTE_ON_ARRAY
+
+#ifdef MIDI_USE_NOTE_ON_ARRAY
+
#define MIDI_MAX_NOTES_ON 10
typedef struct {
@@ -33,6 +37,15 @@ typedef struct {
static midi_notes_on_array_t notes_on;
+#else
+
+#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1)
+static uint8_t tone_status[MIDI_TONE_COUNT];
+
+#endif
+
+
+
inline uint8_t compute_velocity(uint8_t setting)
{
return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1));
@@ -43,7 +56,14 @@ void midi_init(void)
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN);
midi_config.channel = 0;
+ #ifdef MIDI_USE_NOTE_ON_ARRAY
notes_on.length = 0;
+ #else
+ for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++)
+ {
+ tone_status[i] = MIDI_INVALID_NOTE;
+ }
+ #endif
}
bool process_midi(uint16_t keycode, keyrecord_t *record)
@@ -54,15 +74,31 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
uint8_t channel = midi_config.channel;
uint8_t tone = keycode - MIDI_TONE_MIN;
uint8_t velocity = compute_velocity(midi_config.velocity);
+ #ifdef MIDI_USE_NOTE_ON_ARRAY
if (record->event.pressed && notes_on.length < MIDI_MAX_NOTES_ON) {
+ #else
+ if (record->event.pressed) {
+ #endif
uint8_t note = 12 * midi_config.octave + tone;
midi_send_noteon(&midi_device, channel, note, velocity);
dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
+
+ #ifdef MIDI_USE_NOTE_ON_ARRAY
+
notes_on.values[notes_on.length].note = note;
notes_on.values[notes_on.length].tone = tone;
notes_on.length++;
+
+ #else
+
+ tone_status[tone] = note;
+
+ #endif
}
else {
+
+ #ifdef MIDI_USE_NOTE_ON_ARRAY
+
for (uint8_t i = 0; i < notes_on.length; i++) {
uint8_t note = notes_on.values[i].note;
if (tone == notes_on.values[i].tone) {
@@ -78,6 +114,18 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
break;
}
}
+
+ #else
+
+ uint8_t note = tone_status[tone];
+ if (note != MIDI_INVALID_NOTE)
+ {
+ midi_send_noteoff(&midi_device, channel, note, velocity);
+ dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ }
+ tone_status[tone] = MIDI_INVALID_NOTE;
+
+ #endif
}
return false;
}
@@ -122,5 +170,66 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
return false;
};
+#if 0
+ if (keycode == MI_ON && record->event.pressed) {
+ midi_activated = true;
+#ifdef AUDIO_ENABLE
+ music_scale_user();
+#endif
+ return false;
+ }
+
+ if (keycode == MI_OFF && record->event.pressed) {
+ midi_activated = false;
+ midi_send_cc(&midi_device, 0, 0x7B, 0);
+ return false;
+ }
+
+ if (midi_activated) {
+ if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) {
+ if (record->event.pressed) {
+ midi_starting_note++; // Change key
+ midi_send_cc(&midi_device, 0, 0x7B, 0);
+ }
+ return false;
+ }
+ if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) {
+ if (record->event.pressed) {
+ midi_starting_note--; // Change key
+ midi_send_cc(&midi_device, 0, 0x7B, 0);
+ }
+ return false;
+ }
+ if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
+ midi_offset++; // Change scale
+ midi_send_cc(&midi_device, 0, 0x7B, 0);
+ return false;
+ }
+ if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
+ midi_offset--; // Change scale
+ midi_send_cc(&midi_device, 0, 0x7B, 0);
+ return false;
+ }
+ // basic
+ // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row);
+ // advanced
+ // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row);
+ // guitar
+ uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row);
+ // violin
+ // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row);
+
+ if (record->event.pressed) {
+ // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
+ midi_send_noteon(&midi_device, 0, note, 127);
+ } else {
+ // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
+ midi_send_noteoff(&midi_device, 0, note, 127);
+ }
+
+ if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through
+ return false;
+ }
+#endif
return true;
}
--
cgit v1.2.3
From f67aefc522dd8b72711e7fc5280e1cae1470d1c5 Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 18 Feb 2017 03:43:30 -0800
Subject: remove disabled code
---
quantum/process_keycode/process_midi.c | 129 ---------------------------------
1 file changed, 129 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 4fbb288162..2ce7418ea7 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -1,11 +1,5 @@
#include "process_midi.h"
-#if 0
-bool midi_activated = false;
-uint8_t midi_starting_note = 0x0C;
-int midi_offset = 7;
-#endif
-
typedef union {
uint16_t raw;
struct {
@@ -19,33 +13,9 @@ midi_config_t midi_config;
#define MIDI_INVALID_NOTE 0xFF
-#define MIDI_USE_NOTE_ON_ARRAY
-
-#ifdef MIDI_USE_NOTE_ON_ARRAY
-
-#define MIDI_MAX_NOTES_ON 10
-
-typedef struct {
- uint8_t note;
- uint8_t tone;
-} midi_notes_on_array_entry_t;
-
-typedef struct {
- uint8_t length;
- midi_notes_on_array_entry_t values[MIDI_MAX_NOTES_ON];
-} midi_notes_on_array_t;
-
-static midi_notes_on_array_t notes_on;
-
-#else
-
#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1)
static uint8_t tone_status[MIDI_TONE_COUNT];
-#endif
-
-
-
inline uint8_t compute_velocity(uint8_t setting)
{
return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1));
@@ -74,49 +44,13 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
uint8_t channel = midi_config.channel;
uint8_t tone = keycode - MIDI_TONE_MIN;
uint8_t velocity = compute_velocity(midi_config.velocity);
- #ifdef MIDI_USE_NOTE_ON_ARRAY
- if (record->event.pressed && notes_on.length < MIDI_MAX_NOTES_ON) {
- #else
if (record->event.pressed) {
- #endif
uint8_t note = 12 * midi_config.octave + tone;
midi_send_noteon(&midi_device, channel, note, velocity);
dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
-
- #ifdef MIDI_USE_NOTE_ON_ARRAY
-
- notes_on.values[notes_on.length].note = note;
- notes_on.values[notes_on.length].tone = tone;
- notes_on.length++;
-
- #else
-
tone_status[tone] = note;
-
- #endif
}
else {
-
- #ifdef MIDI_USE_NOTE_ON_ARRAY
-
- for (uint8_t i = 0; i < notes_on.length; i++) {
- uint8_t note = notes_on.values[i].note;
- if (tone == notes_on.values[i].tone) {
- midi_send_noteoff(&midi_device, channel, note, velocity);
- dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity);
-
- for (uint8_t j=i; j < notes_on.length - 1; j++)
- {
- notes_on.values[j] = notes_on.values[j + 1];
- }
-
- notes_on.length--;
- break;
- }
- }
-
- #else
-
uint8_t note = tone_status[tone];
if (note != MIDI_INVALID_NOTE)
{
@@ -124,8 +58,6 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity);
}
tone_status[tone] = MIDI_INVALID_NOTE;
-
- #endif
}
return false;
}
@@ -170,66 +102,5 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
return false;
};
-#if 0
- if (keycode == MI_ON && record->event.pressed) {
- midi_activated = true;
-#ifdef AUDIO_ENABLE
- music_scale_user();
-#endif
- return false;
- }
-
- if (keycode == MI_OFF && record->event.pressed) {
- midi_activated = false;
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- return false;
- }
-
- if (midi_activated) {
- if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) {
- if (record->event.pressed) {
- midi_starting_note++; // Change key
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- }
- return false;
- }
- if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) {
- if (record->event.pressed) {
- midi_starting_note--; // Change key
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- }
- return false;
- }
- if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
- midi_offset++; // Change scale
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- return false;
- }
- if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
- midi_offset--; // Change scale
- midi_send_cc(&midi_device, 0, 0x7B, 0);
- return false;
- }
- // basic
- // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row);
- // advanced
- // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row);
- // guitar
- uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row);
- // violin
- // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row);
-
- if (record->event.pressed) {
- // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
- midi_send_noteon(&midi_device, 0, note, 127);
- } else {
- // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
- midi_send_noteoff(&midi_device, 0, note, 127);
- }
-
- if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through
- return false;
- }
-#endif
return true;
}
--
cgit v1.2.3
From 7c5e510fe2e57d1b3c0f98612f1f89d413c07525 Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 18 Feb 2017 04:25:17 -0800
Subject: add support for pedal cc messages
---
quantum/process_keycode/process_midi.c | 61 ++++++++++++++++++++++++++++------
quantum/quantum_keycodes.h | 11 +++---
2 files changed, 57 insertions(+), 15 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 2ce7418ea7..f7a8b6650f 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -62,43 +62,84 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
return false;
}
case MIDI_OCTAVE_MIN ... MIDI_OCTAVE_MAX:
- if (record->event.pressed)
+ if (record->event.pressed) {
midi_config.octave = keycode - MIDI_OCTAVE_MIN;
+ dprintf("midi octave %d\n", midi_config.octave);
+ }
return false;
case MI_OCTD:
- if (record->event.pressed && midi_config.octave > 0)
+ if (record->event.pressed && midi_config.octave > 0) {
midi_config.octave--;
+ dprintf("midi octave %d\n", midi_config.octave);
+ }
return false;
case MI_OCTU:
- if (record->event.pressed && midi_config.octave < (MIDI_OCTAVE_MAX - MIDI_OCTAVE_MIN))
+ if (record->event.pressed && midi_config.octave < (MIDI_OCTAVE_MAX - MIDI_OCTAVE_MIN)) {
midi_config.octave++;
+ dprintf("midi octave %d\n", midi_config.octave);
+ }
return false;
case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX:
- if (record->event.pressed)
+ if (record->event.pressed) {
midi_config.velocity = keycode - MIDI_VELOCITY_MIN;
+ dprintf("midi velocity %d\n", midi_config.velocity);
+ }
return false;
case MI_VELD:
- if (record->event.pressed && midi_config.velocity > 0)
+ if (record->event.pressed && midi_config.velocity > 0) {
midi_config.velocity--;
+ dprintf("midi velocity %d\n", midi_config.velocity);
+ }
return false;
case MI_VELU:
- if (record->event.pressed)
+ if (record->event.pressed) {
midi_config.velocity++;
+ dprintf("midi velocity %d\n", midi_config.velocity);
+ }
return false;
case MIDI_CHANNEL_MIN ... MIDI_CHANNEL_MAX:
- if (record->event.pressed)
+ if (record->event.pressed) {
midi_config.channel = keycode - MIDI_CHANNEL_MIN;
+ dprintf("midi channel %d\n", midi_config.channel);
+ }
return false;
case MI_CHD:
- if (record->event.pressed)
+ if (record->event.pressed) {
midi_config.channel--;
+ dprintf("midi channel %d\n", midi_config.channel);
+ }
return false;
case MI_CHU:
- if (record->event.pressed)
+ if (record->event.pressed) {
midi_config.channel++;
+ dprintf("midi channel %d\n", midi_config.channel);
+ }
+ return false;
+ case MI_OFF:
+ if (record->event.pressed) {
+ midi_send_cc(&midi_device, midi_config.channel, 0x7B, 0);
+ dprintf("midi off\n");
+ }
return false;
case MI_SUS:
- //TODO
+ midi_send_cc(&midi_device, midi_config.channel, 0x40, record->event.pressed ? 127 : 0);
+ dprintf("midi sustain %d\n", record->event.pressed);
+ return false;
+ case MI_PORT:
+ midi_send_cc(&midi_device, midi_config.channel, 0x41, record->event.pressed ? 127 : 0);
+ dprintf("midi portamento %d\n", record->event.pressed);
+ return false;
+ case MI_SOST:
+ midi_send_cc(&midi_device, midi_config.channel, 0x42, record->event.pressed ? 127 : 0);
+ dprintf("midi sostenuto %d\n", record->event.pressed);
+ return false;
+ case MI_SOFT:
+ midi_send_cc(&midi_device, midi_config.channel, 0x43, record->event.pressed ? 127 : 0);
+ dprintf("midi soft %d\n", record->event.pressed);
+ return false;
+ case MI_LEG:
+ midi_send_cc(&midi_device, midi_config.channel, 0x43, record->event.pressed ? 127 : 0);
+ dprintf("midi legato %d\n", record->event.pressed);
return false;
};
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index a024a96395..f2b9509b56 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -109,8 +109,6 @@ enum quantum_keycodes {
#ifdef MIDI_ENABLE
// Midi
- MIDI_ON,
- MIDI_OFF,
MIDI_TONE_MIN,
@@ -221,7 +219,13 @@ enum quantum_keycodes {
MI_CHD, // previous channel
MI_CHU, // next channel
+ MI_OFF, // all notes off
+
MI_SUS, // sustain
+ MI_PORT, // portamento
+ MI_SOST, // sostenuto
+ MI_SOFT, // soft
+ MI_LEG, // legato
#endif
// Backlight functionality
@@ -394,9 +398,6 @@ enum quantum_keycodes {
#define BL_ON BL_9
#define BL_OFF BL_0
-#define MI_ON MIDI_ON
-#define MI_OFF MIDI_OFF
-
// GOTO layer - 16 layers max
// when:
// ON_PRESS = 1
--
cgit v1.2.3
From dd8f8e6baeb1549735403edf2a2f04f07edb4bf2 Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 18 Feb 2017 05:32:55 -0800
Subject: implement modulation
---
quantum/process_keycode/process_midi.c | 58 +++++++++-
quantum/process_keycode/process_midi.h | 201 +--------------------------------
quantum/quantum_keycodes.h | 6 +-
tmk_core/protocol/lufa/lufa.c | 2 +-
4 files changed, 61 insertions(+), 206 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index f7a8b6650f..d09aa0b382 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -1,4 +1,5 @@
#include "process_midi.h"
+#include "timer.h"
typedef union {
uint16_t raw;
@@ -6,6 +7,7 @@ typedef union {
uint8_t octave :4;
uint8_t velocity :4;
uint8_t channel :4;
+ uint8_t modulation_interval :4;
};
} midi_config_t;
@@ -16,6 +18,10 @@ midi_config_t midi_config;
#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1)
static uint8_t tone_status[MIDI_TONE_COUNT];
+static uint8_t midi_modulation;
+static int8_t midi_modulation_step;
+static uint16_t midi_modulation_timer;
+
inline uint8_t compute_velocity(uint8_t setting)
{
return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1));
@@ -26,14 +32,40 @@ void midi_init(void)
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN);
midi_config.channel = 0;
- #ifdef MIDI_USE_NOTE_ON_ARRAY
- notes_on.length = 0;
- #else
+ midi_config.modulation_interval = 8;
+
for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++)
{
tone_status[i] = MIDI_INVALID_NOTE;
}
- #endif
+
+ midi_modulation = 0;
+ midi_modulation_step = 0;
+ midi_modulation_timer = 0;
+}
+
+void midi_task(void)
+{
+ if (timer_elapsed(midi_modulation_timer) < midi_config.modulation_interval)
+ return;
+ midi_modulation_timer = timer_read();
+
+ if (midi_modulation_step != 0)
+ {
+ dprintf("midi modulation %d\n", midi_modulation);
+ midi_send_cc(&midi_device, midi_config.channel, 0x1, midi_modulation);
+
+ if (midi_modulation_step < 0 && midi_modulation < -midi_modulation_step) {
+ midi_modulation = 0;
+ midi_modulation_step = 0;
+ return;
+ }
+
+ midi_modulation += midi_modulation_step;
+
+ if (midi_modulation > 127)
+ midi_modulation = 127;
+ }
}
bool process_midi(uint16_t keycode, keyrecord_t *record)
@@ -141,6 +173,24 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
midi_send_cc(&midi_device, midi_config.channel, 0x43, record->event.pressed ? 127 : 0);
dprintf("midi legato %d\n", record->event.pressed);
return false;
+ case MI_MOD:
+ midi_modulation_step = record->event.pressed ? 1 : -1;
+ return false;
+ case MI_MODSD:
+ if (record->event.pressed) {
+ midi_config.modulation_interval++;
+ // prevent overflow
+ if (midi_config.modulation_interval == 0)
+ midi_config.modulation_interval--;
+ dprintf("midi modulation interval %d\n", midi_config.modulation_interval);
+ }
+ return false;
+ case MI_MODSU:
+ if (record->event.pressed && midi_config.modulation_interval > 0) {
+ midi_config.modulation_interval--;
+ dprintf("midi modulation interval %d\n", midi_config.modulation_interval);
+ }
+ return false;
};
return true;
diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h
index b0e0aeb832..66ce60b0e5 100644
--- a/quantum/process_keycode/process_midi.h
+++ b/quantum/process_keycode/process_midi.h
@@ -5,206 +5,7 @@
#include "midi.h"
void midi_init(void);
-
+void midi_task(void);
bool process_midi(uint16_t keycode, keyrecord_t *record);
-#define MIDI(n) ((n) | 0x6000)
-#define MIDI12 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000
-
-#define CHNL(note, channel) (note + (channel << 8))
-
-#define SCALE (int8_t []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
- 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
- 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
- 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
- 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
-
-#define N_CN1 (0x600C + (12 * -1) + 0 )
-#define N_CN1S (0x600C + (12 * -1) + 1 )
-#define N_DN1F (0x600C + (12 * -1) + 1 )
-#define N_DN1 (0x600C + (12 * -1) + 2 )
-#define N_DN1S (0x600C + (12 * -1) + 3 )
-#define N_EN1F (0x600C + (12 * -1) + 3 )
-#define N_EN1 (0x600C + (12 * -1) + 4 )
-#define N_FN1 (0x600C + (12 * -1) + 5 )
-#define N_FN1S (0x600C + (12 * -1) + 6 )
-#define N_GN1F (0x600C + (12 * -1) + 6 )
-#define N_GN1 (0x600C + (12 * -1) + 7 )
-#define N_GN1S (0x600C + (12 * -1) + 8 )
-#define N_AN1F (0x600C + (12 * -1) + 8 )
-#define N_AN1 (0x600C + (12 * -1) + 9 )
-#define N_AN1S (0x600C + (12 * -1) + 10)
-#define N_BN1F (0x600C + (12 * -1) + 10)
-#define N_BN1 (0x600C + (12 * -1) + 11)
-#define N_C0 (0x600C + (12 * 0) + 0 )
-#define N_C0S (0x600C + (12 * 0) + 1 )
-#define N_D0F (0x600C + (12 * 0) + 1 )
-#define N_D0 (0x600C + (12 * 0) + 2 )
-#define N_D0S (0x600C + (12 * 0) + 3 )
-#define N_E0F (0x600C + (12 * 0) + 3 )
-#define N_E0 (0x600C + (12 * 0) + 4 )
-#define N_F0 (0x600C + (12 * 0) + 5 )
-#define N_F0S (0x600C + (12 * 0) + 6 )
-#define N_G0F (0x600C + (12 * 0) + 6 )
-#define N_G0 (0x600C + (12 * 0) + 7 )
-#define N_G0S (0x600C + (12 * 0) + 8 )
-#define N_A0F (0x600C + (12 * 0) + 8 )
-#define N_A0 (0x600C + (12 * 0) + 9 )
-#define N_A0S (0x600C + (12 * 0) + 10)
-#define N_B0F (0x600C + (12 * 0) + 10)
-#define N_B0 (0x600C + (12 * 0) + 11)
-#define N_C1 (0x600C + (12 * 1) + 0 )
-#define N_C1S (0x600C + (12 * 1) + 1 )
-#define N_D1F (0x600C + (12 * 1) + 1 )
-#define N_D1 (0x600C + (12 * 1) + 2 )
-#define N_D1S (0x600C + (12 * 1) + 3 )
-#define N_E1F (0x600C + (12 * 1) + 3 )
-#define N_E1 (0x600C + (12 * 1) + 4 )
-#define N_F1 (0x600C + (12 * 1) + 5 )
-#define N_F1S (0x600C + (12 * 1) + 6 )
-#define N_G1F (0x600C + (12 * 1) + 6 )
-#define N_G1 (0x600C + (12 * 1) + 7 )
-#define N_G1S (0x600C + (12 * 1) + 8 )
-#define N_A1F (0x600C + (12 * 1) + 8 )
-#define N_A1 (0x600C + (12 * 1) + 9 )
-#define N_A1S (0x600C + (12 * 1) + 10)
-#define N_B1F (0x600C + (12 * 1) + 10)
-#define N_B1 (0x600C + (12 * 1) + 11)
-#define N_C2 (0x600C + (12 * 2) + 0 )
-#define N_C2S (0x600C + (12 * 2) + 1 )
-#define N_D2F (0x600C + (12 * 2) + 1 )
-#define N_D2 (0x600C + (12 * 2) + 2 )
-#define N_D2S (0x600C + (12 * 2) + 3 )
-#define N_E2F (0x600C + (12 * 2) + 3 )
-#define N_E2 (0x600C + (12 * 2) + 4 )
-#define N_F2 (0x600C + (12 * 2) + 5 )
-#define N_F2S (0x600C + (12 * 2) + 6 )
-#define N_G2F (0x600C + (12 * 2) + 6 )
-#define N_G2 (0x600C + (12 * 2) + 7 )
-#define N_G2S (0x600C + (12 * 2) + 8 )
-#define N_A2F (0x600C + (12 * 2) + 8 )
-#define N_A2 (0x600C + (12 * 2) + 9 )
-#define N_A2S (0x600C + (12 * 2) + 10)
-#define N_B2F (0x600C + (12 * 2) + 10)
-#define N_B2 (0x600C + (12 * 2) + 11)
-#define N_C3 (0x600C + (12 * 3) + 0 )
-#define N_C3S (0x600C + (12 * 3) + 1 )
-#define N_D3F (0x600C + (12 * 3) + 1 )
-#define N_D3 (0x600C + (12 * 3) + 2 )
-#define N_D3S (0x600C + (12 * 3) + 3 )
-#define N_E3F (0x600C + (12 * 3) + 3 )
-#define N_E3 (0x600C + (12 * 3) + 4 )
-#define N_F3 (0x600C + (12 * 3) + 5 )
-#define N_F3S (0x600C + (12 * 3) + 6 )
-#define N_G3F (0x600C + (12 * 3) + 6 )
-#define N_G3 (0x600C + (12 * 3) + 7 )
-#define N_G3S (0x600C + (12 * 3) + 8 )
-#define N_A3F (0x600C + (12 * 3) + 8 )
-#define N_A3 (0x600C + (12 * 3) + 9 )
-#define N_A3S (0x600C + (12 * 3) + 10)
-#define N_B3F (0x600C + (12 * 3) + 10)
-#define N_B3 (0x600C + (12 * 3) + 11)
-#define N_C4 (0x600C + (12 * 4) + 0 )
-#define N_C4S (0x600C + (12 * 4) + 1 )
-#define N_D4F (0x600C + (12 * 4) + 1 )
-#define N_D4 (0x600C + (12 * 4) + 2 )
-#define N_D4S (0x600C + (12 * 4) + 3 )
-#define N_E4F (0x600C + (12 * 4) + 3 )
-#define N_E4 (0x600C + (12 * 4) + 4 )
-#define N_F4 (0x600C + (12 * 4) + 5 )
-#define N_F4S (0x600C + (12 * 4) + 6 )
-#define N_G4F (0x600C + (12 * 4) + 6 )
-#define N_G4 (0x600C + (12 * 4) + 7 )
-#define N_G4S (0x600C + (12 * 4) + 8 )
-#define N_A4F (0x600C + (12 * 4) + 8 )
-#define N_A4 (0x600C + (12 * 4) + 9 )
-#define N_A4S (0x600C + (12 * 4) + 10)
-#define N_B4F (0x600C + (12 * 4) + 10)
-#define N_B4 (0x600C + (12 * 4) + 11)
-#define N_C5 (0x600C + (12 * 5) + 0 )
-#define N_C5S (0x600C + (12 * 5) + 1 )
-#define N_D5F (0x600C + (12 * 5) + 1 )
-#define N_D5 (0x600C + (12 * 5) + 2 )
-#define N_D5S (0x600C + (12 * 5) + 3 )
-#define N_E5F (0x600C + (12 * 5) + 3 )
-#define N_E5 (0x600C + (12 * 5) + 4 )
-#define N_F5 (0x600C + (12 * 5) + 5 )
-#define N_F5S (0x600C + (12 * 5) + 6 )
-#define N_G5F (0x600C + (12 * 5) + 6 )
-#define N_G5 (0x600C + (12 * 5) + 7 )
-#define N_G5S (0x600C + (12 * 5) + 8 )
-#define N_A5F (0x600C + (12 * 5) + 8 )
-#define N_A5 (0x600C + (12 * 5) + 9 )
-#define N_A5S (0x600C + (12 * 5) + 10)
-#define N_B5F (0x600C + (12 * 5) + 10)
-#define N_B5 (0x600C + (12 * 5) + 11)
-#define N_C6 (0x600C + (12 * 6) + 0 )
-#define N_C6S (0x600C + (12 * 6) + 1 )
-#define N_D6F (0x600C + (12 * 6) + 1 )
-#define N_D6 (0x600C + (12 * 6) + 2 )
-#define N_D6S (0x600C + (12 * 6) + 3 )
-#define N_E6F (0x600C + (12 * 6) + 3 )
-#define N_E6 (0x600C + (12 * 6) + 4 )
-#define N_F6 (0x600C + (12 * 6) + 5 )
-#define N_F6S (0x600C + (12 * 6) + 6 )
-#define N_G6F (0x600C + (12 * 6) + 6 )
-#define N_G6 (0x600C + (12 * 6) + 7 )
-#define N_G6S (0x600C + (12 * 6) + 8 )
-#define N_A6F (0x600C + (12 * 6) + 8 )
-#define N_A6 (0x600C + (12 * 6) + 9 )
-#define N_A6S (0x600C + (12 * 6) + 10)
-#define N_B6F (0x600C + (12 * 6) + 10)
-#define N_B6 (0x600C + (12 * 6) + 11)
-#define N_C7 (0x600C + (12 * 7) + 0 )
-#define N_C7S (0x600C + (12 * 7) + 1 )
-#define N_D7F (0x600C + (12 * 7) + 1 )
-#define N_D7 (0x600C + (12 * 7) + 2 )
-#define N_D7S (0x600C + (12 * 7) + 3 )
-#define N_E7F (0x600C + (12 * 7) + 3 )
-#define N_E7 (0x600C + (12 * 7) + 4 )
-#define N_F7 (0x600C + (12 * 7) + 5 )
-#define N_F7S (0x600C + (12 * 7) + 6 )
-#define N_G7F (0x600C + (12 * 7) + 6 )
-#define N_G7 (0x600C + (12 * 7) + 7 )
-#define N_G7S (0x600C + (12 * 7) + 8 )
-#define N_A7F (0x600C + (12 * 7) + 8 )
-#define N_A7 (0x600C + (12 * 7) + 9 )
-#define N_A7S (0x600C + (12 * 7) + 10)
-#define N_B7F (0x600C + (12 * 7) + 10)
-#define N_B7 (0x600C + (12 * 7) + 11)
-#define N_C8 (0x600C + (12 * 8) + 0 )
-#define N_C8S (0x600C + (12 * 8) + 1 )
-#define N_D8F (0x600C + (12 * 8) + 1 )
-#define N_D8 (0x600C + (12 * 8) + 2 )
-#define N_D8S (0x600C + (12 * 8) + 3 )
-#define N_E8F (0x600C + (12 * 8) + 3 )
-#define N_E8 (0x600C + (12 * 8) + 4 )
-#define N_F8 (0x600C + (12 * 8) + 5 )
-#define N_F8S (0x600C + (12 * 8) + 6 )
-#define N_G8F (0x600C + (12 * 8) + 6 )
-#define N_G8 (0x600C + (12 * 8) + 7 )
-#define N_G8S (0x600C + (12 * 8) + 8 )
-#define N_A8F (0x600C + (12 * 8) + 8 )
-#define N_A8 (0x600C + (12 * 8) + 9 )
-#define N_A8S (0x600C + (12 * 8) + 10)
-#define N_B8F (0x600C + (12 * 8) + 10)
-#define N_B8 (0x600C + (12 * 8) + 11)
-#define N_C8 (0x600C + (12 * 8) + 0 )
-#define N_C8S (0x600C + (12 * 8) + 1 )
-#define N_D8F (0x600C + (12 * 8) + 1 )
-#define N_D8 (0x600C + (12 * 8) + 2 )
-#define N_D8S (0x600C + (12 * 8) + 3 )
-#define N_E8F (0x600C + (12 * 8) + 3 )
-#define N_E8 (0x600C + (12 * 8) + 4 )
-#define N_F8 (0x600C + (12 * 8) + 5 )
-#define N_F8S (0x600C + (12 * 8) + 6 )
-#define N_G8F (0x600C + (12 * 8) + 6 )
-#define N_G8 (0x600C + (12 * 8) + 7 )
-#define N_G8S (0x600C + (12 * 8) + 8 )
-#define N_A8F (0x600C + (12 * 8) + 8 )
-#define N_A8 (0x600C + (12 * 8) + 9 )
-#define N_A8S (0x600C + (12 * 8) + 10)
-#define N_B8F (0x600C + (12 * 8) + 10)
-#define N_B8 (0x600C + (12 * 8) + 11)
-
#endif
\ No newline at end of file
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index f2b9509b56..4423d25eff 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -224,8 +224,12 @@ enum quantum_keycodes {
MI_SUS, // sustain
MI_PORT, // portamento
MI_SOST, // sostenuto
- MI_SOFT, // soft
+ MI_SOFT, // soft pedal
MI_LEG, // legato
+
+ MI_MOD, // modulation
+ MI_MODSD, // decrease modulation speed
+ MI_MODSU, // increase modulation speed
#endif
// Backlight functionality
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index fb60658df7..bd24980573 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -1180,7 +1180,7 @@ int main(void)
#ifdef MIDI_ENABLE
midi_device_process(&midi_device);
- // MIDI_Task();
+ midi_task();
#endif
#if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE)
--
cgit v1.2.3
From 5e6097f0154403dccb9b5658390c84441aa509bc Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 18 Feb 2017 06:19:48 -0800
Subject: add keycodes for transpose range
---
quantum/process_keycode/process_midi.c | 37 +++++++++++++++++++++++++++-------
quantum/quantum_keycodes.h | 18 +++++++++++++++++
2 files changed, 48 insertions(+), 7 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index d09aa0b382..4d60aefb1c 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -2,12 +2,13 @@
#include "timer.h"
typedef union {
- uint16_t raw;
+ uint32_t raw;
struct {
- uint8_t octave :4;
- uint8_t velocity :4;
- uint8_t channel :4;
- uint8_t modulation_interval :4;
+ uint8_t octave :4;
+ int8_t transpose :4;
+ uint8_t velocity :4;
+ uint8_t channel :4;
+ uint8_t modulation_interval :4;
};
} midi_config_t;
@@ -29,7 +30,8 @@ inline uint8_t compute_velocity(uint8_t setting)
void midi_init(void)
{
- midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+ midi_config.octave = MI_OCT_2 - MIDI_OCTAVE_MIN;
+ midi_config.transpose = 0;
midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN);
midi_config.channel = 0;
midi_config.modulation_interval = 8;
@@ -77,7 +79,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
uint8_t tone = keycode - MIDI_TONE_MIN;
uint8_t velocity = compute_velocity(midi_config.velocity);
if (record->event.pressed) {
- uint8_t note = 12 * midi_config.octave + tone;
+ uint8_t note = 12 * midi_config.octave + tone + midi_config.transpose;
midi_send_noteon(&midi_device, channel, note, velocity);
dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
tone_status[tone] = note;
@@ -111,6 +113,27 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
dprintf("midi octave %d\n", midi_config.octave);
}
return false;
+ case MIDI_TRANSPOSE_MIN ... MIDI_TRANSPOSE_MAX:
+ if (record->event.pressed) {
+ midi_config.transpose = keycode - MI_TRNS_0;
+ dprintf("midi transpose %d\n", midi_config.transpose);
+ }
+ return false;
+ case MI_TRNSD:
+ if (record->event.pressed && midi_config.transpose > (MIDI_TRANSPOSE_MIN - MI_TRNS_0)) {
+ midi_config.transpose--;
+ dprintf("midi transpose %d\n", midi_config.transpose);
+ }
+ return false;
+ case MI_TRNSU:
+ if (record->event.pressed && midi_config.transpose < (MIDI_TRANSPOSE_MAX - MI_TRNS_0)) {
+ const bool positive = midi_config.transpose > 0;
+ midi_config.transpose++;
+ if (positive && midi_config.transpose < 0)
+ midi_config.transpose--;
+ dprintf("midi transpose %d\n", midi_config.transpose);
+ }
+ return false;
case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX:
if (record->event.pressed) {
midi_config.velocity = keycode - MIDI_VELOCITY_MIN;
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index 4423d25eff..30cc9abdb4 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -183,6 +183,24 @@ enum quantum_keycodes {
MI_OCTD, // octave down
MI_OCTU, // octave up
+ MIDI_TRANSPOSE_MIN,
+ MI_TRNS_N6 = MIDI_TRANSPOSE_MIN,
+ MI_TRNS_N5,
+ MI_TRNS_N4,
+ MI_TRNS_N3,
+ MI_TRNS_N2,
+ MI_TRNS_N1,
+ MI_TRNS_0,
+ MI_TRNS_1,
+ MI_TRNS_2,
+ MI_TRNS_3,
+ MI_TRNS_4,
+ MI_TRNS_5,
+ MI_TRNS_6,
+ MIDI_TRANSPOSE_MAX = MI_TRNS_6,
+ MI_TRNSD, // transpose down
+ MI_TRNSU, // transpose up
+
MIDI_VELOCITY_MIN,
MI_VEL_1 = MIDI_VELOCITY_MIN,
MI_VEL_2,
--
cgit v1.2.3
From ae0752dff552a07fb52e08c7057979959959d247 Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 18 Feb 2017 21:07:07 -0800
Subject: expose midi_config
---
quantum/process_keycode/process_midi.c | 23 ++++++-----------------
quantum/process_keycode/process_midi.h | 18 ++++++++++++++++++
2 files changed, 24 insertions(+), 17 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 4d60aefb1c..9190fa0471 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -1,22 +1,6 @@
#include "process_midi.h"
#include "timer.h"
-typedef union {
- uint32_t raw;
- struct {
- uint8_t octave :4;
- int8_t transpose :4;
- uint8_t velocity :4;
- uint8_t channel :4;
- uint8_t modulation_interval :4;
- };
-} midi_config_t;
-
-midi_config_t midi_config;
-
-#define MIDI_INVALID_NOTE 0xFF
-
-#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1)
static uint8_t tone_status[MIDI_TONE_COUNT];
static uint8_t midi_modulation;
@@ -70,6 +54,11 @@ void midi_task(void)
}
}
+uint8_t midi_compute_note(uint16_t keycode)
+{
+ return 12 * midi_config.octave + (keycode - MIDI_TONE_MIN) + midi_config.transpose;
+}
+
bool process_midi(uint16_t keycode, keyrecord_t *record)
{
switch (keycode) {
@@ -79,7 +68,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
uint8_t tone = keycode - MIDI_TONE_MIN;
uint8_t velocity = compute_velocity(midi_config.velocity);
if (record->event.pressed) {
- uint8_t note = 12 * midi_config.octave + tone + midi_config.transpose;
+ uint8_t note = midi_compute_note(keycode);
midi_send_noteon(&midi_device, channel, note, velocity);
dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
tone_status[tone] = note;
diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h
index 66ce60b0e5..ffd41579f2 100644
--- a/quantum/process_keycode/process_midi.h
+++ b/quantum/process_keycode/process_midi.h
@@ -4,8 +4,26 @@
#include "quantum.h"
#include "midi.h"
+typedef union {
+ uint32_t raw;
+ struct {
+ uint8_t octave :4;
+ int8_t transpose :4;
+ uint8_t velocity :4;
+ uint8_t channel :4;
+ uint8_t modulation_interval :4;
+ };
+} midi_config_t;
+
+midi_config_t midi_config;
+
void midi_init(void);
void midi_task(void);
bool process_midi(uint16_t keycode, keyrecord_t *record);
+#define MIDI_INVALID_NOTE 0xFF
+#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1)
+
+uint8_t midi_compute_note(uint16_t keycode);
+
#endif
\ No newline at end of file
--
cgit v1.2.3
From ed15973a3ffff6e18e62f81654632b97961f18d2 Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sun, 19 Feb 2017 17:45:08 -0800
Subject: Document size added by MIDI_ENABLE (~3800 bytes according to my
experiments)
satan/keymaps/midi
MIDI_ENABLE = no
text data bss dec hex filename
0 17080 0 17080 42b8 satan_midi.hex
MIDI_ENABLE = yes
#define MIDI_TONE_KEYCODE_OCTAVES 3 // default
text data bss dec hex filename
0 20846 0 20846 516e satan_midi.hex
MIDI_ENABLE = yes
#define MIDI_TONE_KEYCODE_OCTAVES 2 // fewer octaves
text data bss dec hex filename
0 20846 0 20846 516e satan_midi.hex
---
keyboards/satan/keymaps/midi/Makefile | 2 +-
keyboards/satan/keymaps/midi/config.h | 2 +-
keyboards/satan/keymaps/midi/keymap.c | 2 ++
quantum/process_keycode/process_midi.c | 2 ++
quantum/template/config.h | 2 +-
quantum/template/keymaps/default/Makefile | 2 +-
6 files changed, 8 insertions(+), 4 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/keyboards/satan/keymaps/midi/Makefile b/keyboards/satan/keymaps/midi/Makefile
index 5cbda96cee..4e2d9d2f7c 100644
--- a/keyboards/satan/keymaps/midi/Makefile
+++ b/keyboards/satan/keymaps/midi/Makefile
@@ -9,7 +9,7 @@ CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-MIDI_ENABLE = yes # MIDI controls
+MIDI_ENABLE = yes # MIDI support (+3800)
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/satan/keymaps/midi/config.h b/keyboards/satan/keymaps/midi/config.h
index e345d40c96..0dbdb5cbcd 100644
--- a/keyboards/satan/keymaps/midi/config.h
+++ b/keyboards/satan/keymaps/midi/config.h
@@ -5,7 +5,7 @@
// place overrides here
-/* override number of MIDI tone keycodes (each octave adds 12 bytes) */
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
#define MIDI_TONE_KEYCODE_OCTAVES 2
#endif
\ No newline at end of file
diff --git a/keyboards/satan/keymaps/midi/keymap.c b/keyboards/satan/keymaps/midi/keymap.c
index ac97259331..004690f413 100644
--- a/keyboards/satan/keymaps/midi/keymap.c
+++ b/keyboards/satan/keymaps/midi/keymap.c
@@ -32,6 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(_ML), KC_RCTL),
+#ifdef MIDI_ENABLE
/* Keymap _ML: MIDI Layer
* ,------------------------------------------------------------------------.
* | Exit | | | | | | | | | | | | | |
@@ -57,4 +58,5 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, _______, \
MI_SUS, MI_OCTD, MI_OCTU, MI_MODSD, MI_MODSU, XXXXXXX, XXXXXXX, XXXXXXX, MI_TRNSD, MI_TRNSU, MI_TRNS_0, MI_SUS, \
_______, _______, _______, MI_OFF, _______, _______, _______, _______),
+#endif
};
\ No newline at end of file
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 9190fa0471..5530ea97c4 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -1,3 +1,5 @@
+#define MIDI_TONE_KEYCODE_OCTAVES 2
+
#include "process_midi.h"
#include "timer.h"
diff --git a/quantum/template/config.h b/quantum/template/config.h
index d0bee0d89a..cd6dfa2c6a 100644
--- a/quantum/template/config.h
+++ b/quantum/template/config.h
@@ -159,7 +159,7 @@ along with this program. If not, see .
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-/* override number of MIDI tone keycodes (each octave adds 12 bytes) */
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
#endif
diff --git a/quantum/template/keymaps/default/Makefile b/quantum/template/keymaps/default/Makefile
index f4671a9d11..24442db37d 100644
--- a/quantum/template/keymaps/default/Makefile
+++ b/quantum/template/keymaps/default/Makefile
@@ -9,7 +9,7 @@ CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
+MIDI_ENABLE = no # MIDI support (+3800)
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
--
cgit v1.2.3
From 525be99ee938aa6e48448d7dd6ea6e6fe50bb36d Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 25 Feb 2017 15:02:43 -0800
Subject: Split MIDI functionality into MIDI_BASIC and MIDI_ADVANCED
MIDI_ENABLE = no
text data bss dec hex filename
0 17080 0 17080 42b8 satan_midi.hex
MIDI_ENABLE = yes
MIDI_BASIC undefined
MIDI_ADVANCED undefined
text data bss dec hex filename
0 19494 0 19494 4c26 satan_midi.hex
MIDI_ENABLE = yes
#define MIDI_BASIC
MIDI_ADVANCED undefined
text data bss dec hex filename
0 19788 0 19788 4d4c satan_midi.hex
MIDI_ENABLE = yes
MIDI_BASIC undefined
#define MIDI_ADVANCED
text data bss dec hex filename
0 20846 0 20846 516e satan_midi.hex
MIDI_ENABLE = yes
#define MIDI_BASIC
#define MIDI_ADVANCED
text data bss dec hex filename
0 21140 0 21140 5294 satan_midi.hex
---
build_keyboard.mk | 1 +
keyboards/satan/keymaps/midi/config.h | 17 ++++++++++++++++-
keyboards/satan/keymaps/midi/keymap.c | 4 ++--
quantum/process_keycode/process_midi.c | 9 ++++++---
quantum/process_keycode/process_music.c | 22 ++++++++++++++++++++++
quantum/quantum.c | 4 ++--
quantum/quantum_keycodes.h | 13 ++++++++++---
quantum/template/config.h | 17 +++++++++++++++++
tmk_core/protocol/lufa/lufa.c | 4 ++++
9 files changed, 80 insertions(+), 11 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/build_keyboard.mk b/build_keyboard.mk
index 4a6fc0980f..eea8d5919a 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -141,6 +141,7 @@ endif
ifeq ($(strip $(MIDI_ENABLE)), yes)
OPT_DEFS += -DMIDI_ENABLE
+ SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
endif
diff --git a/keyboards/satan/keymaps/midi/config.h b/keyboards/satan/keymaps/midi/config.h
index 0dbdb5cbcd..59250b49e2 100644
--- a/keyboards/satan/keymaps/midi/config.h
+++ b/keyboards/satan/keymaps/midi/config.h
@@ -3,7 +3,22 @@
#include "../../config.h"
-// place overrides here
+/*
+ * MIDI options
+ */
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
#define MIDI_TONE_KEYCODE_OCTAVES 2
diff --git a/keyboards/satan/keymaps/midi/keymap.c b/keyboards/satan/keymaps/midi/keymap.c
index 397fe097bd..349391c3bf 100644
--- a/keyboards/satan/keymaps/midi/keymap.c
+++ b/keyboards/satan/keymaps/midi/keymap.c
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(_ML), KC_RCTL),
-#ifdef MIDI_ENABLE
+#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
/* Keymap _ML: MIDI Layer
* ,------------------------------------------------------------------------.
* | Exit | | | | | | | | | | | | | |
@@ -51,6 +51,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_CHU, XXXXXXX, MI_Cs, MI_Ds, XXXXXXX, MI_Fs, MI_Gs, MI_As, XXXXXXX, MI_Cs_1, MI_Ds_1, XXXXXXX, XXXXXXX, XXXXXXX, \
MI_MOD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, _______, \
MI_SUS, MI_OCTD, MI_OCTU, MI_MODSD, MI_MODSU, XXXXXXX, XXXXXXX, XXXXXXX, MI_TRNSD, MI_TRNSU, MI_TRNS_0, MI_SUS, \
- _______, _______, _______, MI_OFF, _______, _______, _______, _______),
+ _______, _______, _______, MI_ALLOFF, _______, _______, _______, _______),
#endif
};
\ No newline at end of file
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 5530ea97c4..161f04a245 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -1,6 +1,7 @@
-#define MIDI_TONE_KEYCODE_OCTAVES 2
-
#include "process_midi.h"
+
+#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
+
#include "timer.h"
static uint8_t tone_status[MIDI_TONE_COUNT];
@@ -161,7 +162,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
dprintf("midi channel %d\n", midi_config.channel);
}
return false;
- case MI_OFF:
+ case MI_ALLOFF:
if (record->event.pressed) {
midi_send_cc(&midi_device, midi_config.channel, 0x7B, 0);
dprintf("midi off\n");
@@ -209,3 +210,5 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
return true;
}
+
+#endif // MIDI_ADVANCED
diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c
index 1e2648bff5..ac906b6281 100644
--- a/quantum/process_keycode/process_music.c
+++ b/quantum/process_keycode/process_music.c
@@ -17,6 +17,7 @@ static uint16_t music_sequence_interval = 100;
bool process_music(uint16_t keycode, keyrecord_t *record) {
+ #ifdef AUDIO_ENABLE
if (keycode == AU_ON && record->event.pressed) {
audio_on();
return false;
@@ -38,6 +39,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
}
return false;
}
+ #endif // AUDIO_ENABLE
if (keycode == MU_ON && record->event.pressed) {
music_on();
@@ -61,6 +63,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
return false;
}
+ #ifdef AUDIO_ENABLE
if (keycode == MUV_IN && record->event.pressed) {
voice_iterate();
music_scale_user();
@@ -72,11 +75,14 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
music_scale_user();
return false;
}
+ #endif // AUDIO_ENABLE
if (music_activated) {
if (keycode == KC_LCTL && record->event.pressed) { // Start recording
+ #ifdef AUDIO_ENABLE
stop_all_notes();
+ #endif
music_sequence_recording = true;
music_sequence_recorded = false;
music_sequence_playing = false;
@@ -85,7 +91,9 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
}
if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing
+ #ifdef AUDIO_ENABLE
stop_all_notes();
+ #endif
if (music_sequence_recording) { // was recording
music_sequence_recorded = true;
}
@@ -95,7 +103,9 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
}
if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing
+ #ifdef AUDIO_ENABLE
stop_all_notes();
+ #endif
music_sequence_recording = false;
music_sequence_playing = true;
music_sequence_position = 0;
@@ -116,6 +126,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
}
#define MUSIC_MODE_GUITAR
+ #ifdef AUDIO_ENABLE
#ifdef MUSIC_MODE_CHROMATIC
float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(MATRIX_ROWS - record->event.key.row));
#elif defined(MUSIC_MODE_GUITAR)
@@ -125,15 +136,20 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
#else
float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row));
#endif
+ #endif // AUDIO_ENABLE
if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
play_note(freq, 0xF);
if (music_sequence_recording) {
music_sequence[music_sequence_count] = freq;
music_sequence_count++;
}
+ #endif
} else {
+ #ifdef AUDIO_ENABLE
stop_note(freq);
+ #endif
}
if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through
@@ -161,15 +177,19 @@ void music_on(void) {
void music_off(void) {
music_activated = 0;
+ #ifdef AUDIO_ENABLE
stop_all_notes();
+ #endif
}
__attribute__ ((weak))
void music_on_user() {}
+#ifdef AUDIO_ENABLE
__attribute__ ((weak))
void audio_on_user() {}
+#endif
__attribute__ ((weak))
void music_scale_user() {}
@@ -178,8 +198,10 @@ void matrix_scan_music(void) {
if (music_sequence_playing) {
if ((music_sequence_timer == 0) || (timer_elapsed(music_sequence_timer) > music_sequence_interval)) {
music_sequence_timer = timer_read();
+ #ifdef AUDIO_ENABLE
stop_note(music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]);
play_note(music_sequence[music_sequence_position], 0xF);
+ #endif
music_sequence_position = (music_sequence_position + 1) % music_sequence_count;
}
}
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 4a6d0355fa..83fa877088 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -150,10 +150,10 @@ bool process_record_quantum(keyrecord_t *record) {
if (!(
process_record_kb(keycode, record) &&
- #ifdef MIDI_ENABLE
+ #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
process_midi(keycode, record) &&
#endif
- #ifdef AUDIO_ENABLE
+ #if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
process_music(keycode, record) &&
#endif
#ifdef TAP_DANCE_ENABLE
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index 6d1438051e..3b82b7208c 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -2,7 +2,7 @@
#ifndef QUANTUM_KEYCODES_H
#define QUANTUM_KEYCODES_H
-#ifdef MIDI_ENABLE
+#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
#ifndef MIDI_TONE_KEYCODE_OCTAVES
#define MIDI_TONE_KEYCODE_OCTAVES 3
#endif
@@ -116,6 +116,12 @@ enum quantum_keycodes {
#ifdef MIDI_ENABLE
// Midi
+#ifdef MIDI_BASIC
+ MI_ON, // send midi notes when music mode is enabled
+ MI_OFF, // don't send midi notes when music mode is enabled
+#endif
+
+#ifdef MIDI_ADVANCED
MIDI_TONE_MIN,
#if MIDI_TONE_KEYCODE_OCTAVES > 0
@@ -321,7 +327,7 @@ enum quantum_keycodes {
MI_CHD, // previous channel
MI_CHU, // next channel
- MI_OFF, // all notes off
+ MI_ALLOFF, // all notes off
MI_SUS, // sustain
MI_PORT, // portamento
@@ -332,7 +338,8 @@ enum quantum_keycodes {
MI_MOD, // modulation
MI_MODSD, // decrease modulation speed
MI_MODSU, // increase modulation speed
-#endif
+#endif // MIDI_ADVANCED
+#endif // MIDI_ENABLE
// Backlight functionality
BL_0,
diff --git a/quantum/template/config.h b/quantum/template/config.h
index cd6dfa2c6a..54db4f242f 100644
--- a/quantum/template/config.h
+++ b/quantum/template/config.h
@@ -159,6 +159,23 @@ along with this program. If not, see .
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
+/*
+ * MIDI options
+ */
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index bd24980573..651a0f3477 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -1104,7 +1104,9 @@ void sysex_callback(MidiDevice * device,
void setup_midi(void)
{
+#ifdef MIDI_ADVANCED
midi_init();
+#endif
midi_device_init(&midi_device);
midi_device_set_send_func(&midi_device, usb_send_func);
midi_device_set_pre_input_process_func(&midi_device, usb_get_midi);
@@ -1180,8 +1182,10 @@ int main(void)
#ifdef MIDI_ENABLE
midi_device_process(&midi_device);
+#ifdef MIDI_ADVANCED
midi_task();
#endif
+#endif
#if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE)
rgblight_task();
--
cgit v1.2.3
From 1000799d1ef594bf9f48076986ec300ef9e536db Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Sat, 25 Feb 2017 19:25:33 -0800
Subject: Factor basic note processing into respective processors
---
build_keyboard.mk | 1 +
quantum/process_keycode/process_audio.c | 62 +++++++++++++++
quantum/process_keycode/process_audio.h | 11 +++
quantum/process_keycode/process_midi.c | 28 ++++++-
quantum/process_keycode/process_midi.h | 13 ++-
quantum/process_keycode/process_music.c | 137 ++++++++++++++------------------
quantum/process_keycode/process_music.h | 5 +-
quantum/quantum.c | 3 +
quantum/quantum.h | 7 +-
9 files changed, 184 insertions(+), 83 deletions(-)
create mode 100644 quantum/process_keycode/process_audio.c
create mode 100644 quantum/process_keycode/process_audio.h
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/build_keyboard.mk b/build_keyboard.mk
index eea8d5919a..07dfe85b45 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -157,6 +157,7 @@ endif
ifeq ($(strip $(AUDIO_ENABLE)), yes)
OPT_DEFS += -DAUDIO_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
+ SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
SRC += $(QUANTUM_DIR)/audio/audio.c
SRC += $(QUANTUM_DIR)/audio/voices.c
SRC += $(QUANTUM_DIR)/audio/luts.c
diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c
new file mode 100644
index 0000000000..5b5da546ea
--- /dev/null
+++ b/quantum/process_keycode/process_audio.c
@@ -0,0 +1,62 @@
+#include "process_audio.h"
+#include "audio.h"
+
+static float compute_freq_for_midi_note(uint8_t note)
+{
+ // https://en.wikipedia.org/wiki/MIDI_tuning_standard
+ return pow(2.0, (note - 69) / 12.0) * 440.0f;
+}
+
+bool process_audio(uint16_t keycode, keyrecord_t *record) {
+
+ if (keycode == AU_ON && record->event.pressed) {
+ audio_on();
+ return false;
+ }
+
+ if (keycode == AU_OFF && record->event.pressed) {
+ audio_off();
+ return false;
+ }
+
+ if (keycode == AU_TOG && record->event.pressed) {
+ if (is_audio_on())
+ {
+ audio_off();
+ }
+ else
+ {
+ audio_on();
+ }
+ return false;
+ }
+
+ if (keycode == MUV_IN && record->event.pressed) {
+ voice_iterate();
+ music_scale_user();
+ return false;
+ }
+
+ if (keycode == MUV_DE && record->event.pressed) {
+ voice_deiterate();
+ music_scale_user();
+ return false;
+ }
+
+ return true
+}
+
+void process_audio_noteon(uint8_t note) {
+ play_note(compute_freq_for_midi_note(note), 0xF);
+}
+
+void process_audio_noteoff(uint8_t note) {
+ stop_note(compute_freq_for_midi_note(note));
+}
+
+void process_audio_stop_all_notes(void) {
+ stop_all_notes();
+}
+
+__attribute__ ((weak))
+void audio_on_user() {}
\ No newline at end of file
diff --git a/quantum/process_keycode/process_audio.h b/quantum/process_keycode/process_audio.h
new file mode 100644
index 0000000000..59a17725a7
--- /dev/null
+++ b/quantum/process_keycode/process_audio.h
@@ -0,0 +1,11 @@
+#ifndef PROCESS_AUDIO_H
+#define PROCESS_AUDIO_H
+
+bool process_audio(uint16_t keycode, keyrecord_t *record);
+void process_audio_noteon(uint8_t note);
+void process_audio_noteoff(uint8_t note);
+void process_audio_stop_all_notes(void);
+
+void audio_on_user(void);
+
+#endif
\ No newline at end of file
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 161f04a245..214bba9020 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -1,6 +1,28 @@
#include "process_midi.h"
-#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
+#ifdef MIDI_ENABLE
+#include "midi.h"
+
+#ifdef MIDI_BASIC
+
+void process_midi_basic_noteon(uint8_t note)
+{
+ midi_send_noteon(&midi_device, 0, note, 128);
+}
+
+void process_midi_basic_noteoff(uint8_t note)
+{
+ midi_send_noteoff(&midi_device, 0, note, 0);
+}
+
+void process_midi_basic_stop_all_notes(void)
+{
+ midi_send_cc(&midi_device, 0, 0x7B, 0);
+}
+
+#endif // MIDI_BASIC
+
+#ifdef MIDI_ADVANCED
#include "timer.h"
@@ -165,7 +187,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
case MI_ALLOFF:
if (record->event.pressed) {
midi_send_cc(&midi_device, midi_config.channel, 0x7B, 0);
- dprintf("midi off\n");
+ dprintf("midi all notes off\n");
}
return false;
case MI_SUS:
@@ -212,3 +234,5 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
}
#endif // MIDI_ADVANCED
+
+#endif // MIDI_ENABLE
diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h
index ffd41579f2..0f559ec23a 100644
--- a/quantum/process_keycode/process_midi.h
+++ b/quantum/process_keycode/process_midi.h
@@ -2,8 +2,16 @@
#define PROCESS_MIDI_H
#include "quantum.h"
-#include "midi.h"
+#ifdef MIDI_ENABLE
+
+#ifdef MIDI_BASIC
+void process_midi_basic_noteon(uint8_t note);
+void process_midi_basic_noteoff(uint8_t note);
+void process_midi_basic_stop_all_notes(void);
+#endif
+
+#ifdef MIDI_ADVANCED
typedef union {
uint32_t raw;
struct {
@@ -25,5 +33,8 @@ bool process_midi(uint16_t keycode, keyrecord_t *record);
#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1)
uint8_t midi_compute_note(uint16_t keycode);
+#endif // MIDI_ADVANCED
+
+#endif // MIDI_ENABLE
#endif
\ No newline at end of file
diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c
index ac906b6281..a1e270df17 100644
--- a/quantum/process_keycode/process_music.c
+++ b/quantum/process_keycode/process_music.c
@@ -1,5 +1,14 @@
#include "process_music.h"
+#ifdef AUDIO_ENABLE
+#include "process_audio.h"
+#endif
+#if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
+#include "process_midi.h"
+#endif
+
+#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
+
bool music_activated = false;
uint8_t music_starting_note = 0x0C;
int music_offset = 7;
@@ -8,38 +17,41 @@ int music_offset = 7;
static bool music_sequence_recording = false;
static bool music_sequence_recorded = false;
static bool music_sequence_playing = false;
-static float music_sequence[16] = {0};
+static uint8_t music_sequence[16] = {0};
static uint8_t music_sequence_count = 0;
static uint8_t music_sequence_position = 0;
static uint16_t music_sequence_timer = 0;
static uint16_t music_sequence_interval = 100;
-bool process_music(uint16_t keycode, keyrecord_t *record) {
+static void music_noteon(uint8_t note) {
+ #ifdef AUDIO_ENABLE
+ process_audio_noteon(note);
+ #endif
+ #if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
+ process_midi_basic_noteon(note);
+ #endif
+}
- #ifdef AUDIO_ENABLE
- if (keycode == AU_ON && record->event.pressed) {
- audio_on();
- return false;
- }
+static void music_noteoff(uint8_t note) {
+ #ifdef AUDIO_ENABLE
+ process_audio_noteoff(note);
+ #endif
+ #if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
+ process_midi_basic_noteoff(note);
+ #endif
+}
- if (keycode == AU_OFF && record->event.pressed) {
- audio_off();
- return false;
- }
+static void music_all_notes_off(void) {
+ #ifdef AUDIO_ENABLE
+ process_audio_stop_all_notes();
+ #endif
+ #if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
+ process_midi_basic_stop_all_notes();
+ #endif
+}
- if (keycode == AU_TOG && record->event.pressed) {
- if (is_audio_on())
- {
- audio_off();
- }
- else
- {
- audio_on();
- }
- return false;
- }
- #endif // AUDIO_ENABLE
+bool process_music(uint16_t keycode, keyrecord_t *record) {
if (keycode == MU_ON && record->event.pressed) {
music_on();
@@ -63,26 +75,10 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
return false;
}
- #ifdef AUDIO_ENABLE
- if (keycode == MUV_IN && record->event.pressed) {
- voice_iterate();
- music_scale_user();
- return false;
- }
-
- if (keycode == MUV_DE && record->event.pressed) {
- voice_deiterate();
- music_scale_user();
- return false;
- }
- #endif // AUDIO_ENABLE
-
if (music_activated) {
if (keycode == KC_LCTL && record->event.pressed) { // Start recording
- #ifdef AUDIO_ENABLE
- stop_all_notes();
- #endif
+ music_all_notes_off();
music_sequence_recording = true;
music_sequence_recorded = false;
music_sequence_playing = false;
@@ -91,9 +87,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
}
if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing
- #ifdef AUDIO_ENABLE
- stop_all_notes();
- #endif
+ music_all_notes_off();
if (music_sequence_recording) { // was recording
music_sequence_recorded = true;
}
@@ -103,9 +97,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
}
if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing
- #ifdef AUDIO_ENABLE
- stop_all_notes();
- #endif
+ music_all_notes_off();
music_sequence_recording = false;
music_sequence_playing = true;
music_sequence_position = 0;
@@ -124,32 +116,27 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
music_sequence_interval+=10;
return false;
}
+
#define MUSIC_MODE_GUITAR
- #ifdef AUDIO_ENABLE
#ifdef MUSIC_MODE_CHROMATIC
- float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(MATRIX_ROWS - record->event.key.row));
+ uint8_t note = (music_starting_note + record->event.key.col + music_offset - 3)+12*(MATRIX_ROWS - record->event.key.row);
#elif defined(MUSIC_MODE_GUITAR)
- float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(float)(MATRIX_ROWS - record->event.key.row + 7)*5.0/12);
+ uint8_t note = (music_starting_note + record->event.key.col + music_offset + 32)+5*(MATRIX_ROWS - record->event.key.row);
#elif defined(MUSIC_MODE_VIOLIN)
- float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(float)(MATRIX_ROWS - record->event.key.row + 5)*7.0/12);
+ uint8_t note = (music_starting_note + record->event.key.col + music_offset + 32)+7*(MATRIX_ROWS - record->event.key.row);
#else
- float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row));
+ uint8_t note = (music_starting_note + SCALE[record->event.key.col + music_offset] - 3)+12*(MATRIX_ROWS - record->event.key.row);
#endif
- #endif // AUDIO_ENABLE
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- play_note(freq, 0xF);
+ music_noteon(note);
if (music_sequence_recording) {
- music_sequence[music_sequence_count] = freq;
+ music_sequence[music_sequence_count] = note;
music_sequence_count++;
}
- #endif
} else {
- #ifdef AUDIO_ENABLE
- stop_note(freq);
- #endif
+ music_noteoff(note);
}
if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through
@@ -177,32 +164,26 @@ void music_on(void) {
void music_off(void) {
music_activated = 0;
- #ifdef AUDIO_ENABLE
- stop_all_notes();
- #endif
+ music_all_notes_off();
}
-
-__attribute__ ((weak))
-void music_on_user() {}
-
-#ifdef AUDIO_ENABLE
-__attribute__ ((weak))
-void audio_on_user() {}
-#endif
-
-__attribute__ ((weak))
-void music_scale_user() {}
-
void matrix_scan_music(void) {
if (music_sequence_playing) {
if ((music_sequence_timer == 0) || (timer_elapsed(music_sequence_timer) > music_sequence_interval)) {
music_sequence_timer = timer_read();
- #ifdef AUDIO_ENABLE
- stop_note(music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]);
- play_note(music_sequence[music_sequence_position], 0xF);
- #endif
+ uint8_t prev_note = music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)];
+ uint8_t next_note = music_sequence[music_sequence_position];
+ music_noteoff(prev_note);
+ music_noteon(next_note);
music_sequence_position = (music_sequence_position + 1) % music_sequence_count;
}
}
}
+
+__attribute__ ((weak))
+void music_on_user() {}
+
+__attribute__ ((weak))
+void music_scale_user() {}
+
+#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
\ No newline at end of file
diff --git a/quantum/process_keycode/process_music.h b/quantum/process_keycode/process_music.h
index 318b3e3875..69913b2761 100644
--- a/quantum/process_keycode/process_music.h
+++ b/quantum/process_keycode/process_music.h
@@ -3,6 +3,8 @@
#include "quantum.h"
+#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
+
bool process_music(uint16_t keycode, keyrecord_t *record);
bool is_music_on(void);
@@ -10,7 +12,6 @@ void music_toggle(void);
void music_on(void);
void music_off(void);
-void audio_on_user(void);
void music_on_user(void);
void music_scale_user(void);
@@ -24,4 +25,6 @@ void matrix_scan_music(void);
0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
#endif
+#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
+
#endif
\ No newline at end of file
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 83fa877088..7a27a568ac 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -153,6 +153,9 @@ bool process_record_quantum(keyrecord_t *record) {
#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
process_midi(keycode, record) &&
#endif
+ #ifdef AUDIO_ENABLE
+ process_audio(keycode, record) &&
+ #endif
#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
process_music(keycode, record) &&
#endif
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 580d51202a..77732d43f2 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -35,11 +35,16 @@ extern uint32_t default_layer_state;
#ifdef MIDI_ENABLE
#include
+#ifdef MIDI_ADVANCED
#include "process_midi.h"
#endif
+#endif // MIDI_ENABLE
#ifdef AUDIO_ENABLE
- #include "audio.h"
+ #include "process_audio.h"
+#endif
+
+#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
#include "process_music.h"
#endif
--
cgit v1.2.3
From d11962aeb27c73b87f8154d7f2cee747c8858d09 Mon Sep 17 00:00:00 2001
From: Gabriel Young
Date: Thu, 2 Mar 2017 11:40:06 -0800
Subject: fix 'stop_all_notes' naming to be more consistent
---
quantum/process_keycode/process_audio.c | 2 +-
quantum/process_keycode/process_audio.h | 2 +-
quantum/process_keycode/process_midi.c | 2 +-
quantum/process_keycode/process_midi.h | 2 +-
quantum/process_keycode/process_music.c | 4 ++--
quantum/template/keymaps/default/Makefile | 2 +-
6 files changed, 7 insertions(+), 7 deletions(-)
(limited to 'quantum/process_keycode/process_midi.c')
diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c
index 71c0297ee2..0b6380ed39 100644
--- a/quantum/process_keycode/process_audio.c
+++ b/quantum/process_keycode/process_audio.c
@@ -54,7 +54,7 @@ void process_audio_noteoff(uint8_t note) {
stop_note(compute_freq_for_midi_note(note));
}
-void process_audio_stop_all_notes(void) {
+void process_audio_all_notes_off(void) {
stop_all_notes();
}
diff --git a/quantum/process_keycode/process_audio.h b/quantum/process_keycode/process_audio.h
index 59a17725a7..7ac15b7330 100644
--- a/quantum/process_keycode/process_audio.h
+++ b/quantum/process_keycode/process_audio.h
@@ -4,7 +4,7 @@
bool process_audio(uint16_t keycode, keyrecord_t *record);
void process_audio_noteon(uint8_t note);
void process_audio_noteoff(uint8_t note);
-void process_audio_stop_all_notes(void);
+void process_audio_all_notes_off(void);
void audio_on_user(void);
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 214bba9020..700c6ce8e6 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -15,7 +15,7 @@ void process_midi_basic_noteoff(uint8_t note)
midi_send_noteoff(&midi_device, 0, note, 0);
}
-void process_midi_basic_stop_all_notes(void)
+void process_midi_all_notes_off(void)
{
midi_send_cc(&midi_device, 0, 0x7B, 0);
}
diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h
index 0f559ec23a..58b7650c67 100644
--- a/quantum/process_keycode/process_midi.h
+++ b/quantum/process_keycode/process_midi.h
@@ -8,7 +8,7 @@
#ifdef MIDI_BASIC
void process_midi_basic_noteon(uint8_t note);
void process_midi_basic_noteoff(uint8_t note);
-void process_midi_basic_stop_all_notes(void);
+void process_midi_all_notes_off(void);
#endif
#ifdef MIDI_ADVANCED
diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c
index 4b86b91f00..f89a04ee31 100644
--- a/quantum/process_keycode/process_music.c
+++ b/quantum/process_keycode/process_music.c
@@ -44,10 +44,10 @@ static void music_noteoff(uint8_t note) {
void music_all_notes_off(void) {
#ifdef AUDIO_ENABLE
- process_audio_stop_all_notes();
+ process_audio_all_notes_off();
#endif
#if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
- process_midi_basic_stop_all_notes();
+ process_midi_all_notes_off();
#endif
}
diff --git a/quantum/template/keymaps/default/Makefile b/quantum/template/keymaps/default/Makefile
index 24442db37d..29f11bbc77 100644
--- a/quantum/template/keymaps/default/Makefile
+++ b/quantum/template/keymaps/default/Makefile
@@ -9,7 +9,7 @@ CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI support (+3800)
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
--
cgit v1.2.3