add midi layout and slider controls

This commit is contained in:
BigTuna94 2022-04-10 15:44:12 -04:00 committed by Kyle Brown
parent 34a7d47e49
commit 809a62b64d

View File

@ -7,15 +7,16 @@ import usb_hid
from kb import KMKKeyboard from kb import KMKKeyboard
from kmk.extensions.RGB import RGB, AnimationModes
from kmk.keys import KC from kmk.keys import KC
from kmk.extensions.RGB import RGB, AnimationModes
from kmk.modules.potentiometer import PotentiometerHandler from kmk.modules.potentiometer import PotentiometerHandler
from kmk.modules.layers import Layers from kmk.modules.layers import Layers
from kmk.modules.midi import MidiKeys
keyboard = KMKKeyboard() keyboard = KMKKeyboard()
keyboard.modules.append(Layers()) keyboard.modules.append(Layers())
keyboard.modules.append(MidiKeys())
#
rgb_ext = RGB( rgb_ext = RGB(
val_default=10, val_limit=100, # out of 255 val_default=10, val_limit=100, # out of 255
pixel_pin=keyboard.rgb_pixel_pin, num_pixels=keyboard.rgb_num_pixels, pixel_pin=keyboard.rgb_pixel_pin, num_pixels=keyboard.rgb_num_pixels,
@ -26,24 +27,37 @@ keyboard.extensions.append(rgb_ext)
_______ = KC.TRNS _______ = KC.TRNS
XXXXXXX = KC.NO XXXXXXX = KC.NO
FN1 = KC.MO(1) BASE_LAYER_IDX = 0
FN2 = KC.MO(2) FN1_LAYER_IDX = 1
FN3 = KC.MO(3) FN2_LAYER_IDX = 2
MIDI = KC.TG(4) FN3_LAYER_IDX = 3
MIDI_LAYER_IDX = 4
FN1 = KC.MO(FN1_LAYER_IDX)
FN2 = KC.MO(FN2_LAYER_IDX)
FN3 = KC.MO(FN3_LAYER_IDX)
MIDI = KC.TG(MIDI_LAYER_IDX)
RGB_TOG = KC.RGB_TOG RGB_TOG = KC.RGB_TOG
RAINBOW = KC.RGB_MODE_RAINBOW RAINBOW = KC.RGB_MODE_RAINBOW
def get_kb_rgb_obj(keyboard):
rgb = None
for ext in keyboard.extensions:
if type(ext) is RGB:
rgb = ext
break
return rgb
cc = ConsumerControl(usb_hid.devices) cc = ConsumerControl(usb_hid.devices)
# keyboard.level_lock = 0 # keyboard.level_lock = 0
keyboard.last_level = 0 keyboard.last_level = 0
level_steps = 17 level_steps = 17
# System volume
def slider_1_handler(state):
# print(f"slider 1 state: {state}")
def set_sys_vol(state):
# print(f"slider 1 state: {state}")
# if keyboard.level_lock == 1: # if keyboard.level_lock == 1:
# return # return
@ -54,10 +68,10 @@ def slider_1_handler(state):
# print(f"last: {keyboard.last_level}") # print(f"last: {keyboard.last_level}")
level_diff = abs(last_level - level) level_diff = abs(last_level - level)
if level_diff > 1: if level_diff > 1:
# keyboard.level_lock = 1 # keyboard.level_lock = 1
# print(f"Volume change: {level_diff}") # print(f"Volume change: {level_diff}")
# set volume to new level # set volume to new level
@ -68,7 +82,7 @@ def slider_1_handler(state):
else: else:
vol_direction = "down" vol_direction = "down"
cmd = ConsumerControlCode.VOLUME_DECREMENT cmd = ConsumerControlCode.VOLUME_DECREMENT
# print(f"Setting system volume {vol_direction} by {level_diff}") # print(f"Setting system volume {vol_direction} by {level_diff}")
for i in range(level_diff): for i in range(level_diff):
cc.send(cmd) cc.send(cmd)
@ -77,16 +91,13 @@ def slider_1_handler(state):
# keyboard.level_lock = 0 # keyboard.level_lock = 0
return return
# LEDs Color or animation speed # LEDs Color or animation speed
def slider_2_handler(state): def set_led_var(state):
rgb = None rgb = get_kb_rgb_obj(keyboard)
for ext in keyboard.extensions:
if type(ext) is RGB:
rgb = ext
break
if rgb is None: if rgb is None:
return return
if rgb.animation_mode == AnimationModes.STATIC: if rgb.animation_mode == AnimationModes.STATIC:
rgb.hue = int((state['position'] / 127) * 359) rgb.hue = int((state['position'] / 127) * 359)
else: else:
@ -94,13 +105,8 @@ def slider_2_handler(state):
rgb._do_update() rgb._do_update()
return return
# Keyboard Brightness def set_led_brightness(state):
def slider_3_handler(state): rgb = get_kb_rgb_obj(keyboard)
rgb = None
for ext in keyboard.extensions:
if type(ext) is RGB:
rgb = ext
break
if rgb is None: if rgb is None:
return return
@ -108,6 +114,24 @@ def slider_3_handler(state):
rgb._do_update() rgb._do_update()
return return
def slider_1_handler(state):
set_sys_vol(state)
def slider_2_handler(state):
if keyboard.active_layers[0] == MIDI_LAYER_IDX:
# use as MIDI Pitch wheel
key = KC.MIDI_PB( int(state['position'] / 16383) ) # 8192 midpoint for no bend
keyboard.tap_key(key)
else:
set_led_var(state)
def slider_3_handler(state):
if keyboard.active_layers[0] == MIDI_LAYER_IDX:
# use as MIDI note velocity
keyboard.__midi_velocity = int(state['position'] / 127)
else:
set_led_brightness(state)
faders = PotentiometerHandler() faders = PotentiometerHandler()
faders.pins = ( faders.pins = (
(board.RV1, slider_1_handler, False), (board.RV1, slider_1_handler, False),
@ -116,6 +140,8 @@ faders.pins = (
) )
keyboard.modules.append(faders) keyboard.modules.append(faders)
def MN(note : str):
return KC.MIDI_NOTE(note, keyboard.__midi_velocity)
keyboard.keymap = [ keyboard.keymap = [
[ # Base Layer [ # Base Layer
@ -125,7 +151,7 @@ keyboard.keymap = [
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.UP, KC.END, 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.UP, KC.END,
FN1, KC.LGUI, KC.LALT, KC.SPC, KC.ENTER, KC.RGUI, KC.RALT, FN2, KC.LEFT, KC.DOWN, KC.RIGHT, FN1, KC.LGUI, KC.LALT, KC.SPC, KC.ENTER, KC.RGUI, KC.RALT, FN2, KC.LEFT, KC.DOWN, KC.RIGHT,
], ],
[ # FN1 Layer [ # FN1 Layer
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, RGB_TOG, RAINBOW, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RAINBOW, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@ -133,7 +159,7 @@ keyboard.keymap = [
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
XXXXXXX, _______, _______, _______, _______, _______, _______, FN2, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, FN2, _______, _______, _______,
], ],
[ # FN2 Layer [ # FN2 Layer
_______, _______, KC.F1 , KC.F2 , KC.F3 , KC.F4 , KC.F5 , KC.F6 , KC.F7 , KC.F8 , KC.F9 , KC.F10 , KC.F11 , KC.F12 , _______, _______, _______, _______, KC.F1 , KC.F2 , KC.F3 , KC.F4 , KC.F5 , KC.F6 , KC.F7 , KC.F8 , KC.F9 , KC.F10 , KC.F11 , KC.F12 , _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@ -141,7 +167,7 @@ keyboard.keymap = [
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
FN3, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______, FN3, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______,
], ],
[ # FN3 Layer [ # FN3 Layer
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@ -149,12 +175,12 @@ keyboard.keymap = [
_______, _______, _______, _______, _______, _______, _______, MIDI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MIDI, _______, _______, _______, _______, _______, _______,
XXXXXXX, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______,
], ],
[ # MIDI Layer [ # MIDI Layer
MIDI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MIDI, MN('E3'), MN('F#3'),MN('G#3'),MN('A#3'),XXXXXXX, MN('C#4'),MN('D#4'),XXXXXXX, MN('F#4'),MN('G#4'),MN('A#4'),MN('C5'),MN('C#5'), _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MN('F3'), MN('G3'), MN('A3'), MN('B3'), MN('C4'), MN('D4'), MN('E4'), MN('F4'), MN('G4'), MN('A4'), MN('B4'), _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, MN('C#2'),MN('D32'),XXXXXXX, MN('F#2'),MN('G#2'),MN('A#2'),XXXXXXX, MN('C#3'),MN('D#3'),XXXXXXX, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MN('B1'), MN('C2'), MN('D2'), MN('E2'), MN('F2'), MN('G2'), MN('A2'), MN('B2'), MN('C3'), MN('D3'), MN('E3'), _______, _______,
XXXXXXX, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______,
], ],
] ]