This page covers:

  • MIDI inputs
  • Supported MIDI events
  • Channels vs. Tracks

Info

If you do not see your MIDI device in the MIDI device selection dropdown box, see this guide for information about using one hardware MIDI device in two programs at once.

MIDI inputs

Live input device

MIDI, Live input MIDI device section

The dropdown box found in the MIDI menu displays all connected MIDI devices that are capable of being received from.

MIDI device selection

Note

Keysight was originally built exclusively for streaming. MIDI file playback was added in an update, and then render-to-video added significantly later.

File playback

MIDI, MIDI file section

Keysight only accepts one MIDI file at a time. A new MIDI file can be loaded by clicking the Load MIDI file button and selecting a file. While Auto-load is enabled, Keysight will automatically load the last MIDI file selected upon startup (as long as System settings have been saved after loading this file).

MIDI file

Warning

For a MIDI file to be valid for use in Keysight, it must have at least two note-on events occuring on different ticks. A MIDI file of a single note is not supported, as it breaks some MIDI time calculation things.

Info

MIDI file reading is handled by an external tool called json_midi➚ created by HeapUnderflow➚ specifically for Keysight, which converts a MIDI file into a JSON data structure with accurate timing that Keysight can then read and load into a struct. json_midi➚ is open source, and follows the official MIDI specification to the letter.

json_midi➚ can take some time to process MIDI files due to file access at multiple stages in the pipeline. Keysight has no way of knowing if json_midi has failed or is simply taking a long time when processing files, and so there is a timeout threshold of 20.0s set under System > Interface that can be adjusted if you have large MIDI files on a slow computer and the MIDI file loading is timing out.

Simulated inputs

Keysight also has some debug functionality for simulating MIDI events. This can be useful when testing presets at different velocities without needing to play anything on a live MIDI device. The note test inputs are as follows:

  • A/D to move the note test cursor left/right. Hold Shift to move an octave at a time
  • W/S to increase/decrease the MIDI velocity. Hold Shift to change 10 velocity per input
  • Hold Q to spawn a test note, or click and hold the blank area to the right of the menu
  • Shift + Q toggles turbo note testing mode
  • Ctrl + mousewheel to pitch bend (requires activation under Core > Simulation)
  • Ctrl + middle mouse button to reset pitch bending

Supported MIDI events

Keysight does not support every feature of MIDI, as a lot of MIDI functionality is niche and not used by "normal" piano simulation. Dropped MIDI events can be found in the Log tab. Supported events are:

  • Note on/off
    • ID
    • Velocity
    • Channel
  • Control change
    • ID (only 64/66/67)
    • Velocity
    • Channel
  • Pitch bend
    • Velocity
    • Channel

Channels vs. Tracks

Keysight only has an understanding of MIDI channels, and completely ignores tracks. This is due to me not understanding (at the time of building all the architecture for MIDI events) that some MIDI files use track information for different instruments, rather than channels. Tracks are useable by Keysight at the cost of losing channel data by toggling this option under System > Interface:

Track as channel