Max For Live, MIDI CCs and NRPNs

Share your favorite Ableton Live tips, tricks, and techniques.
Post Reply
macmurphy
Posts: 1431
Joined: Mon Aug 16, 2004 7:21 am
Location: Emneth,Norfolk, UK

Max For Live, MIDI CCs and NRPNs

Post by macmurphy » Mon Dec 21, 2009 4:51 pm

In Max For Live is it possible to convert MIDI CCs to NRPNs?
I've been messing around in MIDI Ox doing this to send NRPNs to my Mopho, but if Max can do it inside Live then it would obviously be a much more convenient method.
Also the idea of constructing my own editor for the Mopho in Max certainly appeals.
Is any of this possible?

Neil.

wehkah
Posts: 504
Joined: Sun Jan 06, 2008 4:19 pm
Location: Germany
Contact:

Re: Max For Live, MIDI CCs and NRPNs

Post by wehkah » Mon Dec 21, 2009 7:23 pm

i dont have max but i think you can use [midiin] and [unpack] to get the nrpn numbers in max

http://cycling74.com/docs/max5/refpages ... idiin.html

http://cycling74.com/docs/max5/refpages ... npack.html

http://cycling74.com/docs/max5/vignette ... clive.html


hope that helps


cheers
T
Motto: sharing knowledge...

https://soundcloud.com/bytechop

steffensen
Posts: 274
Joined: Mon Jul 18, 2005 8:48 am

Re: Max For Live, MIDI CCs and NRPNs

Post by steffensen » Mon Dec 21, 2009 9:15 pm

Ive done midi panels for all my synths, including Mopho. All done in Max, and theyre working perfectly. However, as Live dont support sysex, M4L wont cut it for you..
Not yet anyway.

zalo
Posts: 999
Joined: Sat Jun 27, 2009 9:10 pm

Re: Max For Live, MIDI CCs and NRPNs

Post by zalo » Tue Dec 22, 2009 7:14 am

steffensen wrote:Ive done midi panels for all my synths, including Mopho. All done in Max, and theyre working perfectly. However, as Live dont support sysex, M4L wont cut it for you..
Not yet anyway.
am i the only one that has realized that M4L is Max? if you go to edit a M4L effect, it will open max/msp, then you can go to file>new patcher and create a new .maxpat

if i create a max patch (blah.maxpat) in M4L, i can open it with max runtime and it runs just like any other max patch would

so if you take one of your midi panels, change all the controls to a udprecieve and then create an M4L patch with all the controls linked to a udpsend you can map everything from inside live connected to max runtime connected to your synth

maybe im just drunk but this seems like it should work

macmurphy
Posts: 1431
Joined: Mon Aug 16, 2004 7:21 am
Location: Emneth,Norfolk, UK

Re: Max For Live, MIDI CCs and NRPNs

Post by macmurphy » Tue Dec 22, 2009 11:55 am

Thanks for the replies. I have to admit, this stuff makes my head hurt. It took me long enough to figure out midi ox :?

steffensen
Posts: 274
Joined: Mon Jul 18, 2005 8:48 am

Re: Max For Live, MIDI CCs and NRPNs

Post by steffensen » Tue Dec 22, 2009 4:37 pm

zalo wrote:
steffensen wrote:Ive done midi panels for all my synths, including Mopho. All done in Max, and theyre working perfectly. However, as Live dont support sysex, M4L wont cut it for you..
Not yet anyway.
am i the only one that has realized that M4L is Max? if you go to edit a M4L effect, it will open max/msp, then you can go to file>new patcher and create a new .maxpat

if i create a max patch (blah.maxpat) in M4L, i can open it with max runtime and it runs just like any other max patch would

so if you take one of your midi panels, change all the controls to a udprecieve and then create an M4L patch with all the controls linked to a udpsend you can map everything from inside live connected to max runtime connected to your synth

