Guides
-
Is the IAC Driver MIDI 2.0? What happens to MIDI sent between apps on a Mac
On a Mac, IAC Driver buses report the MIDI 2.0 protocol. When a MIDI 1.0 app sends through IAC, Core MIDI converts the messages to MIDI 2.0 for receivers that read MIDI 2.0 and back to MIDI 1.0 for those that do not. How we noticed, what the conversions look like, the details that change along the way, and what is still unverified.
Updated
-
Why do MIDI settings reset after a restart on macOS 27?
On macOS 27, if you have created a configuration in Audio MIDI Setup and a connected USB MIDI device reports a port name containing a NUL character, the configuration file cannot be saved, and IAC buses and other changes disappear when MIDIServer restarts. How we tracked it down, how to check, and what to do.
Updated
-
Why doesn't MIDI-CI work between two USB devices connected through a Mac?
When two MIDI-CI devices are connected to a Mac by USB and routed to each other inside the Mac, Property Exchange can fail or break after a power cycle. macOS itself takes part in MIDI-CI and relays some messages, so devices can receive the same message twice. How we noticed, what we observed, and connecting the devices directly with DIN cables as the workaround.
Updated
-
Why does MIDI suddenly stop working in a Mac music app?
On a Mac, all MIDI goes through a background process called MIDIServer. If it quits or crashes, apps that were already running stop receiving MIDI, and what they send no longer reaches your devices, with no error. Restarting the app fixes it. How we noticed, how to tell this happened, and why many apps do not recover by themselves.
Updated
-
Why does an NRPN arrive with the wrong value first in a Mac app that reads MIDI 2.0?
When a MIDI 1.0 NRPN (CC 99, 98, 6, 38) reaches a Mac app that receives MIDI 2.0, Core MIDI converts it as soon as CC 6 arrives, before the low part of the value. The app sees an incomplete value first, then the correct one. How we noticed, why it happens, what it affects, and how to avoid it.
Updated
-
How do you send Roland SysEx (RQ1 / DT1), and how is the checksum calculated?
Roland synths read and write parameters with two SysEx messages: RQ1 requests data from an address, and DT1 sends data to an address. The message layout, the checksum with worked examples, 7-bit address arithmetic, and what we found on a JUNO-D.
Updated
Development notes
-
Letting AI work with a MIDI app without leaving the Mac: MCP, localhost and a token
MIDIFabric lets Codex or Claude Code write MIDI effects for it through MCP. Why we chose MCP over calling AI tools directly, how the connection stays inside the Mac, what the AI can and cannot read, and what the access token does and does not protect.
Updated
-
How CC 102 became “OP1 Level”: device definitions in the MIDI monitor
A MIDI monitor that shows “CC 102 = 100” leaves you to look up what CC 102 does on your synth. MIDIFabric's device definitions name it “OP1 Level” for the Korg opsix, and turn an NRPN made of four messages into one line such as “VCA Env Release = 8”. How a definition is written, how the monitor uses it, and what is checked.
Updated
-
Sending and reading JUNO-D SysEx by name: the address map
Roland parameters live at 4-byte addresses that are hard to type and harder to read. We added address maps to MIDIFabric's device definitions, so the JUNO-D's RQ1 and DT1 messages can be typed and displayed by name. How the map is written, how names are expanded, and how a received address is matched.
Updated