aboutsummaryrefslogtreecommitdiff
path: root/keyboards/planck/keymaps/synth_wavetable/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/planck/keymaps/synth_wavetable/keymap.c')
-rw-r--r--keyboards/planck/keymaps/synth_wavetable/keymap.c320
1 files changed, 320 insertions, 0 deletions
diff --git a/keyboards/planck/keymaps/synth_wavetable/keymap.c b/keyboards/planck/keymaps/synth_wavetable/keymap.c
new file mode 100644
index 000000000..a0d710679
--- /dev/null
+++ b/keyboards/planck/keymaps/synth_wavetable/keymap.c
@@ -0,0 +1,320 @@
1/* Copyright 2019 Jack Humbert
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19enum planck_layers {
20 _QWERTY,
21 _COLEMAK,
22 _DVORAK,
23 _LOWER,
24 _RAISE,
25 _PLOVER,
26 _ADJUST
27};
28
29enum planck_keycodes {
30 QWERTY = SAFE_RANGE,
31 COLEMAK,
32 DVORAK,
33 PLOVER,
34 BACKLIT,
35 EXT_PLV
36};
37
38#define LOWER MO(_LOWER)
39#define RAISE MO(_RAISE)
40
41const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
42
43/* Qwerty
44 * ,-----------------------------------------------------------------------------------.
45 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
46 * |------+------+------+------+------+-------------+------+------+------+------+------|
47 * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
48 * |------+------+------+------+------+------|------+------+------+------+------+------|
49 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
50 * |------+------+------+------+------+------+------+------+------+------+------+------|
51 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
52 * `-----------------------------------------------------------------------------------'
53 */
54[_QWERTY] = LAYOUT_planck_grid(
55 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
56 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
57 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
58 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
59),
60
61/* Colemak
62 * ,-----------------------------------------------------------------------------------.
63 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
64 * |------+------+------+------+------+-------------+------+------+------+------+------|
65 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
66 * |------+------+------+------+------+------|------+------+------+------+------+------|
67 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
68 * |------+------+------+------+------+------+------+------+------+------+------+------|
69 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
70 * `-----------------------------------------------------------------------------------'
71 */
72[_COLEMAK] = LAYOUT_planck_grid(
73 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
74 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
75 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
76 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
77),
78
79/* Dvorak
80 * ,-----------------------------------------------------------------------------------.
81 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
82 * |------+------+------+------+------+-------------+------+------+------+------+------|
83 * | Esc | A | O | E | U | I | D | H | T | N | S | / |
84 * |------+------+------+------+------+------|------+------+------+------+------+------|
85 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
86 * |------+------+------+------+------+------+------+------+------+------+------+------|
87 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
88 * `-----------------------------------------------------------------------------------'
89 */
90[_DVORAK] = LAYOUT_planck_grid(
91 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
92 KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
93 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
94 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
95),
96
97/* Lower
98 * ,-----------------------------------------------------------------------------------.
99 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
100 * |------+------+------+------+------+-------------+------+------+------+------+------|
101 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
102 * |------+------+------+------+------+------|------+------+------+------+------+------|
103 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
104 * |------+------+------+------+------+------+------+------+------+------+------+------|
105 * | | | | | | | | Next | Vol- | Vol+ | Play |
106 * `-----------------------------------------------------------------------------------'
107 */
108[_LOWER] = LAYOUT_planck_grid(
109 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
110 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
111 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
112 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
113),
114
115/* Raise
116 * ,-----------------------------------------------------------------------------------.
117 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
118 * |------+------+------+------+------+-------------+------+------+------+------+------|
119 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
120 * |------+------+------+------+------+------|------+------+------+------+------+------|
121 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
122 * |------+------+------+------+------+------+------+------+------+------+------+------|
123 * | | | | | | | | Next | Vol- | Vol+ | Play |
124 * `-----------------------------------------------------------------------------------'
125 */
126[_RAISE] = LAYOUT_planck_grid(
127 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
128 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
129 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
130 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
131),
132
133/* Plover layer (http://opensteno.org)
134 * ,-----------------------------------------------------------------------------------.
135 * | # | # | # | # | # | # | # | # | # | # | # | # |
136 * |------+------+------+------+------+-------------+------+------+------+------+------|
137 * | | S | T | P | H | * | * | F | P | L | T | D |
138 * |------+------+------+------+------+------|------+------+------+------+------+------|
139 * | | S | K | W | R | * | * | R | B | G | S | Z |
140 * |------+------+------+------+------+------+------+------+------+------+------+------|
141 * | Exit | | | A | O | | E | U | | | |
142 * `-----------------------------------------------------------------------------------'
143 */
144[_PLOVER] = LAYOUT_planck_grid(
145 KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
146 XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
147 XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
148 EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
149),
150
151/* Adjust (Lower + Raise)
152 * ,-----------------------------------------------------------------------------------.
153 * | | Reset| | | | | | | | | | Del |
154 * |------+------+------+------+------+-------------+------+------+------+------+------|
155 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
156 * |------+------+------+------+------+------|------+------+------+------+------+------|
157 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
158 * |------+------+------+------+------+------+------+------+------+------+------+------|
159 * | | | | | | | | | | | |
160 * `-----------------------------------------------------------------------------------'
161 */
162[_ADJUST] = LAYOUT_planck_grid(
163 _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
164 _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
165 _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
166 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
167)
168
169};
170
171#ifdef AUDIO_ENABLE
172 float plover_song[][2] = SONG(PLOVER_SOUND);
173 float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
174#endif
175
176uint32_t layer_state_set_user(uint32_t state) {
177 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
178}
179
180bool process_record_user(uint16_t keycode, keyrecord_t *record) {
181 switch (keycode) {
182 case QWERTY:
183 if (record->event.pressed) {
184 print("mode just switched to qwerty and this is a huge string\n");
185 set_single_persistent_default_layer(_QWERTY);
186 }
187 return false;
188 break;
189 case COLEMAK:
190 if (record->event.pressed) {
191 set_single_persistent_default_layer(_COLEMAK);
192 }
193 return false;
194 break;
195 case DVORAK:
196 if (record->event.pressed) {
197 set_single_persistent_default_layer(_DVORAK);
198 }
199 return false;
200 break;
201 case BACKLIT:
202 if (record->event.pressed) {
203 register_code(KC_RSFT);
204 #ifdef BACKLIGHT_ENABLE
205 backlight_step();
206 #endif
207 #ifdef KEYBOARD_planck_rev5
208 PORTE &= ~(1<<6);
209 #endif
210 } else {
211 unregister_code(KC_RSFT);
212 #ifdef KEYBOARD_planck_rev5
213 PORTE |= (1<<6);
214 #endif
215 }
216 return false;
217 break;
218 case PLOVER:
219 if (record->event.pressed) {
220 #ifdef AUDIO_ENABLE
221 stop_all_notes();
222 PLAY_SONG(plover_song);
223 #endif
224 layer_off(_RAISE);
225 layer_off(_LOWER);
226 layer_off(_ADJUST);
227 layer_on(_PLOVER);
228 if (!eeconfig_is_enabled()) {
229 eeconfig_init();
230 }
231 keymap_config.raw = eeconfig_read_keymap();
232 keymap_config.nkro = 1;
233 eeconfig_update_keymap(keymap_config.raw);
234 }
235 return false;
236 break;
237 case EXT_PLV:
238 if (record->event.pressed) {
239 #ifdef AUDIO_ENABLE
240 PLAY_SONG(plover_gb_song);
241 #endif
242 layer_off(_PLOVER);
243 }
244 return false;
245 break;
246 }
247 return true;
248}
249
250void matrix_scan_user(void) {
251
252}
253
254bool music_mask_user(uint16_t keycode) {
255 switch (keycode) {
256 case RAISE:
257 case LOWER:
258 return false;
259 default:
260 return true;
261 }
262}
263
264#include "wavetable.h"
265
266float dac_if[8] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
267uint8_t dac_morph = 0;
268
269
270uint16_t dac_value_generate(void) {
271 uint16_t value = AUDIO_DAC_OFF_VALUE;
272 uint8_t active_tones = audio_get_number_of_active_tones();
273 if (active_tones > AUDIO_MAX_SIMULTANEOUS_TONES)
274 active_tones = AUDIO_MAX_SIMULTANEOUS_TONES;
275
276 if (active_tones > 0) {
277 uint16_t value_avg = 0;
278 for (uint8_t i = 0; i < active_tones; i++) {
279 dac_if[i] = dac_if[i]
280 + ((audio_get_frequency(i) * AUDIO_DAC_BUFFER_SIZE) / AUDIO_DAC_SAMPLE_RATE)
281 * 2/3; // necessary to adjust for the gpt-timer frequency (three times the sample rate) and the dac-conversion beeing called twice per sample
282
283 // Needed because % doesn't work with floats
284 while (dac_if[i] >= (AUDIO_DAC_BUFFER_SIZE))
285 dac_if[i] = dac_if[i] - AUDIO_DAC_BUFFER_SIZE;
286
287 // #define AUDIO_DAC_MORPH_SPEED 372
288 // #define AUDIO_DAC_MORPH_SPEED_COMPUTED (AUDIO_DAC_SAMPLE_RATE / AUDIO_DAC_WAVETABLE_CUSTOM_LENGTH * (1000 / AUDIO_DAC_MORPH_SPEED))
289
290 uint16_t dac_i = (uint16_t)dac_if[i];
291 // value_avg += dac_buffer_custom[dac_morph_flipped][dac_i] / active_tones / 2 * ((dac_morph >= 63) ? 6400 - dac_morph_counter : dac_morph_counter) / 6400;
292 // value_avg += dac_buffer_custom[dac_morph_flipped + 1][dac_i] / active_tones / 2 * ((dac_morph >= 63) ? dac_morph_counter : 6400 - dac_morph_counter) / 6400;
293
294 // value_avg += dac_wavetable_custom[dac_morph][dac_i] / active_tones / 2 * (AUDIO_DAC_MORPH_SPEED_COMPUTED - dac_morph_counter) / AUDIO_DAC_MORPH_SPEED_COMPUTED;
295 // value_avg += dac_wavetable_custom[dac_morph + 1][dac_i] / active_tones / 2 * dac_morph_counter / AUDIO_DAC_MORPH_SPEED_COMPUTED;
296 value_avg += dac_wavetable_custom[dac_morph][dac_i] / active_tones;
297 }
298 value = value_avg;
299
300 // dac_morph_counter++;
301 // if (dac_morph_counter >= AUDIO_DAC_MORPH_SPEED_COMPUTED) {
302 // dac_morph_counter = 0;
303 // dac_morph = (dac_morph + 1) % 125;
304 // dac_morph_flipped = ((dac_morph >= 63) ? (125 - dac_morph) : dac_morph);
305 // dac_morph = (dac_morph + 1) % (AUDIO_DAC_WAVETABLE_CUSTOM_LENGTH - 1);
306 // }
307 }
308 return value;
309}
310
311void encoder_update(bool clockwise) {
312 if (clockwise) {
313 dac_morph = (dac_morph + 1) % AUDIO_DAC_WAVETABLE_CUSTOM_LENGTH;
314 } else {
315 if (dac_morph == 0)
316 dac_morph = (AUDIO_DAC_WAVETABLE_CUSTOM_LENGTH - 1);
317 else
318 dac_morph--;
319 }
320}