maybe im just drunk but this seems like it should work
Sure, or you could just run the patch standalone as is, or within Max if u have it. :)
But it still wont work directly inside a Live project with M4L, which is kinda the point of it all imo..
I personally prefer using my midi panels inside Max however, but its still strange that Ableton decided to ignore sysex this way.. would be great with some kind of explenation.

zalo
Posts: 999
Joined: Sat Jun 27, 2009 9:10 pm

Re: Max For Live, MIDI CCs and NRPNs

Post by zalo » Wed Dec 23, 2009 1:09 pm

steffensen wrote:Sure, or you could just run the patch standalone as is, or within Max if u have it. :)
But it still wont work directly inside a Live project with M4L, which is kinda the point of it all imo..
I personally prefer using my midi panels inside Max however, but its still strange that Ableton decided to ignore sysex this way.. would be great with some kind of explenation.
well yeah, the window size limitations of M4L kind of defeat the purpose of making the midi panel to start out with

but you could link it for modulation control from within live through udpsend

giving you the ability to have the midi panel in all of its glory outside live, but also control everything from clips if need be

its not pretty, but it would give some more performance control

steffensen
Posts: 274
Joined: Mon Jul 18, 2005 8:48 am

Re: Max For Live, MIDI CCs and NRPNs

Post by steffensen » Thu Dec 24, 2009 11:21 am

zalo wrote:
steffensen wrote:Sure, or you could just run the patch standalone as is, or within Max if u have it. :)
But it still wont work directly inside a Live project with M4L, which is kinda the point of it all imo..
I personally prefer using my midi panels inside Max however, but its still strange that Ableton decided to ignore sysex this way.. would be great with some kind of explenation.
well yeah, the window size limitations of M4L kind of defeat the purpose of making the midi panel to start out with

but you could link it for modulation control from within live through udpsend

giving you the ability to have the midi panel in all of its glory outside live, but also control everything from clips if need be

its not pretty, but it would give some more performance control
Well, i dont need clip control of my hw synths. Theyre too old for interaction like that anyway, lagging like mad. I would rally love the ability to save the settings of a sound directly on a track however, instead of finding the right pre-saved preset for everything all the time.

The window size limitation isnt a limitation. Heard of Tabs? :) Its all about how you make the GUI. Just look at Operator for example.

zalo
Posts: 999
Joined: Sat Jun 27, 2009 9:10 pm

Re: Max For Live, MIDI CCs and NRPNs

Post by zalo » Thu Dec 24, 2009 2:55 pm

steffensen wrote:The window size limitation isnt a limitation. Heard of Tabs? :) Its all about how you make the GUI. Just look at Operator for example.
i thought the whole point of making a midi panel was so you dont have to menu dive?

i would rather see every control all at once, maybe its just the way my brain works

steffensen
Posts: 274
Joined: Mon Jul 18, 2005 8:48 am

Re: Max For Live, MIDI CCs and NRPNs

Post by steffensen » Sat Dec 26, 2009 12:38 pm

zalo wrote:
steffensen wrote:The window size limitation isnt a limitation. Heard of Tabs? :) Its all about how you make the GUI. Just look at Operator for example.
i thought the whole point of making a midi panel was so you dont have to menu dive?

i would rather see every control all at once, maybe its just the way my brain works
Having one section for Envelopes, and one section for the Osc's and Filters etc. isnt really menu diving is it? :)

Venetian
Posts: 54
Joined: Sat Jul 21, 2007 4:55 pm
Location: London
Contact:

Re: Max For Live, MIDI CCs and NRPNs

Post by Venetian » Tue Jan 05, 2010 8:07 pm

aren't NRPN's a set MIDI message?

Using Max you can send any such message

[144, 60, 100] with appropriate midiout object

for instance, sends note 60, velocity 100 out channel 1 (since 144 is note on for channel 1)

So your NRPN's have a specific address - once you have that then midiout from Max will be able to send that

Mindfields
Posts: 2
Joined: Tue Sep 29, 2009 9:50 pm

Re: Max For Live, MIDI CCs and NRPNs

