midk
Version:
Mapping MIDI keypress to PC keyboard
169 lines (147 loc) • 3.67 kB
text/typescript
import {
NoteCode as Note,
NoteNameKey,
} from './midi'
import { NamedKey as Key } from './keyboard'
export type PortalMap = Partial<Record<Note, Key>>
export type FnPortalMap = Partial<Record<Note, PortalMap>>
/**
* type ConfigMap is assign to schema of config file like yaml
*/
export type PortalConfigMap = Partial<Record<NoteNameKey, keyof typeof Key>>
export type FnPortalConfigMap = Partial<Record<NoteNameKey, PortalConfigMap>>
// template for copy and rewrite
export const TemplatePortal: PortalMap = {
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
[]: Key.NULL,
}
export interface PlayMode {
enable: boolean,
toggle: Note[],
}
export const playMode: PlayMode = {
enable: false,
toggle: [
Note.CSharp2,
Note.DSharp2,
Note.ASharp5,
],
}
export const portal: PortalMap = {
[]: Key.NULL,
[]: Key.escape,
[]: Key.home,
[]: Key.NULL,
[]: Key.end,
[]: Key.tilde,
[]: Key.tab,
[]: Key.control,
[]: Key.capsLock,
[]: Key.alt,
[]: Key.shift,
[]: Key.command,
[]: Key.a,
[]: Key.q,
[]: Key.z,
[]: Key.w,
[]: Key.s,
[]: Key.x,
[]: Key.e,
[]: Key.c,
[]: Key.d,
[]: Key.f,
[]: Key.r,
[]: Key.v,
[]: Key.space,
[]: Key.t,
[]: Key.b,
[]: Key.g,
[]: Key.h,
[]: Key.n,
[]: Key.y,
[]: Key.j,
[]: Key.u,
[]: Key.k,
[]: Key.i,
[]: Key.m,
[]: Key.l,
[]: Key.o,
[]: Key.comma,
[]: Key.p,
[]: Key.dot,
[]: Key.slash,
[]: Key.openBracket,
[]: Key.semicolon,
[]: Key.closeBracket,
[]: Key.quotes,
[]: Key.enter,
[]: Key.backslash,
[]: Key.left,
[]: Key.backspace,
[]: Key.down,
[]: Key.up,
[]: Key.right,
[]: Key.delete,
[]: Key.backspace,
[]: Key.audioVolDown,
[]: Key.audioVolUp,
[]: Key.lightsMonDown,
[]: Key.lightsMonUp,
[]: Key.dash,
[]: Key.equal,
}
export const fnPortal: FnPortalMap = {
[]: {
[]: Key.audioPrev,
[]: Key.audioPlay,
[]: Key.audioNext,
[]: Key.f1,
[]: Key.f2,
[]: Key.f3,
[]: Key.f4,
[]: Key.f5,
[]: Key.f6,
[]: Key.f7,
[]: Key.f8,
[]: Key.f9,
[]: Key.f10,
[]: Key.f11,
[]: Key.f12,
[]: Key.tilde,
[]: Key.num1,
[]: Key.num2,
[]: Key.num3,
[]: Key.num4,
[]: Key.num5,
[]: Key.num6,
[]: Key.num7,
[]: Key.num8,
[]: Key.num9,
[]: Key.num0,
[]: Key.pageDown,
[]: Key.pageUp,
},
[]: {
[]: Key.NULL,
},
}
export const mergePortalFn = (
portal: PortalMap,
fnPortals: PortalMap[],
): PortalMap => ({
...portal,
...fnPortals.reduce(
(prev, next) => Object.assign(prev, next),
{},
),
})