The Delights of Interapplication MIDI

    There’s just something absolutely “right” about programming MIDI in Max. That shouldn’t be a big surprise, since Max was originally MIDI only (and wow, that was a while ago). Still, Max carries most of its early legacy completely intact (what went missing? Points for old timers if you can tell us in the comments….)
    Programming MIDI apps in Max is a rare joy. You have so much control, and it’s where all of the awesomeness of the Max event model really shines. These days, not many people think to program just in MIDI - but it’s a powerful and CPU-light way of managing an enormous potential creative workspace.
    Just about every application out there has MIDI remote control built in in some form or other (if it doesn’t, maybe it has OSC, so you can use Max to do a controlled conversion). The beauty of MIDI is its simplicity and age; it’s an extremely lightweight format, and nearly everybody uses it.
    Programming MIDI in Max means you can go beyond the traditional uses of MIDI as an instrument controller, you can bend the raw bytes of MIDI to whatever purpose you can think of. These days there are all sorts of ways you can transmit MIDI, over networks, wirelessly via Bluetooth, you name it.
    There are times when merely getting applications to talk to each other at all is a challenge, but MIDI makes that easy.
    Let’s round up the ways you can send MIDI between applications on Windows and Mac.


    Windows does not have inter-application MIDI built into the operating system. Max users have relied on applications such as MIDIYoke for many years for MIDI driver simulation.
    The most up to date MIDI routing on Windows these days is the nerds project - they have a free version, a paid version, a network version, and an audio patchbay (à la Soundflower). They support Windows 10, as well.
    Find the nerds project here:


    You can actually create virtual MIDI ports in Max on the fly on a Macintosh, using the creatinport and createoutport messages to the Max application. To create a virtual MIDI port called “myvirtualport”, put the following two messages in message boxes, lock your patch, and click on them:
    ; #SM createinport myvirtualport CoreMIDI
    ; #SM createoutport myvirtualport CoreMIDI
    That’s it. The MIDI ports you create this way will remain active for as long as you have the Max application open.
    Working with Logic presents some challenges: Logic will rewire your entire environment whenever the MIDI ports change. My preferred way of creating virtual ports on a Mac is to add IAC MIDI ports - that way, they are always active and will not freak everything out when you restart Max. To get this going, launch the Audio MIDI Setup (it’s located in the Applications/Utilities folder on your Mac), select the MIDI window and double-click the IAC driver to display its Properties Window. From this window, you can enable the driver and add your own named virtual drivers.
    You’re all set now, with unlimited MIDI routing options for old school Max mayhem!

    by Andrew Pask on
    Sep 29, 2015 4:22 PM

    • pdelges
      Sep 30 2015 | 9:51 am
      Now that you speak about, where are the lib objects, and msd? But I'm so happy vdp is still there, although I wonder who still uses a videodisk…
    • James Elliott's icon
      James Elliott's icon
      James Elliott
      Sep 30 2015 | 8:56 pm
      Another thing worth pointing out: You mentioned that you can transmit MIDI over networks. That has become much easier lately thanks to Apple building network MIDI capabilities in recent releases of Mac OS X and iOS devices; you can configure it easily and it just works. There is also a free and compatible implementation for Windows called rtpMIDI, which I found extremely helpful when I wanted to add network control of laser shows from my afterglow and afterglow-max projects.
    • jonah's icon
      jonah's icon
      Oct 01 2015 | 11:20 pm
      the main problem i have with inter app midi (and logic especially) is feedback loops have a tendency to cause kernel panic. i'm thinking try using max to do something like rme does to prevent feedback, wish me luck. :)
      "To prevent the computer from freezing, TotalMix sends a special MIDI note every 0.5 seconds to its MIDI output. As soon as it detects this special note at the input, the MIDI functionality is disabled. After fixing the loopback, check Enable MIDI Control under Options to reactivate the TotalMix MIDI."