Sending MIDI to an Audio channel

Joseph Hyde's icon

I'm really pulling my hair out here - very grateful for any help! I think it's a (somewhat crazy) limitation in Max4Live, but just in case I'm missing something..

Basically I'm trying to use a Max for Live plugin to control a parameter on a vst plugin on another plugin. The only way I can think to do that is to use a midi controller message, but I can't find any way to send MIDI into an audio channel - in the io view, only midi channels appear as possible outlets.

I don't really understand how you select devices with midiout in Max4Live - I wondered if I could use an IAC bus or something and route it back in that way. But it's not immediately evident that would be done.

The other option might be to use API messages, but I'm not sure vst plugins can be controlled using these, and if so I certainly don't know how. Any ideas anyone?

Any help super gratefully received..

woyteg's icon

I can remember I stumbled upon this also some time ago.
I'm not a m4l expert, but I think the most flexible and straight forward way would really be to go out IAC and back in.
(which is a shame if that's true, of course)

broc's icon

In Live you can automate the parameters of VST plugins and thus also control them with API messages.
For details see Live manual, chapter 'Using Plug-Ins'.

Joseph Hyde's icon

@woyteg - yes, that would seem the easiest (if annoyingly convoluted) way to make it work, but I've not got it to do so yet.

@broc - I kind of assumed plugins couldn't be controlled through the API, and I can't find any documentation of how to do so, although again I might be missing something.

I assume I need a live.remote object with a live.path object connected to the right inlet.

The live.path object would read something like:

live.path live_set tracks 2 mixer_device? ??????

I run out there - I don't know if it would be a mixer_device or not, and how one would know how to identify the automated parameter.

Any further pointers?

Wetterberg's icon

IIRC I used to send data out to an empty midi track in Live, and then from that track into the vst.

broc's icon

I think the OP wants sending midi to an audio track which is not possible with standard routing.

Re API: for accessing device parameters you could look into factory devices (Max Audio Effect > Tools > API) to see how it's done and copy the relevant code.

Joseph Hyde's icon

@broc - yes, that's exactly right. I would've thought the out/in via IAC would work, but it didn't seem to.

I did exactly what you suggested - I could only find out codes for standard Live elements (volume, panning etc.). When you use the Live.path object these always resolve down to a single ID number. So I just sort of got the feel for those, then for my vst plugin I just had to guess and do a bunch of trial and error. Got there in the end!

If anyone has a more efficient way of doing this, I'd love to know for next time..

Evan's icon

If I understand correctly - - you wish to control VST parameters via a m4l device on another channel.

Here is my solution (not at home to test, but I am 99% sure this will work like a charm)-

-Macro the relevant parameters in the VST in an instrument/effect rack.
-Steal the code from the included LFO (or any other device that includes the API navigation scheme), use that to find the id of the macro tied to the vst parameter.
-use that id to tie a live.remote~ to the intended parameter.
-Send your midi values into previously discussed live.remote~ (with proper scaling, and control -> audio conversion).
-Rejoice.

Joseph Hyde's icon

@evan - yes, that's pretty much what I did (although I didn't think of stealing the code from the LFO device - I'll do that next time!). Once you find the ID it does seem to be 'stable' - I was worried it might change as changes are made to the session, but that doesn't seem to have happened. Yet!

Evan's icon

It's my understanding that once an object in live has an id, it doesn't change (Could be wrong about tracks, if you start deleting them etc.). But as far as parameters go, they should stay put. A while back they also made them persistent, so when you load the session again all objects retain their ids. You might want to implement a failsafe though with some integer storage or something similar.

Best of luck!

-E

Joseph Hyde's icon

@evan - yes, I can confirm that they do seem to be consistent. Luckily! THanks for your help on this..

12root2's icon

Here's a device doing just that. It allows you to send and receive midi data from everywhere to anywhere. http://www.maxforlive.com/library/device/1993/midi-transmitter
hope it helps
Ronen

Joseph Hyde's icon

Thanks Ronen, I've haven't had a chance to try it yet, but that device looks like just the ticket, very useful. I'm pretty sure Max for Live ought to have this functionality built in, but it's nice that you've come up with a nice easily-usable workaround!