Greetings!
It's been just over a week since the official public launch of Keysight, and high time the first of many updates goes live! Version 1.1.0 brings some fundamental features to both users who stream using Keysight, and users who create pre-recorded video content. Here's a breakdown of the new stuff!
Midi channel preset mapping
Under the Midi Hotkeys tab, you can now assign specific midi channels to specific preset slots. Using this, it is possible to visualize different instruments downmixed onto a single midi device that use different midi channels in a live context. More likely, however, is the use-case to visualize the left and right hand individually by playing back an edited midi file where the hands are broadcast on different midi channels.
Websockets
This is a big'un. Keysight now uses a SocketIO plugin for inbound and outbound web connectivity, allowing external triggering of any actions previously triggerable by midi-hotkey. On the inbound side of things, you can now bind an address and port to connect to, and then specify messages to listen for and execute commands. The use-case here is, of course, chat controlled Keysight on your streams! You can also specify a time to wait before executing any other websocket commands (which are sent to a queue), ensuring a user switching to a certain preset has a minimum time that Keysight stays in that preset.
For outbound messages, Keysight can now broadcast colour and note activity data to wherever you like using a standard JSON format. Using this, you could do all manner of crazy things like IRL LED strips controlled by Keysight activity (which is itself controlled remotely!). When sending basic data, the colour slots from impact lights are blended through over time in a slow cycling manner and sent as a hex code, along with the total amount of note activity. Advanced data sends the hex code of all 88 impact light colours along with a 0-1 note activity value.
See documentation for the specifics!
Global core settings toggle
A flag can now be set per-preset to use "global" core settings (height, speed, camera angle, key length, real-time mode). This alternate set of core data is stored in the System Prefs, and it enables a set-once workflow for your camera angle and scene set-up (rather than having to exhaustively, manually copy those variables across all 5 slots). This also allows cleaner sharing of presets between users with different scene set-ups!
Full changelog notes
--- Changes from 1.0.3a (first Steam release) to 1.1.0 ---
Fixed issue where cycling colour mode would always start at slot 1, not from ratcheted slot
Fixed issue where stats menu "begun tracking at" could display silly things like 16:5 as a time value
Fixed issue where closing main menu using the "close menu" button would not hide the cursor
Fixed issue with ramping values less than 1.00 appearing to make rings not alpha-fade correctly
Fixed issue where clearing a bound hotkey and immediately re-recording, and then mashing more than 8 notes to error-out the recording, would stop any hotkeys from being clear-able
Fixed issue with FMU failing to randomize note material
Fixed some minor misalignment issues with material picker / colour picker subheadings
Removed window resize ability on Keysight. For custom resolutions, dial it in manually under System
Changed Graphics menu resolution text fields to wipe themselves upon applying resolution
Changed colour colour picker slot names to use note names when relevant (series + 12 cycle number)
Changed code nativization settings. May see a ~0-5% performance hit depending on hardware and object pooling settings, but this allows greater flexibility in features moving forwards
Changed hotkey functionality to be scalable, apply to more actions, support multiple hotkeys for the same action, etc
Changed randomizer to pick a value between 13-39 for texture sizes when randomizing materials
Changed graphics option camera location/rotation to be text entry fields. No more endless buttons for no reason!
*Changed a ton of back-end stuff relating to note-on/off events and clearing of notes between realtime/non-realtime presets. Potential for strange behaviour, be on the lookout and report it if you see any!*
Added toggles to delay preset/randomization midi hotkey events by top-down time delay amount while in top-down mode
Added minimum note activation slider under Core while in advanced mode. Note-on events with lower than given velocity will not cause anything to happen
Added "open menu" button to preset bar if preset bar is set to "show" and menu is not open (for keyboard-less operation while preset bar is shown)
Added websocket connectivity for incoming commands (like switching presets and randomization), and outbound lighting data. See documentation
Added midi channel preset swapping under Midi Hotkeys. Incoming midi events can now be swapped to different presets based on channel data. Occurs "before" pedal switching
Added transposition functionality (to counter-transpose against instrument transposition). LIMITATION TO HOTKEYS: hotkeys will not function if transposition attempts to shift them outside the 21-108 midi control ID range
Added overdrive support to colour shift speed
Added randomizer toggle to bypass piano material randomization but keep backdrop randomizing
Added "use global settings" toggle. Uses set of speed/height/key length/time delay lock/camera settings saved in System Prefs instead of preset settings. Allows easier sharing and config of non-standard core setting presets
Save file update procedure for 1.0.3a to 1.1.0
- Global core settings (eg height, speed, camera position) will be taken from Preset 1 and saved in System Prefs
- Use global core settings set to true for all presets
- Taken existing midi hotkeys and created identical hotkeys within new modular hotkey system
