MIDI 2.0
Phylo is not a MIDI 1.0 app with a compatibility layer. It is a MIDI 2.0 device, and its controls were designed at that resolution.
Every control in Phylo stores a 32-bit value, the native resolution of MIDI 2.0, and a control's display range, unit, curve and step are data that travel with it. A cutoff is a frequency in hertz on a logarithmic curve, an octave is a stepped whole number, a waveform is a list of names. MIDI 1.0's 128 steps were never the ceiling, so a hardware knob and a knob on the panel are the same knob.
Controllers map themselves
Each device carries controller layouts: named pages of its controls, authored on the device editor's third tab. When Phylo runs it publishes itself as a MIDI 2.0 endpoint and serves those layouts over Property Exchange, the part of MIDI-CI that lets a controller ask a device what it has. An off-the-shelf MIDI 2.0 controller receives the standard control list and maps its encoders. A Phylo controller receives the page structure as well, with everything it needs to show a control the way the app does: the value in real units, the option names of a menu, whether a knob is stepped, and whether it is centred. There is no learn step and nothing to configure by hand.


Incoming control changes and notes go straight from the MIDI thread to the audio engine, without a trip through the interface, so playing an instrument from a keyboard is as immediate as the engine's buffer. Note velocity arrives at 16 bits and is a modulation source you can patch to anything inside the instrument.
The virtual controller rack
To develop against real hardware before the hardware exists, Phylo has a virtual controller rack: a separate macOS app that publishes its own MIDI 2.0 endpoint, discovers Phylo through MIDI-CI exactly as a physical controller would, fetches the layout, and renders it as a control surface. It shows values in their real units, stepped controls turn with detents, centred controls draw their ring outward from the middle, and turning a knob moves the control in Phylo, while a move in Phylo moves the knob. Everything it shows is driven by the data a real controller receives, nothing more, so it is a faithful stand-in for the hardware to come.

