scripted layered mapping system
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mixxx |
Fix Released
|
Undecided
|
Be |
Bug Description
Most controllers are designed such that one physical control should be mapped to multiple aspects of software depending on the state of the controller. What aspect of software a physical control is presently manipulating is typically changed by pressing buttons or button combinations on the controller. Pressing these buttons typically changes the mapping of groups of physical controls together.
To facilitate a declarative, easy to learn, and elegant way of creating complex mappings for such controllers, implement a layered mapping system. This could be done with a JavaScript library. This system should be designed with the eventual goal of designing an easy-to-use GUI to autogenerate code that could easily be edited manually. Examples use cases include the 4x2 pad grids found on most all-in-one controllers with a thin row of buttons selecting the active mode of the pads, various controls with deck toggle buttons, encoders surrounded by LED rings (MIDI Fighter Twister, Electrix Tweaker, or Akai APC 40 Mk2), and a wide variety of controls that change while a shift button is held.
This layered mapping system would have signals (MIDI, HID, and in the future OSC) from groups of physical controls handled by a layer container object. Within the layer container object, various potentially active layers would be defined. Each layer would specify how to handle inputs and outputs for the set of signals handled by the layer container object. Scripts would specify when to activate a different layer. Layers could have optional initialization and shutdown functions that could, for example, send signals to encoders to toggle between absolute and relative modes. The container object would keep track of the previously active layer, so scripts could simply deactivate layers without having to determine the appropriate layer to reactivate.
Changed in mixxx: | |
assignee: | nobody → Be (be.ing) |
summary: |
- scriptable layered mapping system + scripted layered mapping system |
description: | updated |
Changed in mixxx: | |
status: | New → In Progress |
Changed in mixxx: | |
milestone: | none → 2.1.0 |
Changed in mixxx: | |
status: | Fix Committed → Fix Released |
https:/ /github. com/mixxxdj/ mixxx/pull/ 1054