add midi layout and slider controls
This commit is contained in:
parent
34a7d47e49
commit
809a62b64d
@ -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, _______, _______, _______,
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user