Post by Mindfields » Sun Mar 21, 2010 1:58 pm

Hello

i know this is a very old post, but it couldnt find any solution for this on the net.

So i started to try making my first max for live patch.

I have managed to make one knob for the cutoff.
and after that i should be able to perform the same stuff on the rest.
i might try making a full controller, or a midi tranlator instead.

here is the code for the one knob version if you want to try it:

{
"boxes" : [ {
"box" : {
"maxclass" : "message",
"text" : "0",
"patching_rect" : [ 220.262848, 283.225861, 28.220671, 16.0 ],
"fontsize" : 10.0,
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"fontname" : "Arial Bold",
"id" : "obj-3"
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "expr $i1-127",
"patching_rect" : [ 46.304657, 239.336746, 68.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"fontname" : "Arial Bold",
"id" : "obj-107"
}

}
, {
"box" : {
"maxclass" : "message",
"text" : "0",
"patching_rect" : [ 310.905609, 219.332138, 32.5, 16.0 ],
"fontsize" : 10.0,
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"fontname" : "Arial Bold",
"id" : "obj-100"
}

}
, {
"box" : {
"maxclass" : "message",
"text" : "15",
"patching_rect" : [ 252.289917, 218.917572, 32.5, 16.0 ],
"fontsize" : 10.0,
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"fontname" : "Arial Bold",
"id" : "obj-99"
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "ctlout a 38",
"patching_rect" : [ 155.372528, 306.101715, 60.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 3,
"numoutlets" : 0,
"fontname" : "Arial Bold",
"id" : "obj-98"
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "ctlout a 99",
"patching_rect" : [ 311.428894, 236.89743, 60.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 3,
"numoutlets" : 0,
"fontname" : "Arial Bold",
"id" : "obj-96"
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "ctlout a 98",
"patching_rect" : [ 251.744537, 236.310608, 60.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 3,
"numoutlets" : 0,
"fontname" : "Arial Bold",
"id" : "obj-95"
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "bangbang 4",
"patching_rect" : [ 193.374557, 173.155548, 67.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 1,
"numoutlets" : 4,
"outlettype" : [ "bang", "bang", "bang", "bang" ],
"fontname" : "Arial Bold",
"id" : "obj-90"
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "if $i1 > 127 then $i2 else $i1",
"patching_rect" : [ 34.870445, 258.939514, 141.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"fontname" : "Arial Bold",
"id" : "obj-89"
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "if $i1 > 127 then 1 else 0",
"patching_rect" : [ 229.712891, 258.679718, 124.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"fontname" : "Arial Bold",
"id" : "obj-88"
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "ctlout a 6",
"patching_rect" : [ 224.816437, 305.443939, 54.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 3,
"numoutlets" : 0,
"fontname" : "Arial Bold",
"id" : "obj-86"
}

}
, {
"box" : {
"maxclass" : "message",
"text" : "35",
"patching_rect" : [ 162.262863, 286.225861, 27.220671, 16.0 ],
"fontsize" : 10.0,
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"fontname" : "Arial Bold",
"id" : "obj-83"
}

}
, {
"box" : {
"maxclass" : "live.dial",
"varname" : "live.dial",
"patching_rect" : [ 4.159409, 4.028877, 44.0, 47.0 ],
"presentation" : 1,
"parameter_enable" : 1,
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "float" ],
"id" : "obj-52",
"presentation_rect" : [ 10.504337, 4.235929, 44.0, 47.0 ],
"saved_attribute_attributes" : {
"valueof" : {
"parameter_longname" : "live.dial",
"parameter_modmin" : 0.0,
"parameter_linknames" : 0,
"parameter_modmode" : 0,
"parameter_info" : "",
"parameter_order" : 0,
"parameter_units" : "",
"parameter_speedlim" : 0,
"parameter_steps" : 0,
"parameter_exponent" : 1.0,
"parameter_unitstyle" : 0,
"parameter_mmax" : 164.0,
"parameter_mmin" : 0.0,
"parameter_type" : 1,
"parameter_initial_enable" : 0,
"parameter_shortname" : "CutOff",
"parameter_invisible" : 0,
"parameter_modmax" : 127.0,
"parameter_annotation_name" : ""
}

}

}

}
, {
"box" : {
"maxclass" : "comment",
"text" : "Device vertical limit",
"patching_rect" : [ 0.0, 170.0, 118.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 1,
"numoutlets" : 0,
"fontname" : "Arial",
"id" : "obj-9",
"hidden" : 1
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "midiout",
"patching_rect" : [ 9.359818, 219.278168, 47.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 1,
"numoutlets" : 0,
"fontname" : "Arial Bold",
"id" : "obj-2"
}

}
, {
"box" : {
"maxclass" : "newobj",
"text" : "midiin",
"patching_rect" : [ 11.991333, 189.171326, 40.0, 18.0 ],
"fontsize" : 10.0,
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "int" ],
"fontname" : "Arial Bold",
"id" : "obj-1"
}

}
],
"lines" : [ {
"patchline" : {
"source" : [ "obj-90", 0 ],
"destination" : [ "obj-83", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-90", 1 ],
"destination" : [ "obj-3", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-90", 2 ],
"destination" : [ "obj-99", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-90", 3 ],
"destination" : [ "obj-100", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-52", 0 ],
"destination" : [ "obj-90", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-3", 0 ],
"destination" : [ "obj-86", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-88", 0 ],
"destination" : [ "obj-3", 1 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-83", 0 ],
"destination" : [ "obj-98", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-1", 0 ],
"destination" : [ "obj-2", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-99", 0 ],
"destination" : [ "obj-95", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-100", 0 ],
"destination" : [ "obj-96", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-52", 0 ],
"destination" : [ "obj-88", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-89", 0 ],
"destination" : [ "obj-83", 1 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-52", 0 ],
"destination" : [ "obj-89", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-52", 0 ],
"destination" : [ "obj-107", 0 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
, {
"patchline" : {
"source" : [ "obj-107", 0 ],
"destination" : [ "obj-89", 1 ],
"hidden" : 0,
"midpoints" : [ ]
}

}
]
}

Pym
Posts: 3
Joined: Sun Mar 28, 2010 11:48 pm
Location: San Francisco
Contact:

Re: Max For Live, MIDI CCs and NRPNs

Post by Pym » Tue Mar 30, 2010 9:59 am

You're in luck! I just posted a javascript filter to both filter out NRPNs and pass them to Max as 14 bit index + value pairs and another script that takes the 14 bit index + value pairs and sends them out as 4 CCs back to the MIDI output. Check it out here: http://forum.ableton.com/viewtopic.php?f=35&t=139555

And it just so happens I'm working on a Mopho/Tetra control patch for Max... the control is all working but I want to be able to update the Max patch from the synth using the Sysex commands so it's going to take a bit more work to tweak it into happiness. Trying to get it done before the Mopho Keyboard release!
Chris aka. Pym
Dave Smith Instruments

macmurphy
Posts: 1431
Joined: Mon Aug 16, 2004 7:21 am
Location: Emneth,Norfolk, UK

Re: Max For Live, MIDI CCs and NRPNs

Post by macmurphy » Tue Mar 30, 2010 2:30 pm

Pym wrote:You're in luck! I just posted a javascript filter to both filter out NRPNs and pass them to Max as 14 bit index + value pairs and another script that takes the 14 bit index + value pairs and sends them out as 4 CCs back to the MIDI output. Check it out here: http://forum.ableton.com/viewtopic.php?f=35&t=139555

And it just so happens I'm working on a Mopho/Tetra control patch for Max... the control is all working but I want to be able to update the Max patch from the synth using the Sysex commands so it's going to take a bit more work to tweak it into happiness. Trying to get it done before the Mopho Keyboard release!
Excellent work mate :)
It's just a shame that any money i have that would have gone on max for live is now going towards a Mopho keyboard :wink:

Post Reply