I'm now working on a function to play standard MIDI files, sending out all the MIDI commands in a file in real time. This wouldn't actively sync with an audio recording, but you could start the SMF file at the same time as you start the recording and let them play together. This wouldn't be as robust as something like Ableton, but it might be good enough.
At this point I'm trying to decide how exactly to add this to the app interface. Would you always play the MIDI file in conjunction with an audio file? In that case, I could hook it into the existing recording functionality, and then pausing or scrubbing the recording would pause or scrub the MIDI, too. But if you'd ever want to run an SMF file without corresponding audio, that would be an awkward setup.
Also, would you ever want to generate sound AND trigger lighting/effects/etc commands from a MIDI file, or would you always use real audio and only use the MIDI file for triggering commands?