├── src ├── .vscode │ └── settings.json ├── assets │ ├── icon.png │ ├── app_image.png │ ├── system-tray-icon.png │ ├── app.css │ ├── editor.css │ ├── milligram.min.css │ └── milligram.min.css.map ├── sounds │ ├── keys │ │ ├── nk-cream │ │ │ ├── [.wav │ │ │ ├── ].wav │ │ │ ├── a.wav │ │ │ ├── b.wav │ │ │ ├── c.wav │ │ │ ├── d.wav │ │ │ ├── e.wav │ │ │ ├── f.wav │ │ │ ├── g.wav │ │ │ ├── h.wav │ │ │ ├── i.wav │ │ │ ├── j.wav │ │ │ ├── k.wav │ │ │ ├── l.wav │ │ │ ├── m.wav │ │ │ ├── n.wav │ │ │ ├── o.wav │ │ │ ├── p.wav │ │ │ ├── q.wav │ │ │ ├── r.wav │ │ │ ├── s.wav │ │ │ ├── t.wav │ │ │ ├── u.wav │ │ │ ├── v.wav │ │ │ ├── w.wav │ │ │ ├── x.wav │ │ │ ├── y.wav │ │ │ ├── z.wav │ │ │ ├── a-up.wav │ │ │ ├── enter.wav │ │ │ ├── shift.wav │ │ │ ├── space.wav │ │ │ ├── tab.wav │ │ │ ├── a-down.wav │ │ │ ├── backspace.wav │ │ │ ├── caps lock.wav │ │ │ └── config.json │ │ ├── eg-oreo │ │ │ ├── oreo.ogg │ │ │ └── config.json │ │ ├── cherrymx-black-abs │ │ │ ├── sound.ogg │ │ │ └── config.json │ │ ├── cherrymx-black-pbt │ │ │ ├── sound.ogg │ │ │ └── config.json │ │ ├── cherrymx-blue-abs │ │ │ ├── sound.ogg │ │ │ └── config.json │ │ ├── cherrymx-blue-pbt │ │ │ ├── sound.ogg │ │ │ └── config.json │ │ ├── cherrymx-brown-abs │ │ │ ├── sound.ogg │ │ │ └── config.json │ │ ├── cherrymx-brown-pbt │ │ │ ├── sound.ogg │ │ │ └── config.json │ │ ├── cherrymx-red-pbt │ │ │ ├── sound.ogg │ │ │ └── config.json │ │ ├── eg-crystal-purple │ │ │ ├── purple.ogg │ │ │ └── config.json │ │ └── topre-purple-hybrid-pbt │ │ │ ├── sound.ogg │ │ │ └── config.json │ └── mouse │ │ ├── logi-g502 │ │ ├── left-up.m4a │ │ ├── right-up.m4a │ │ ├── left-down.m4a │ │ ├── right-down.m4a │ │ ├── scroll-up.m4a │ │ ├── scroll-down.m4a │ │ └── config.json │ │ ├── harpoon-rgb │ │ ├── left-up.m4a │ │ ├── right-up.m4a │ │ ├── left-down.m4a │ │ ├── right-down.m4a │ │ ├── scroll-down.m4a │ │ ├── scroll-up.m4a │ │ └── config.json │ │ ├── mamba-elite │ │ ├── left-up.m4a │ │ ├── right-up.m4a │ │ ├── left-down.m4a │ │ ├── right-down.m4a │ │ ├── scroll-down.m4a │ │ ├── scroll-up.m4a │ │ └── config.json │ │ ├── amazon-gaming │ │ ├── left-down.mp3 │ │ ├── left-up.mp3 │ │ ├── right-up.mp3 │ │ ├── scroll-up.mp3 │ │ ├── right-down.mp3 │ │ ├── scroll-down.mp3 │ │ └── config.json │ │ ├── logi-trackball │ │ ├── left-up.mp3 │ │ ├── right-up.mp3 │ │ ├── left-down.mp3 │ │ ├── right-down.mp3 │ │ ├── scroll-up.mp3 │ │ ├── scroll-down.mp3 │ │ └── config.json │ │ ├── apple-magic-mouse │ │ ├── left-up.mp3 │ │ ├── left-down.mp3 │ │ ├── right-down.mp3 │ │ ├── right-up.mp3 │ │ ├── scroll-up.mp3 │ │ ├── scroll-down.mp3 │ │ └── config.json │ │ └── corsair-m65-elite │ │ ├── left-up.mp3 │ │ ├── left-down.mp3 │ │ ├── right-down.mp3 │ │ ├── right-up.mp3 │ │ ├── scroll-up.mp3 │ │ ├── scroll-down.mp3 │ │ └── config.json ├── utils │ ├── startup_handler.js │ ├── listen_handler.js │ ├── keyup_handler.js │ ├── random_handler.js │ ├── mouse_handler.js │ └── remapper.js ├── libs │ ├── layouts.js │ └── keycodes.js ├── editor.html ├── app.html ├── main.js ├── editor.js └── app.js ├── .DS_Store ├── doc ├── .DS_Store ├── faq.md ├── performance.md ├── bugs │ ├── nosound.md │ └── nopacks.md ├── virus.md └── linux-and-mac.md ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── issues.md ├── LICENSE ├── package.json └── README.md /src/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/.DS_Store -------------------------------------------------------------------------------- /doc/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/doc/.DS_Store -------------------------------------------------------------------------------- /src/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/assets/icon.png -------------------------------------------------------------------------------- /src/assets/app_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/assets/app_image.png -------------------------------------------------------------------------------- /src/assets/system-tray-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/assets/system-tray-icon.png -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/[.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/[.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/].wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/].wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/a.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/a.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/b.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/b.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/c.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/c.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/d.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/d.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/e.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/e.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/f.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/f.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/g.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/g.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/h.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/h.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/i.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/i.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/j.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/j.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/k.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/k.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/l.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/l.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/m.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/m.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/n.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/n.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/o.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/o.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/p.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/p.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/q.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/q.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/r.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/r.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/s.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/s.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/t.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/t.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/u.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/u.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/v.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/v.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/w.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/w.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/x.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/x.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/y.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/y.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/z.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/z.wav -------------------------------------------------------------------------------- /src/sounds/keys/eg-oreo/oreo.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/eg-oreo/oreo.ogg -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/a-up.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/a-up.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/enter.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/enter.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/shift.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/shift.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/space.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/space.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/tab.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/tab.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/a-down.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/a-down.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/backspace.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/backspace.wav -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/caps lock.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/nk-cream/caps lock.wav -------------------------------------------------------------------------------- /src/sounds/mouse/logi-g502/left-up.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-g502/left-up.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/logi-g502/right-up.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-g502/right-up.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/harpoon-rgb/left-up.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/harpoon-rgb/left-up.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/harpoon-rgb/right-up.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/harpoon-rgb/right-up.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/logi-g502/left-down.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-g502/left-down.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/logi-g502/right-down.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-g502/right-down.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/logi-g502/scroll-up.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-g502/scroll-up.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/mamba-elite/left-up.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/mamba-elite/left-up.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/mamba-elite/right-up.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/mamba-elite/right-up.m4a -------------------------------------------------------------------------------- /src/sounds/keys/cherrymx-black-abs/sound.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/cherrymx-black-abs/sound.ogg -------------------------------------------------------------------------------- /src/sounds/keys/cherrymx-black-pbt/sound.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/cherrymx-black-pbt/sound.ogg -------------------------------------------------------------------------------- /src/sounds/keys/cherrymx-blue-abs/sound.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/cherrymx-blue-abs/sound.ogg -------------------------------------------------------------------------------- /src/sounds/keys/cherrymx-blue-pbt/sound.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/cherrymx-blue-pbt/sound.ogg -------------------------------------------------------------------------------- /src/sounds/keys/cherrymx-brown-abs/sound.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/cherrymx-brown-abs/sound.ogg -------------------------------------------------------------------------------- /src/sounds/keys/cherrymx-brown-pbt/sound.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/cherrymx-brown-pbt/sound.ogg -------------------------------------------------------------------------------- /src/sounds/keys/cherrymx-red-pbt/sound.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/cherrymx-red-pbt/sound.ogg -------------------------------------------------------------------------------- /src/sounds/keys/eg-crystal-purple/purple.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/eg-crystal-purple/purple.ogg -------------------------------------------------------------------------------- /src/sounds/mouse/amazon-gaming/left-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/amazon-gaming/left-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/amazon-gaming/left-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/amazon-gaming/left-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/amazon-gaming/right-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/amazon-gaming/right-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/amazon-gaming/scroll-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/amazon-gaming/scroll-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/harpoon-rgb/left-down.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/harpoon-rgb/left-down.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/harpoon-rgb/right-down.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/harpoon-rgb/right-down.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/harpoon-rgb/scroll-down.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/harpoon-rgb/scroll-down.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/harpoon-rgb/scroll-up.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/harpoon-rgb/scroll-up.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/logi-g502/scroll-down.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-g502/scroll-down.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/logi-trackball/left-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-trackball/left-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/logi-trackball/right-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-trackball/right-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/mamba-elite/left-down.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/mamba-elite/left-down.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/mamba-elite/right-down.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/mamba-elite/right-down.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/mamba-elite/scroll-down.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/mamba-elite/scroll-down.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/mamba-elite/scroll-up.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/mamba-elite/scroll-up.m4a -------------------------------------------------------------------------------- /src/sounds/mouse/amazon-gaming/right-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/amazon-gaming/right-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/amazon-gaming/scroll-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/amazon-gaming/scroll-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/apple-magic-mouse/left-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/apple-magic-mouse/left-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/corsair-m65-elite/left-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/corsair-m65-elite/left-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/logi-trackball/left-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-trackball/left-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/logi-trackball/right-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-trackball/right-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/logi-trackball/scroll-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-trackball/scroll-up.mp3 -------------------------------------------------------------------------------- /src/sounds/keys/topre-purple-hybrid-pbt/sound.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/keys/topre-purple-hybrid-pbt/sound.ogg -------------------------------------------------------------------------------- /src/sounds/mouse/apple-magic-mouse/left-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/apple-magic-mouse/left-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/apple-magic-mouse/right-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/apple-magic-mouse/right-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/apple-magic-mouse/right-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/apple-magic-mouse/right-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/apple-magic-mouse/scroll-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/apple-magic-mouse/scroll-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/corsair-m65-elite/left-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/corsair-m65-elite/left-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/corsair-m65-elite/right-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/corsair-m65-elite/right-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/corsair-m65-elite/right-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/corsair-m65-elite/right-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/corsair-m65-elite/scroll-up.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/corsair-m65-elite/scroll-up.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/logi-trackball/scroll-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/logi-trackball/scroll-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/apple-magic-mouse/scroll-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/apple-magic-mouse/scroll-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/corsair-m65-elite/scroll-down.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PyroCalzone/MechVibesPlusPlus/HEAD/src/sounds/mouse/corsair-m65-elite/scroll-down.mp3 -------------------------------------------------------------------------------- /src/sounds/mouse/harpoon-rgb/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "custom-sound-pack-90696052", 3 | "name": "Corsair Harpoon RGB", 4 | "key_define_type": "multi", 5 | "sound": "sound.ogg", 6 | "defines": { 7 | "1": "left-down.m4a", 8 | "01": "left-up.m4a", 9 | "2": "right-down.m4a", 10 | "02": "right-up.m4a", 11 | "3": "scroll-down.m4a", 12 | "03": "scroll-up.m4a" 13 | } 14 | } -------------------------------------------------------------------------------- /src/sounds/mouse/mamba-elite/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "custom-sound-pack-90696052", 3 | "name": "Razer Mamba Elite", 4 | "key_define_type": "multi", 5 | "sound": "sound.ogg", 6 | "defines": { 7 | "1": "left-down.m4a", 8 | "01": "left-up.m4a", 9 | "2": "right-down.m4a", 10 | "02": "right-up.m4a", 11 | "3": "scroll-down.m4a", 12 | "03": "scroll-up.m4a" 13 | } 14 | } -------------------------------------------------------------------------------- /src/sounds/mouse/amazon-gaming/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "custom-sound-pack-53799271", 3 | "name": "Amazon Gaming Mouse", 4 | "key_define_type": "multi", 5 | "sound": "sound.ogg", 6 | "defines": { 7 | "1": "left-down.mp3", 8 | "01": "left-up.mp3", 9 | "2": "right-down.mp3", 10 | "02": "right-up.mp3", 11 | "3": "scroll-down.mp3", 12 | "03": "scroll-up.mp3" 13 | } 14 | } -------------------------------------------------------------------------------- /src/sounds/mouse/apple-magic-mouse/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "custom-sound-pack-90696052", 3 | "name": "Apple Magic Mouse", 4 | "key_define_type": "multi", 5 | "sound": "sound.ogg", 6 | "defines": { 7 | "1": "left-down.mp3", 8 | "01": "left-up.mp3", 9 | "2": "right-down.mp3", 10 | "02": "right-up.mp3", 11 | "3": "scroll-down.mp3", 12 | "03": "scroll-up.mp3" 13 | } 14 | } -------------------------------------------------------------------------------- /src/sounds/mouse/corsair-m65-elite/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "custom-sound-pack-43252347", 3 | "name": "Corsair M65 Elite", 4 | "key_define_type": "multi", 5 | "sound": "sound.ogg", 6 | "defines": { 7 | "1": "left-down.mp3", 8 | "01": "left-up.mp3", 9 | "2": "right-down.mp3", 10 | "02": "right-up.mp3", 11 | "3": "scroll-down.mp3", 12 | "03": "scroll-up.mp3" 13 | } 14 | } -------------------------------------------------------------------------------- /src/sounds/mouse/logi-g502/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "custom-sound-pack-90696052", 3 | "name": "Logitech G502 Lightspeed", 4 | "key_define_type": "multi", 5 | "sound": "sound.ogg", 6 | "defines": { 7 | "1": "left-down.m4a", 8 | "01": "left-up.m4a", 9 | "2": "right-down.m4a", 10 | "02": "right-up.m4a", 11 | "3": "scroll-down.m4a", 12 | "03": "scroll-up.m4a" 13 | } 14 | } -------------------------------------------------------------------------------- /src/sounds/mouse/logi-trackball/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "custom-sound-pack-28658750", 3 | "name": "Logitech M570 Trackball", 4 | "key_define_type": "multi", 5 | "sound": "sound.ogg", 6 | "defines": { 7 | "1": "left-down.mp3", 8 | "01": "left-up.mp3", 9 | "2": "right-down.mp3", 10 | "02": "right-up.mp3", 11 | "3": "scroll-down.mp3", 12 | "03": "scroll-up.mp3" 13 | } 14 | } -------------------------------------------------------------------------------- /doc/faq.md: -------------------------------------------------------------------------------- 1 | # Mechvibes++ FAQ 2 | 3 | ## How do I make Mechvibes++ go through my microphone? 4 | 5 | You can use [VoiceMeeter Banana](https://vb-audio.com/Voicemeeter/banana.htm) to do this. Please look up another guide if you can't figure out how to set this up yourself. 6 | 7 | Please also know that VoiceMeeter is not our software and we can't help with issues for it. 8 | 9 | ## How do I get this on Linux/macOS? 10 | 11 | You'll need to compile a version yourself. Please see this [guide](linux-and-mac.md). -------------------------------------------------------------------------------- /src/utils/startup_handler.js: -------------------------------------------------------------------------------- 1 | class startupHandler { 2 | constructor(app) { 3 | this.app = app; 4 | } 5 | 6 | get is_enabled() { 7 | return this.app.getLoginItemSettings().openAtLogin; 8 | } 9 | 10 | enable() { 11 | this.app.setLoginItemSettings({ 12 | openAtLogin: true, 13 | }); 14 | } 15 | 16 | disable() { 17 | this.app.setLoginItemSettings({ 18 | openAtLogin: false, 19 | }); 20 | } 21 | 22 | toggle() { 23 | if (this.isEnabled) { 24 | this.disable(); 25 | } else { 26 | this.enable(); 27 | } 28 | } 29 | } 30 | 31 | module.exports = startupHandler; 32 | -------------------------------------------------------------------------------- /doc/performance.md: -------------------------------------------------------------------------------- 1 | # Mechvibes++ Known Issues 2 | ## High RAM Usage 3 | 4 | This is a known issue with the program and we are trying our best to work on fixing this. 5 | 6 | Here's two temporary fixes that may help: 7 | 8 | - Quit and reopen the app 9 | - Uninstall any custom soundpacks that you don't use 10 | 11 | ## Poor game performance 12 | 13 | - Make sure that normal Mechvibes isn't also open alongside of Mechvibes++ 14 | - You may not have enough system resources (RAM or CPU power) to process both your game and Mechvibes++ at the same time 15 | - Make sure that Mechvibes++ is running as Administrator, they may just be conflicting with one another. -------------------------------------------------------------------------------- /src/utils/listen_handler.js: -------------------------------------------------------------------------------- 1 | const Store = require('electron-store'); 2 | const store = new Store(); 3 | 4 | class startupHandler { 5 | constructor(app) { 6 | this.app = app; 7 | this.MV_MUTED_LSID = 'mechvibes-muted'; 8 | } 9 | 10 | get is_muted() { 11 | return store.get(this.MV_MUTED_LSID); 12 | } 13 | 14 | enable() { 15 | store.set(this.MV_MUTED_LSID, true); 16 | } 17 | 18 | disable() { 19 | store.set(this.MV_MUTED_LSID, false); 20 | } 21 | 22 | toggle() { 23 | if (this.is_muted) { 24 | this.disable(); 25 | } else { 26 | this.enable(); 27 | } 28 | } 29 | } 30 | 31 | module.exports = startupHandler; 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /src/utils/keyup_handler.js: -------------------------------------------------------------------------------- 1 | const Store = require('electron-store'); 2 | const store = new Store(); 3 | 4 | class startupHandler { 5 | constructor(app) { 6 | this.app = app; 7 | this.MV_KEYUP_LSID = 'mechvibes-keyup'; 8 | } 9 | 10 | get is_keyup() { 11 | return store.get(this.MV_KEYUP_LSID); 12 | } 13 | 14 | enable() { 15 | store.set(this.MV_KEYUP_LSID, true); 16 | } 17 | 18 | disable() { 19 | store.set(this.MV_KEYUP_LSID, false); 20 | } 21 | 22 | toggle() { 23 | if (this.is_keyup) { 24 | this.disable(); 25 | } else { 26 | this.enable(); 27 | } 28 | } 29 | } 30 | 31 | module.exports = startupHandler; 32 | -------------------------------------------------------------------------------- /issues.md: -------------------------------------------------------------------------------- 1 | # Mechvibes++ Known Issues 2 | 3 | Please [join our discord](https://discord.gg/CZ8Qgth2SW) if you have any issues that are not listed here. 4 | 5 | ## Software issues 6 | 7 | - No sound on keypress: [guide](doc/bugs/nosound.md) 8 | - No soundpacks showing up/app is loading forever: [guide](doc/bugs/nopacks.md) 9 | 10 | ## System issues 11 | 12 | - Flagged as virus: [guide](doc/virus.md) 13 | - Poor performance in games: [guide](doc/performance.md) 14 | 15 | ## Other issues 16 | 17 | Check out this small [FAQ Page](doc/faq.md) for information on microphone routing and other versions. 18 | 19 | Otherwise, please [join our discord](https://discord.gg/CZ8Qgth2SW) and ask us there! 20 | -------------------------------------------------------------------------------- /src/utils/random_handler.js: -------------------------------------------------------------------------------- 1 | const Store = require('electron-store'); 2 | const store = new Store(); 3 | 4 | class startupHandler { 5 | constructor(app) { 6 | this.app = app; 7 | this.MV_RANDOM_LSID = 'mechvibes-random'; 8 | } 9 | 10 | get is_random() { 11 | return store.get(this.MV_RANDOM_LSID); 12 | } 13 | 14 | enable() { 15 | store.set(this.MV_RANDOM_LSID, true); 16 | } 17 | 18 | disable() { 19 | store.set(this.MV_RANDOM_LSID, false); 20 | } 21 | 22 | toggle() { 23 | if (this.is_random) { 24 | this.disable(); 25 | } else { 26 | this.enable(); 27 | } 28 | } 29 | } 30 | 31 | module.exports = startupHandler; 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /src/utils/mouse_handler.js: -------------------------------------------------------------------------------- 1 | const Store = require('electron-store'); 2 | const store = new Store(); 3 | 4 | class startupHandler { 5 | constructor(app) { 6 | this.app = app; 7 | this.MV_MOUSESOUNDS_LSID = 'mechvibes-mouse'; 8 | } 9 | 10 | get is_mousesounds() { 11 | return store.get(this.MV_MOUSESOUNDS_LSID); 12 | } 13 | 14 | enable() { 15 | store.set(this.MV_MOUSESOUNDS_LSID, true); 16 | } 17 | 18 | disable() { 19 | store.set(this.MV_MOUSESOUNDS_LSID, false); 20 | } 21 | 22 | toggle() { 23 | if (this.is_mousesounds) { 24 | this.disable(); 25 | } else { 26 | this.enable(); 27 | } 28 | } 29 | } 30 | 31 | module.exports = startupHandler; 32 | -------------------------------------------------------------------------------- /doc/bugs/nosound.md: -------------------------------------------------------------------------------- 1 | # Mechvibes++ Known Issues 2 | 3 | ## No Sound on Keypress 4 | 5 | If you are not getting any sound feedback from Mechvibes++, chances are that whatever application you are running is running as Administrator. Therefore, the application is practically blocking Mechvibes from running. 6 | 7 | ### To fix this, you can do two things: 8 | 9 | - Run Mechvibes++ as Administrator 10 | - It should ask for this upon startup. Skipping this prompt will still let the app run but may lead to problems like what you may be having. 11 | 12 | - Quit the application, and run it normally. 13 | 14 | 15 | ### How to quit the app (Windows) 16 |  17 | 18 | ### How to quit the app (Mac) 19 | Assuming the app is already running, click anywhere on the app to focus it. Then, press [CMD] and [Q] at the same time on your keyboard to quit it. -------------------------------------------------------------------------------- /doc/virus.md: -------------------------------------------------------------------------------- 1 | # Mechvibes++ Known Issues 2 | ## Flagged as Virus 3 | 4 | Windows Defender will probably block the Mechvibes++ installer. 5 | 6 | In simple terms, this is because we have not made Microsoft verify that the software as safe (hence "unknown publisher") 7 | 8 | To stop it from being blocked, click on “more info” and then “Run anyway” 9 | 10 | ## Is Mechvibes++ a virus? 11 | 12 | Short answer: no 13 | 14 | Long answer: 15 | 16 | We understand that there may be a concern of Mechvibes++ being a virus because Windows flags it as one. 17 | 18 | Anti-virus software detects the functions that an application or script has and respond accordingly. Because both keyloggers and Mechvibes++ listen for keypresses, some anti-virus software might see Mechvibes++ as a threat or virus. 19 | 20 | Mechvibes++ will always immediately discard any keypress data once it's done matching it with files in your currently selected soundpack. 21 | 22 | The code for Mechvibes++ is always free for you to look at and scroll through online if you want to investigate. -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 PyroCalzone 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /doc/bugs/nopacks.md: -------------------------------------------------------------------------------- 1 | # Mechvibes++ Known Issues 2 | 3 | 4 | ## No soundpacks showing up after fresh install 5 | 6 | ### On Windows 7 | - Download [Visual C++](https://aka.ms/vs/16/release/vc_redist.x64.exe) 8 | - If it says error, _READ THE INFO!_ It may already be installed! 9 | - Restart Mechvibes++ 10 | - Restart your computer. 11 | 12 | ### On macOS 13 | - Go to Privacy in System Settings 14 | - Check for Mechvibes++ in any of the categories and enable any permissions 15 | - Restart Mechvibes++ 16 | 17 | ## No soundpacks showing up after adding a soundpack 18 | 19 | In most cases, this bug happens if you have incorrectly added a soundpack. Below is a list with things that can cause this bug to occur. 20 | 21 | **Known Causes** 22 | 23 | - Adding / leaving an empty folder in mechvibes_custom 24 | - Having a folder inside a folder 25 | - Touching the config.json. 26 | - Having the .zip or .rar files in mechvibes_custom 27 | 28 | **If all else fails** 29 | 30 | Sometimes the custom folder just- breaks. 31 | 32 | How to fix this: 33 | Remove the entire folder and reload. A new one will automatically be created for you once you restart the app. -------------------------------------------------------------------------------- /doc/linux-and-mac.md: -------------------------------------------------------------------------------- 1 | # Mechvibes++ FAQ 2 | ## Linux and macOS 3 | 4 | Linux and macOS are not publicly availible. 5 | 6 | This is because we need to have a machine running one of these operating systems to make a version for it. 7 | 8 | ## Can I make a version myself? 9 | 10 | Yes, you can! 11 | 12 | **What you'll need** 13 | 14 | - [Visual Studio Code](https://code.visualstudio.com/) 15 | - [Node JS] (https://nodejs.org/) 16 | - A machine running your desired OS 17 | - For example, if you're trying to build a Mac version, you'll need a Mac. 18 | - Knowledge in JavaScript 19 | - So you can fix any issues in the code preventing the app from running on your OS 20 | 21 | ## How to do it? 22 | 23 | Follow these steps after installing both NodeJS and Visual Studio Code 24 | 25 | 1. Download the Mechvibes [source code](https://github.com/hainguyents13/mechvibes) 26 | 2. Download the Mechvibes++ [source code](https://github.com/PyroCalzone/MechVibesPlusPlus) 27 | 3. Replace the **src** folder in the Mechvibes source code with the **src** folder from Mechvibes++ 28 | 4. Open the Mechvibes folder in **Visual Studio Code** 29 | 5. At the top, click **Terminal** then **New Terminal** 30 | 6. Run this command in the new terminal: **npm i** 31 | 7. If you're building for **Linux**, run **npm run build:linux** 32 | 8. If you're building for **macOS**, run **npm build:mac** 33 | 9. Wait for the compile to finish, this may take a while. 34 | 10. Run the app and fix any issues using the developer console to check for errors. 35 | 36 | If you can't figure anything out, you can resort to our [Discord](https://discord.gg/CZ8Qgth2SW/) server for help. Remember that we don't own these machines ourselves and may not entirely be available to assist. 37 | -------------------------------------------------------------------------------- /src/libs/layouts.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const standard = { 4 | // standard 5 | main: [ 6 | [1, 0, 59, 60, 61, 62, 0, 63, 64, 65, 66, 67, 68, 87, 88], 7 | [41, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], 8 | [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 43], 9 | [58, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 28], 10 | [42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], 11 | [29, 3675, 56, 57, 3640, 3676, 3677, 3613], 12 | ], 13 | // edit 14 | edit: [ 15 | [3639, 70, 3653], // 16 | [3666, 3655, 3657], // 17 | [3667, 3663, 3665], // 18 | [], 19 | [0, 57416, 0], // 20 | [57419, 57424, 57421], // 21 | ], 22 | // numpad 23 | numpad: [ 24 | [], // 25 | [69, 3637, 55, 74], 26 | [71, 72, 73, 78], 27 | [75, 76, 77], 28 | [79, 80, 81, 3612], 29 | [82, 83], 30 | ], 31 | }; 32 | 33 | function remap(to = 'win32') { 34 | const layout = JSON.parse(JSON.stringify(standard)); 35 | switch (to) { 36 | case 'linux': 37 | break; 38 | 39 | case 'win32': { 40 | layout.edit[1] = [61010, 60999, 61001]; 41 | layout.edit[2] = [61011, 61007, 61009]; 42 | layout.edit[4] = [0, 61000, 0]; 43 | layout.edit[5] = [61003, 61008, 61005]; 44 | break; 45 | } 46 | 47 | case 'darwin': { 48 | layout.main[5][1] = 56; 49 | layout.main[5][2] = 3675; 50 | layout.main[5][4] = 3675; 51 | layout.main[5][5] = 56; 52 | layout.main[5][6] = 29; 53 | 54 | layout.edit[0][0] = [91, 91, 92]; 55 | 56 | layout.numpad[0] = [69, 3597, 3637, 55]; 57 | layout.numpad[1][3] = 74; 58 | layout.numpad[2][3] = 78; 59 | break; 60 | } 61 | } 62 | 63 | return layout; 64 | } 65 | 66 | const sizes = { 67 | 15: 'key-15u', 68 | 58: 'key-175u', 69 | 42: 'key-225u', 70 | 29: 'key-125u', 71 | 3675: 'key-125u', 72 | 56: 'key-125u', 73 | 57: 'key-625u', 74 | 3640: 'key-125u', 75 | 3676: 'key-125u', 76 | 3677: 'key-125u', 77 | 3613: 'key-125u', 78 | 54: 'key-275u', 79 | 28: 'key-225u', 80 | 43: 'key-15u', 81 | 14: 'key-2u', 82 | 83 | 82: 'key-2u', 84 | 78: 'key-height-2u', 85 | 3612: 'key-height-2u', 86 | }; 87 | 88 | module.exports = { win32: remap('win32'), darwin: remap('darwin'), linux: standard, sizes }; 89 | -------------------------------------------------------------------------------- /src/utils/remapper.js: -------------------------------------------------------------------------------- 1 | function remapper(from = 'standard', to = 'darwin', defines = {}) { 2 | if (from == 'standard') { 3 | // from standard linux, darwin, win32 4 | switch (to) { 5 | case 'linux': 6 | break; 7 | case 'darwin': { 8 | defines['91'] = defines['3639']; // mac f13 9 | defines['92'] = defines['70']; // mac f14 10 | defines['93'] = defines['3653']; // mac f15 11 | defines['91'] = defines['57416']; 12 | defines['56'] = defines['3675']; 13 | defines['3675'] = defines['56']; 14 | defines['3675'] = defines['3640']; 15 | defines['56'] = defines['3676']; 16 | defines['29'] = defines['3613']; 17 | 18 | defines['3597'] = defines['69']; // numlock -> clear 19 | break; 20 | } 21 | case 'win32': { 22 | // row 2 23 | defines['61010'] = defines['3666']; 24 | defines['60999'] = defines['3655']; 25 | defines['61001'] = defines['3657']; 26 | // row 3 27 | defines['61011'] = defines['3667']; 28 | defines['61007'] = defines['3663']; 29 | defines['61009'] = defines['3665']; 30 | defines['3677'] = defines['3613']; 31 | // row 4 32 | defines['61000'] = defines['57416']; 33 | // row 5 34 | defines['61003'] = defines['57419']; 35 | defines['61008'] = defines['57424']; 36 | defines['61005'] = defines['57421']; 37 | break; 38 | } 39 | } 40 | } else { 41 | // from linux, darwin, win32 to standard 42 | switch (from) { 43 | case 'darwin': { 44 | defines['3639'] = defines['91']; 45 | defines['70'] = defines['92']; 46 | defines['3653'] = defines['93']; 47 | defines['3675'] = defines['56']; 48 | defines['56'] = defines['3675']; 49 | defines['3640'] = defines['3675']; 50 | defines['3676'] = defines['56']; 51 | defines['3613'] = defines['29']; 52 | break; 53 | } 54 | case 'win32': { 55 | // row 2 56 | defines['3666'] = defines['61010']; 57 | defines['3655'] = defines['60999']; 58 | defines['3657'] = defines['61001']; 59 | // row 3 60 | defines['3667'] = defines['61011']; 61 | defines['3663'] = defines['61007']; 62 | defines['3665'] = defines['61009']; 63 | // row 4 64 | defines['57416'] = defines['61000']; 65 | // row 5 66 | defines['57419'] = defines['61003']; 67 | defines['57424'] = defines['61008']; 68 | defines['57421'] = defines['61005']; 69 | break; 70 | } 71 | } 72 | } 73 | return defines; 74 | } 75 | 76 | module.exports = remapper; 77 | 78 | 79 | // How do I make this compatible with mouse? 80 | -------------------------------------------------------------------------------- /src/assets/app.css: -------------------------------------------------------------------------------- 1 | a, 2 | a:hover { 3 | color: #ff5050; 4 | } 5 | 6 | a:hover { 7 | text-decoration: underline; 8 | } 9 | 10 | #app-logo { 11 | display: flex; 12 | justify-content: center; 13 | margin-bottom: 50px; 14 | } 15 | 16 | #logo { 17 | font-family: sans-serif; 18 | transition: all 0.1s ease; 19 | box-shadow: 0 2px #6b6b6b; 20 | font-size: 3rem; 21 | font-weight: 600; 22 | background: #181818; 23 | text-align: center; 24 | border-radius: 0.5rem; 25 | border: 2px solid #7c7c7c; 26 | padding: 1rem 2rem; 27 | color: #8a8a8a; 28 | } 29 | 30 | #logo.pressed { 31 | box-shadow: 0 0; 32 | margin-bottom: -2px; 33 | margin-top: 2px; 34 | } 35 | 36 | .hidden { 37 | display: none; 38 | } 39 | 40 | .divider { 41 | display: block; 42 | width: 100%; 43 | border-bottom: 1px solid #6b6b6b; 44 | margin-top: 1rem; 45 | margin-bottom: 2rem; 46 | } 47 | 48 | #update-available { 49 | padding: 8px 5px; 50 | border: 1px solid #505050; 51 | background: #161616; 52 | border-radius: 5px; 53 | } 54 | 55 | #soundpack-bug { 56 | padding: 8px 5px; 57 | border: 1px solid #505050; 58 | background: #161616; 59 | border-radius: 5px; 60 | } 61 | 62 | #mouseSounds { 63 | padding: 8px 5px; 64 | border: 1px solid #505050; 65 | background: #161616; 66 | border-radius: 5px; 67 | } 68 | .mb-0 { 69 | margin-bottom: 0; 70 | } 71 | 72 | /* The slider itself */ 73 | .slider { 74 | -webkit-appearance: none; 75 | appearance: none; 76 | width: 100%; 77 | height: 5px; 78 | background: #6b6b6b; 79 | outline: none; 80 | opacity: 0.7; 81 | -webkit-transition: 0.2s; 82 | transition: opacity 0.2s; 83 | border-radius: 5px; 84 | margin-bottom: 12px; 85 | } 86 | 87 | /* Mouse-over effects */ 88 | .slider:hover { 89 | opacity: 1; 90 | /* Fully shown on mouse-over */ 91 | } 92 | 93 | /* The slider handle (use -webkit- (Chrome, Opera, Safari, Edge) and -moz- (Firefox) to override default look) */ 94 | .slider::-webkit-slider-thumb { 95 | -webkit-appearance: none; 96 | /* Override default look */ 97 | appearance: none; 98 | width: 20px; 99 | /* Set a specific slider handle width */ 100 | height: 20px; 101 | /* Slider handle height */ 102 | background: #ff5050; 103 | /* Green background */ 104 | cursor: pointer; 105 | /* Cursor on hover */ 106 | border-radius: 50%; 107 | } 108 | 109 | .slider::-moz-range-thumb { 110 | width: 20px; 111 | /* Set a specific slider handle width */ 112 | height: 20px; 113 | /* Slider handle height */ 114 | background: #ff5050; 115 | /* Green background */ 116 | cursor: pointer; 117 | /* Cursor on hover */ 118 | border-radius: 50%; 119 | } 120 | 121 | table tr td { 122 | border-bottom: 0; 123 | } 124 | 125 | table { 126 | margin-bottom: 0; 127 | } 128 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mechvibesplusplus", 3 | "productName": "MechvibesPlusPlus", 4 | "version": "v2.4.0", 5 | "description": "Play mechanical keyboard sounds as you type.", 6 | "repository": "https://github.com/PyroCalzone/MechVibesPlusPlus", 7 | "main": "src/main.js", 8 | "scripts": { 9 | "start": "electron .", 10 | "build:quick": "electron-builder -- --dir", 11 | "build:win": "electron-builder -w", 12 | "build:mac": "electron-builder -m", 13 | "build:linux": "electron-builder -l" 14 | }, 15 | "keywords": [], 16 | "homepage": "https://mechvibes.com", 17 | "author": { 18 | "name": "Pyro Calzone", 19 | "email": "pyrocalzoneemail+MechVibesPlusPlus@gmail.com" 20 | }, 21 | "license": "MIT", 22 | "iohook": { 23 | "targets": [ 24 | "node-64", 25 | "electron-73" 26 | ], 27 | "platforms": [ 28 | "win32", 29 | "darwin", 30 | "linux" 31 | ], 32 | "arches": [ 33 | "x64" 34 | ] 35 | }, 36 | "build": { 37 | "nsis": { 38 | "oneClick": false, 39 | "allowToChangeInstallationDirectory": true, 40 | "include": "build/installer.nsh" 41 | }, 42 | "win": { 43 | "target": [ 44 | { 45 | "target": "nsis", 46 | "arch": [ 47 | "x64" 48 | ] 49 | } 50 | ], 51 | "requestedExecutionLevel": "requireAdministrator", 52 | "icon": "src/assets/icon.png" 53 | }, 54 | "mac": { 55 | "target": [ 56 | { 57 | "target": "dmg", 58 | "arch": [ 59 | "x64" 60 | ] 61 | } 62 | ], 63 | "icon": "src/assets/icon.png" 64 | }, 65 | "linux": { 66 | "target": [ 67 | { 68 | "target": "deb", 69 | "arch": [ 70 | "x64" 71 | ] 72 | }, 73 | { 74 | "target": "snap", 75 | "arch": [ 76 | "x64" 77 | ] 78 | }, 79 | { 80 | "target": "AppImage", 81 | "arch": [ 82 | "x64" 83 | ] 84 | } 85 | ], 86 | "icon": "src/assets/icon.png" 87 | } 88 | }, 89 | "dependencies": { 90 | "discord.js": "^13.1.0", 91 | "dotenv": "^8.2.0", 92 | "electron-debug": "^3.2.0", 93 | "electron-is-dev": "^1.2.0", 94 | "electron-store": "^6.0.0", 95 | "express": "^4.17.1", 96 | "fs-extra": "^9.0.1", 97 | "glob": "^7.1.6", 98 | "howler": "^2.1.2", 99 | "iohook": "^0.6.2", 100 | "jquery": "^3.6.0", 101 | "node-fetch": "^2.6.1", 102 | "path": "^0.12.7" 103 | }, 104 | "devDependencies": { 105 | "app-builder-lib": "^22.2.0", 106 | "electron": "^6.1.5", 107 | "electron-builder": "^21.2.0", 108 | "electron-compile": "^6.4.4", 109 | "electron-packager": "^14.1.1" 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /src/libs/keycodes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const standard = { 3 | 1: 'Esc', 4 | 5 | 59: 'F1', 6 | 60: 'F2', 7 | 61: 'F3', 8 | 62: 'F4', 9 | 63: 'F5', 10 | 64: 'F6', 11 | 65: 'F7', 12 | 66: 'F8', 13 | 67: 'F9', 14 | 68: 'F10', 15 | 87: 'F11', 16 | 88: 'F12', 17 | 18 | 91: 'F13', 19 | 92: 'F14', 20 | 93: 'F15', 21 | 22 | 41: '`', 23 | 24 | 2: '1', 25 | 3: '2', 26 | 4: '3', 27 | 5: '4', 28 | 6: '5', 29 | 7: '6', 30 | 8: '7', 31 | 9: '8', 32 | 10: '9', 33 | 11: '0', 34 | 35 | 12: '-', 36 | 13: '=', 37 | 14: 'Backspace', 38 | 39 | 15: 'Tab', 40 | 58: 'CapsLock', 41 | 42 | 30: 'A', 43 | 48: 'B', 44 | 46: 'C', 45 | 32: 'D', 46 | 18: 'E', 47 | 33: 'F', 48 | 34: 'G', 49 | 35: 'H', 50 | 23: 'I', 51 | 36: 'J', 52 | 37: 'K', 53 | 38: 'L', 54 | 50: 'M', 55 | 49: 'N', 56 | 24: 'O', 57 | 25: 'P', 58 | 16: 'Q', 59 | 19: 'R', 60 | 31: 'S', 61 | 20: 'T', 62 | 22: 'U', 63 | 47: 'V', 64 | 17: 'W', 65 | 45: 'X', 66 | 21: 'Y', 67 | 44: 'Z', 68 | 69 | 26: '[', 70 | 27: ']', 71 | 43: '\\', 72 | 73 | 39: ';', 74 | 40: "'", 75 | 28: 'Enter', 76 | 77 | 51: ',', 78 | 52: '.', 79 | 53: '/', 80 | 81 | 57: 'Space', 82 | 83 | 3639: 'PrtSc', 84 | 70: 'ScrLk', 85 | 3653: 'Pause', 86 | 87 | 3666: 'Ins', 88 | 3667: 'Del', 89 | 3655: 'Home', 90 | 3663: 'End', 91 | 3657: 'PgUp', 92 | 3665: 'PgDn', 93 | 94 | 57416: '↑', 95 | 57419: '←', 96 | 57421: '→', 97 | 57424: '↓', 98 | 99 | 42: 'Shift', 100 | 54: 'Shift', 101 | 29: 'Ctrl', 102 | 3613: 'Ctrl', 103 | 56: 'Alt', 104 | 3640: 'Alt', 105 | 3675: 'Meta', 106 | 3676: 'Meta', 107 | 3677: 'Menu', 108 | 109 | // Numpad 110 | 69: 'Num\nLock', 111 | 3637: '/', // Numpad 112 | 55: '*', // Numpad 113 | 74: '-', // Numpad 114 | 3597: '=', // Numpad 115 | 78: '+', // Numpad 116 | 3612: 'Enter', // Numpad 117 | 83: '.', // Numpad 118 | 119 | 79: '1', // Numpad 120 | 80: '2', // Numpad 121 | 81: '3', // Numpad 122 | 75: '4', // Numpad 123 | 76: '5', // Numpad 124 | 77: '6', // Numpad 125 | 71: '7', // Numpad 126 | 72: '8', // Numpad 127 | 73: '9', // Numpad 128 | 82: '0', // Numpad 129 | }; 130 | 131 | const darwin = JSON.parse(JSON.stringify(standard)); 132 | Object.assign(darwin, { 133 | 28: 'Return', 134 | 56: 'Option', 135 | 69: 'Clear', 136 | 3640: 'Option', 137 | 3666: 'Fn', 138 | 3675: 'Command', 139 | 3676: 'Command', 140 | }); 141 | 142 | const win32 = JSON.parse(JSON.stringify(standard)); 143 | Object.assign(win32, { 144 | 3675: 'Win', 145 | 3676: 'Win', 146 | 61010: 'Ins', 147 | 61011: 'Del', 148 | 60999: 'Home', 149 | 61007: 'End', 150 | 61001: 'PgUp', 151 | 61009: 'PgDn', 152 | 61000: '↑', 153 | 61003: '←', 154 | 61005: '→', 155 | 61008: '↓', 156 | }); 157 | 158 | const linux = JSON.parse(JSON.stringify(standard)); 159 | 160 | module.exports = { darwin, win32, linux }; 161 | -------------------------------------------------------------------------------- /src/sounds/keys/nk-cream/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "custom-sound-pack-1599402588730", 3 | "name": "NK Cream", 4 | "key_define_type": "multi", 5 | "includes_numpad": false, 6 | "sound": "sound.ogg", 7 | "defines": { 8 | "1": "q.wav", 9 | "2": "w.wav", 10 | "3": "e.wav", 11 | "4": "e.wav", 12 | "5": "r.wav", 13 | "6": "t.wav", 14 | "7": "y.wav", 15 | "8": "u.wav", 16 | "9": "i.wav", 17 | "10": "o.wav", 18 | "11": "p.wav", 19 | "12": "[.wav", 20 | "13": "].wav", 21 | "14": "backspace.wav", 22 | "15": "tab.wav", 23 | "16": "q.wav", 24 | "17": "w.wav", 25 | "18": "e.wav", 26 | "19": "r.wav", 27 | "20": "t.wav", 28 | "21": "y.wav", 29 | "22": "u.wav", 30 | "23": "i.wav", 31 | "24": "o.wav", 32 | "25": "p.wav", 33 | "26": "[.wav", 34 | "27": "].wav", 35 | "28": "enter.wav", 36 | "29": "tab.wav", 37 | "30": "a-down.wav", 38 | "31": "s.wav", 39 | "32": "d.wav", 40 | "33": "f.wav", 41 | "34": "g.wav", 42 | "35": "h.wav", 43 | "36": "j.wav", 44 | "37": "k.wav", 45 | "38": "l.wav", 46 | "39": "[.wav", 47 | "40": "].wav", 48 | "41": "q.wav", 49 | "42": "shift.wav", 50 | "43": "backspace.wav", 51 | "44": "z.wav", 52 | "45": "x.wav", 53 | "46": "c.wav", 54 | "47": "v.wav", 55 | "48": "b.wav", 56 | "49": "n.wav", 57 | "50": "m.wav", 58 | "51": "l.wav", 59 | "52": "[.wav", 60 | "53": "].wav", 61 | "54": "shift.wav", 62 | "55": "o.wav", 63 | "56": "e.wav", 64 | "57": "space.wav", 65 | "58": "caps lock.wav", 66 | "59": "w.wav", 67 | "60": "e.wav", 68 | "61": "e.wav", 69 | "62": "r.wav", 70 | "63": "t.wav", 71 | "64": "y.wav", 72 | "65": "u.wav", 73 | "66": "i.wav", 74 | "67": "o.wav", 75 | "68": "p.wav", 76 | "69": "u.wav", 77 | "70": "i.wav", 78 | "71": "y.wav", 79 | "72": "u.wav", 80 | "73": "i.wav", 81 | "74": "p.wav", 82 | "75": "h.wav", 83 | "76": "j.wav", 84 | "77": "k.wav", 85 | "78": "enter.wav", 86 | "79": "b.wav", 87 | "80": "n.wav", 88 | "81": "m.wav", 89 | "82": "shift.wav", 90 | "83": "[.wav", 91 | "87": "].wav", 92 | "88": "].wav", 93 | "91": null, 94 | "92": null, 95 | "93": null, 96 | "3597": null, 97 | "3612": "shift.wav", 98 | "3613": "backspace.wav", 99 | "3637": "i.wav", 100 | "3639": "u.wav", 101 | "3640": "p.wav", 102 | "3653": "o.wav", 103 | "3655": "h.wav", 104 | "3657": "k.wav", 105 | "3663": "n.wav", 106 | "3665": "m.wav", 107 | "3666": "h.wav", 108 | "3667": "b.wav", 109 | "3675": "q.wav", 110 | "3676": "[.wav", 111 | "3677": "].wav", 112 | "57416": "g.wav", 113 | "57419": "c.wav", 114 | "57421": "b.wav", 115 | "57424": "v.wav", 116 | "60999": "h.wav", 117 | "61000": "g.wav", 118 | "61001": "k.wav", 119 | "61003": "c.wav", 120 | "61005": "b.wav", 121 | "61007": "n.wav", 122 | "61008": "v.wav", 123 | "61009": "m.wav", 124 | "61010": "h.wav", 125 | "61011": "b.wav", 126 | "001": "a-up.wav" 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /src/editor.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 || 22 | 23 | | 24 ||
|
27 |
28 |
29 |
30 | Join our Discord.
31 |
32 |
33 | |
34 | |
| Keyboard Volume | 37 |38 | 39 | | 40 |
| Mouse Volume | 43 |44 | 45 | | 46 |
Made with ❤ by Pyro & Saturn
52 |53 | Support Original Mechvibes 54 | | 55 | Our GitHub 56 | | 57 | Buy me a coffee 58 |
59 |-
60 |