Network MIDI · macOS

Network MIDI that puts itself back together.

BetterRTP™ replaces the Network MIDI panel on show computers. Sessions reconnect to their most recent situation by themselves, one session fans MIDI out to every peer, and a receiver takes a PRIMARY and a BACKUP sender with failover in about a second.

macOS 14+ · Apple silicon & Intel

Available now · macOSTalks to stock Network MIDI · rtpMIDI · iOS

Why it exists

The Network MIDI panel in Audio MIDI Setup has two habits that end shows: it forgets a peer the moment it drops, and it never invites anyone back. Somebody has to walk to the machine and click. BetterRTP™ exists so nobody has to.

How it works

Two Macs to a green link in a minute

  1. Launch on both Macs

    Allow Local Network access when macOS asks. Each Mac seeds a session named after itself on ports 5004/5005, advertised on Bonjour, and its MIDI port appears in the DAW.

  2. Add the other Mac

    On the receiver, the Directory lists the sender's session. Click Add, keep Initiator, save. The link goes green within a second.

  3. Wire the DAWs

    The sender's DAW plays to the port named like its session; the receiver's software listens to its own. No DAW on the receiver? Deliver straight to a hardware destination.

  4. Rehearse the reboot

    Restart the sender. The receiver marks the link Lost, keeps inviting, and reconnects on its own the moment the session re-announces itself. No clicks.

Reconnection is the app's job. Watching the show is yours.

What it does

Everything network MIDI owes a show computer

One job: keep MIDI moving between the machines, whatever any one of them decides to do tonight.

Reconnects to its most recent situation

Every session, peer, role, and priority is written to disk before it is acted on, so a relaunch or a reboot restores exactly what was running. Unattended.

Invitations that never give up

An initiator re-invites with backoff, forever: through the other Mac's reboot, a DHCP change, a pulled cable. A Bonjour re-announcement collapses the backoff and invites at once.

One session, many peers

A session fans every MIDI message from the local DAW out to every connected participant. One playback Mac feeds the console, the lights, and the synth rig at once.

PRIMARY and BACKUP senders

A Failover session receives from two senders and forwards exactly one, switching on link loss or silence. The Backup's stream is dropped on the floor until it is needed.

A heartbeat on the wire

Every session sends MIDI Active Sensing each 0.25 s whenever nothing else went out, and strips it before the DAW. That is what lets a 1.0 s silence timeout tell a dead sender from a DAW between cues.

Every switch releases the stage

Sustain up, All Notes Off, Reset All Controllers, pitch-bend centre, on all 16 channels, before the first message from the new source. No chord rings through a failover.

Return to Primary is your call

After a failover the receiver stays on the Backup and shows it in amber everywhere. The operator who watched the Primary die decides when to trust it again, or arms auto-return with a 5 s holdoff.

Status LEDs that tell the truth

Green means a link is connected and the session is forwarding, never just that sockets are bound. Amber means coping. Red is a fault that names its cause and how to fix it.

Talks to everything on the LAN

Standard AppleMIDI on the wire: stock macOS Network MIDI, rtpMIDI on Windows, and iOS apps all see it in their directory, and either side can invite.

A menu-bar app that stays up

Close the window and everything keeps running from the menu bar. ⌘Q asks for confirmation while peers are connected, and Launch at Login survives an unattended reboot.

A log worth reading

Every invitation, drop, and failover, with timestamps, tailed live in the Diagnostics pane. It rolls at 5 MB, so a rig that runs all season costs at most 10 MB of log.

Config that cannot be lost

Pretty JSON, written atomically on every change, with the previous version kept as a backup and used automatically if the main file is ever corrupt.

Failover

Two playback Macs. One stream. A switch you can time.

The receiver holds a link to a Main and a Backup playback Mac, both running the same show. It forwards the Primary and drops the Backup on the floor, until the Primary's heartbeat stops. Then it switches, releases the stage, explains itself in one sentence, and leaves Return to Primary to you.

  • A clean quit switches within 0.1 s; a pulled cable, 1.0 to 1.1 s after the heartbeat stops.
  • Every switch delivers the release burst first, so no chord rings on the console while you find out why.
  • The reason and its age stay on screen: switched 16 s ago · primary Main Playback silent for 1.1 s → backup Backup Playback.

Why BetterRTP™

Built for the machine nobody is watching

Specifications

The details that matter on a show day

A native, signed, notarized macOS app. Standard AppleMIDI on the wire, so it drops into the rig you already have. Sparkle keeps it current, and no update check ever runs while a peer is connected.

BetterRTP™ · full specification
Platform
macOS 14+ · Apple silicon & Intel
Protocol
AppleMIDI · RTP-MIDI (RFC 6295) · IPv4
Discovery
Bonjour · host/IP fallback
Ports
Control + data pair per session · 5004/5005 default
Fan-out
One session → every connected peer
Failover
PRIMARY/BACKUP · 1.0 s silence watchdog
On switch
All Notes Off burst · all 16 channels
Interop
Stock Network MIDI · rtpMIDI · iOS
Updates
Signed · notarized · Sparkle, never mid-show

BetterRTP™: frequently asked questions

Does it replace the Network MIDI panel in Audio MIDI Setup?

Yes. The stock panel forgets a peer the moment it drops and never invites anyone back; BetterRTP™ remembers every peer and reconnects by itself. Note that the stock Network MIDI session holds ports 5004/5005 on the same Mac when enabled: turn it off, or run the BetterRTP™ session on other ports. A port fault retries by itself every 5 s for up to 5 minutes, so freeing the port is usually enough.

How fast is the failover?

A clean quit on the Primary (it sends BY) switches within 0.1 s. A pulled cable or frozen Mac switches 1.0 to 1.1 s after its heartbeat stops. Either way the receiver sends the release burst before the first message from the new source, posts a notification, and keeps the reason on screen in one sentence.

What if the sender is not BetterRTP™?

The silence watchdog only judges a sender it has heard heartbeat on the link. A stock Mac or rtpMIDI sender sends no Active Sensing, so it is judged by link loss alone (30 s), its card shows a No heartbeat chip, and an event names it. That way a one-second rest in its cue list is never read as a dead sender.

Does it return to the Primary by itself?

Not unless you tell it to. By default the receiver stays on the Backup after the Primary comes back, shows it in amber everywhere, and enables Return to Primary; the operator who just watched the Primary die decides when it is trusted again. Turn on Auto-return and it returns after the Primary has been healthy for the 5 s holdoff; a flickering Primary restarts the clock.

What does it talk to?

Anything that speaks AppleMIDI: stock macOS Network MIDI in Audio MIDI Setup, rtpMIDI on Windows, and iOS apps built on MIDINetworkSession. Each side sees the other in its directory, and either can invite. A stock Mac never re-invites after a drop, so make the BetterRTP™ side the initiator of any link to one.

What happens on a reboot?

Everything comes back. Sessions, peers, roles, and priorities are written to disk before they are acted on, so a relaunch restores exactly what was running: peers this Mac invites are re-invited with backoff until they answer, and peers that invite this Mac are accepted unattended. Turn on Launch at Login and the Mac can reboot with no one in the room.

Get BetterRTP™

Put it on both Macs tonight.

Sessions that reconnect themselves, one-to-many fan-out, and PRIMARY/BACKUP failover with All Notes Off on the switch, in a menu-bar macOS app that talks to the network MIDI you already run.

macOS 14+ · Apple silicon & Intel

Already have a key?Manage your license →