Sending MIDI data from one Ableton Live track to an otherone - using Live API

Jan M's icon

I am preparing a project where it would be necessary that an audio signal (from a mic) triggers MIDI events.

The possibility I found is to build two devices: On located in a audio track, the other one located in a MIDI-track.
So i can receive the audio- signal, analyze it and send the MIDI-data as a Max message to the second device.

Though somehow i find this solution not really slick. Is it possible to send the MIDI data via the Live API directly from the audio track to the input of the MIDI track?

Or does anyone has a better idea?

broc's icon

The input of a MIDI track can only be received via Live's standard routing, i.e. from external device or another MIDI track. Live API can't send data directly to the input.

So using the Max objects send/receive is a common solution of your problem. Unfortunately not perfect since it introduces some unpredictable latency.

Jan M's icon

Thank you for your advise. So in order to avoid unpredictable latency it probably seems to be better to build an external max-patch to capture the audio and send the midi-data from there...

broc's icon

Yes, sending midi from an external patch would ensure predictable latency.

Note however that Live by design introduces latency on incoming midi (to reduce jitter) proportional to the audio buffer size. So I'd suggest to try alternative solutions in practice.

trevox's icon

A guy called Hans Hubner created a midi listener (a java max external) which works independently of Live. It allows you to send/receive midi to virtual midi ports whether the messages are sent from Live or any other app. Not sure if you use a Mac or PC, but this works really well with OSX's IAC midi ports. I have tried on Windows and couldn't get it to work quite as well using Midi yoke. The external is called jmidi - you should be able to find it easy enough.

Incidentally, the reason I need this is quite similar to yours!

orange_glass's icon

Also if you're on OSX try lh_midiout I've been using this. Seems to do the job.