Splitting X Y Controller data

Oct 3, 2010 at 2:36am

Splitting X Y Controller data

Hello, I’m working with an XY controller that I’d like to be able to assign X to one parameter on Ableton Live and Y to another. Currently, any movement of the XY controller sends out data as one controller value even though I’m moving both the X and Y coordinates. I’d like to be able to have two different controller values for X and Y to be able to map parameters like X to pitch and Y to amplitude.

(In order to test with Ableton, you must select “from MaxMSP 1″ when opening the patch – then you can MIDI learn)

Here is the patch:

————-START——————-

{
“patcher” : {
“fileversion” : 1,
“rect” : [ 25.0, 69.0, 640.0, 480.0 ],
“bglocked” : 0,
“defrect” : [ 25.0, 69.0, 640.0, 480.0 ],
“openrect” : [ 0.0, 0.0, 0.0, 0.0 ],
“openinpresentation” : 0,
“default_fontsize” : 12.0,
“default_fontface” : 0,
“default_fontname” : “Arial”,
“gridonopen” : 0,
“gridsize” : [ 15.0, 15.0 ],
“gridsnaponopen” : 0,
“toolbarvisible” : 1,
“boxanimatetime” : 200,
“imprint” : 0,
“enablehscroll” : 1,
“enablevscroll” : 1,
“devicewidth” : 0.0,
“boxes” : [ {
"box" : {
"maxclass" : "comment",
"text" : "Y",
"numinlets" : 1,
"patching_rect" : [ 337.0, 177.0, 18.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-14″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “comment”,
“text” : “X”,
“numinlets” : 1,
“patching_rect” : [ 209.0, 177.0, 18.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-12″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 374.0, 254.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-10″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 249.0, 255.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-11″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “r mididevice”,
“numinlets” : 0,
“patching_rect” : [ 100.0, 324.0, 75.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-9″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “s mididevice”,
“numinlets” : 1,
“patching_rect” : [ 71.0, 111.0, 77.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-78″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “umenu”,
“presentation_rect” : [ 560.0, 48.0, 100.0, 20.0 ],
“items” : [ "AU DLS Synth 1", ",", "from MaxMSP 1", ",", "from MaxMSP 2" ],
“numinlets” : 1,
“types” : [ ],
“patching_rect” : [ 30.0, 83.0, 100.0, 20.0 ],
“numoutlets” : 3,
“presentation” : 1,
“id” : “obj-77″,
“fontname” : “Arial”,
“outlettype” : [ "int", "", "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “midiinfo”,
“numinlets” : 2,
“patching_rect” : [ 30.0, 55.0, 52.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-75″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “loadmess 1″,
“numinlets” : 1,
“patching_rect” : [ 30.0, 30.0, 72.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-74″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “ctlout”,
“numinlets” : 3,
“patching_rect” : [ 360.0, 324.0, 46.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-7″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “ctlout”,
“numinlets” : 3,
“patching_rect” : [ 235.0, 324.0, 46.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-6″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “loadmess 1″,
“numinlets” : 1,
“patching_rect” : [ 374.0, 227.0, 72.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-5″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “loadmess 0″,
“numinlets” : 1,
“patching_rect” : [ 249.0, 228.0, 72.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-4″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 361.0, 176.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-3″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 235.0, 176.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-1″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “pictslider”,
“presentation_rect” : [ 475.0, 120.0, 145.0, 110.0 ],
“numinlets” : 2,
“patching_rect” : [ 235.0, 37.0, 145.0, 114.0 ],
“numoutlets” : 2,
“presentation” : 1,
“id” : “obj-41″,
“outlettype” : [ "int", "int" ]
}

}
],
“lines” : [ {
"patchline" : {
"source" : [ "obj-10", 0 ],
“destination” : [ "obj-7", 1 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-5", 0 ],
“destination” : [ "obj-10", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-11", 0 ],
“destination” : [ "obj-6", 1 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-4", 0 ],
“destination” : [ "obj-11", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-9", 0 ],
“destination” : [ "obj-7", 0 ],
“hidden” : 0,
“midpoints” : [ 109.5, 373.0, 77.0, 373.0, 77.0, 303.0, 369.5, 303.0 ]
}

}
, {
“patchline” : {
“source” : [ "obj-9", 0 ],
“destination” : [ "obj-6", 0 ],
“hidden” : 0,
“midpoints” : [ 109.5, 365.0, 87.0, 365.0, 87.0, 313.0, 244.5, 313.0 ]
}

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

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

}
, {
“patchline” : {
“source” : [ "obj-77", 1 ],
“destination” : [ "obj-78", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-75", 0 ],
“destination” : [ "obj-77", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-74", 0 ],
“destination” : [ "obj-75", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

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

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

}
]
}

}

————-END—————-

#52557
Oct 3, 2010 at 5:41pm

[unpack ] ;)

#189026
Oct 3, 2010 at 6:06pm

Thanks for the suggestion MIB, but I don’t see how that would fix anything. There are already two separate outputs for X and Y coming from the XY controller so [unpack] won’t really change anything. Correct me if I’m wrong though, here’s the patch with unpack although it seems like the same signal flow to me as the last patch.

———–START————–

{
“patcher” : {
“fileversion” : 1,
“rect” : [ 25.0, 69.0, 640.0, 480.0 ],
“bglocked” : 0,
“defrect” : [ 25.0, 69.0, 640.0, 480.0 ],
“openrect” : [ 0.0, 0.0, 0.0, 0.0 ],
“openinpresentation” : 0,
“default_fontsize” : 12.0,
“default_fontface” : 0,
“default_fontname” : “Arial”,
“gridonopen” : 0,
“gridsize” : [ 15.0, 15.0 ],
“gridsnaponopen” : 0,
“toolbarvisible” : 1,
“boxanimatetime” : 200,
“imprint” : 0,
“enablehscroll” : 1,
“enablevscroll” : 1,
“devicewidth” : 0.0,
“boxes” : [ {
"box" : {
"maxclass" : "comment",
"text" : "Y",
"numinlets" : 1,
"patching_rect" : [ 712.0, 163.0, 18.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-8″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “comment”,
“text” : “X”,
“numinlets” : 1,
“patching_rect” : [ 584.0, 163.0, 18.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-13″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 749.0, 240.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-15″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 624.0, 241.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-16″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “r mididevice”,
“numinlets” : 0,
“patching_rect” : [ 475.0, 310.0, 75.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-17″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “ctlout”,
“numinlets” : 3,
“patching_rect” : [ 735.0, 310.0, 46.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-18″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “ctlout”,
“numinlets” : 3,
“patching_rect” : [ 610.0, 310.0, 46.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-19″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “loadmess 1″,
“numinlets” : 1,
“patching_rect” : [ 749.0, 213.0, 72.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-20″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “loadmess 0″,
“numinlets” : 1,
“patching_rect” : [ 624.0, 214.0, 72.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-21″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 736.0, 162.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-22″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 610.0, 162.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-23″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “unpack 0 0″,
“numinlets” : 1,
“patching_rect” : [ 660.0, 69.0, 69.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-2″,
“fontname” : “Arial”,
“outlettype” : [ "int", "int" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “comment”,
“text” : “Y”,
“numinlets” : 1,
“patching_rect” : [ 337.0, 177.0, 18.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-14″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “comment”,
“text” : “X”,
“numinlets” : 1,
“patching_rect” : [ 209.0, 177.0, 18.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-12″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 374.0, 254.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-10″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 249.0, 255.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-11″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “r mididevice”,
“numinlets” : 0,
“patching_rect” : [ 100.0, 324.0, 75.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-9″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “s mididevice”,
“numinlets” : 1,
“patching_rect” : [ 71.0, 111.0, 77.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-78″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “umenu”,
“presentation_rect” : [ 560.0, 48.0, 100.0, 20.0 ],
“items” : [ "AU DLS Synth 1", ",", "from MaxMSP 1", ",", "from MaxMSP 2" ],
“numinlets” : 1,
“types” : [ ],
“patching_rect” : [ 30.0, 83.0, 100.0, 20.0 ],
“numoutlets” : 3,
“presentation” : 1,
“id” : “obj-77″,
“fontname” : “Arial”,
“outlettype” : [ "int", "", "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “midiinfo”,
“numinlets” : 2,
“patching_rect” : [ 30.0, 55.0, 52.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-75″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “loadmess 1″,
“numinlets” : 1,
“patching_rect” : [ 30.0, 30.0, 72.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-74″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “ctlout”,
“numinlets” : 3,
“patching_rect” : [ 360.0, 324.0, 46.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-7″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “ctlout”,
“numinlets” : 3,
“patching_rect” : [ 235.0, 324.0, 46.0, 20.0 ],
“numoutlets” : 0,
“id” : “obj-6″,
“fontname” : “Arial”,
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “loadmess 1″,
“numinlets” : 1,
“patching_rect” : [ 374.0, 227.0, 72.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-5″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “loadmess 0″,
“numinlets” : 1,
“patching_rect” : [ 249.0, 228.0, 72.0, 20.0 ],
“numoutlets” : 1,
“id” : “obj-4″,
“fontname” : “Arial”,
“outlettype” : [ "" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 361.0, 176.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-3″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “number”,
“numinlets” : 1,
“patching_rect” : [ 235.0, 176.0, 50.0, 20.0 ],
“numoutlets” : 2,
“id” : “obj-1″,
“fontname” : “Arial”,
“outlettype” : [ "int", "bang" ],
“fontsize” : 12.0
}

}
, {
“box” : {
“maxclass” : “pictslider”,
“presentation_rect” : [ 475.0, 120.0, 145.0, 110.0 ],
“numinlets” : 2,
“patching_rect” : [ 235.0, 37.0, 145.0, 114.0 ],
“numoutlets” : 2,
“presentation” : 1,
“id” : “obj-41″,
“outlettype” : [ "int", "int" ]
}

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

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

}
, {
“patchline” : {
“source” : [ "obj-15", 0 ],
“destination” : [ "obj-18", 1 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-20", 0 ],
“destination” : [ "obj-15", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-16", 0 ],
“destination” : [ "obj-19", 1 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-21", 0 ],
“destination” : [ "obj-16", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-17", 0 ],
“destination” : [ "obj-18", 0 ],
“hidden” : 0,
“midpoints” : [ 484.5, 359.0, 452.0, 359.0, 452.0, 289.0, 744.5, 289.0 ]
}

}
, {
“patchline” : {
“source” : [ "obj-17", 0 ],
“destination” : [ "obj-19", 0 ],
“hidden” : 0,
“midpoints” : [ 484.5, 351.0, 462.0, 351.0, 462.0, 299.0, 619.5, 299.0 ]
}

}
, {
“patchline” : {
“source” : [ "obj-22", 0 ],
“destination” : [ "obj-18", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-23", 0 ],
“destination” : [ "obj-19", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

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

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

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

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

}
, {
“patchline” : {
“source” : [ "obj-74", 0 ],
“destination” : [ "obj-75", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-75", 0 ],
“destination” : [ "obj-77", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-77", 1 ],
“destination” : [ "obj-78", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-4", 0 ],
“destination” : [ "obj-11", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-11", 0 ],
“destination” : [ "obj-6", 1 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-5", 0 ],
“destination” : [ "obj-10", 0 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
, {
“patchline” : {
“source” : [ "obj-10", 0 ],
“destination” : [ "obj-7", 1 ],
“hidden” : 0,
“midpoints” : [ ]
}

}
]
}

}

#189027
Oct 3, 2010 at 6:47pm

I have to admit I didn’t look at the patch. My bad.
First, please use “Copy Compressed” from the edit menu when posting patches…

To your question:
I’m not sure I understand. since you are useing the pictslider object you are already getting seperate X and Y values… what is the problem? Could you be a bit more specific since I am clearly not getting it :)

– Pasted Max Patch, click to expand. –
#189028
Oct 3, 2010 at 7:52pm

Sorry about not compressing, I’ll make sure to do that.

The idea is to make it so any values coming from the X output is sent as one midi controller value and a different value for the Y output. If you have ableton live or any other software that allows midi learn from this max patch, you can see the problem.

If I move the XY controller in Max as I try to MIDI learn say.. the pitch parameter of a VST, it only comes up as one controller value (0) even though I’m moving both X and Y coordinates. It should change the controller value between 0 and 1 as I move the X and Y coordinates independently. I want to be able to just move the X coordinate (as one controller value, like 0) to MIDI learn anything that comes out of X onto ‘pitch’ then I want to just move the Y coordinate (as another controller value, like 1) to control another parameter separately such as amplitude.

I hope that makes sense, it sounds more complicated than it really is.

Thanks again.

#189029
Oct 3, 2010 at 9:30pm

There’s something weird going on with your patch. I got it working the way you want, but I’m not sure how. I think there might be something buggy going on. Let me investigate further. You aren’t losing your mind, though.

#189030
Oct 3, 2010 at 9:42pm

Okay, it’s not a bug, it’s the way pictslider works. It sends out both values simultaneously even if only one of them changes (that is, if you restrict your movement to one axis by hugging an edge, it still always updates both values). So it sends two CCs with every movement, and Live’s learn ability always picks one of the two. If you slap some “change” objects on the outputs of the pictsliders, to filter out repetitive values, it works.

#189031
Oct 3, 2010 at 11:37pm

Hey, that worked! Thanks very much, I didn’t quite understand how adding the ‘change’ object would fix anything (and I still am kind of confused), but it worked and was a simple fix. Thank you!

#189032
Oct 4, 2010 at 12:12am

Okay (to clear up your confusion). The problem was that whenever the pictslider is moved, it sends out two controller values. Even if you’re only moving, say, vertically, so that the X value isn’t changing, it’s still sending that X value out each time.

This is a problem for Live’s MIDI learn, because whenever you’re sending something a MIDI learn message, you really want to only be sending it one message at a time. So what happens is that the pictslider sends out its messages in proper Max timing (right to left), meaning it sends a Y value and then an X value immediately afterwards.

So what’s happening in Live is that the parameter is mapped to the Y controller for a tiny fraction of a moment, and then that mapping is overridden by the incoming X controller, every time.

The “change” object filters out repetitions of a number, which stops it from sending an X and Y controller message with every mouse movement. So now you can send an X value only (by moving horizontally) or a Y value only (by moving vertically), and Live gets only the one message while it’s in MIDI Learn, and everything is rainbows and happiness.

#189033
Oct 4, 2010 at 12:34am

Rainbows and happiness indeed. Thanks for the explanation and help, nnneuromodulator! Man, mapping the XY controller to frequency and resonance is a recipe for hours of procrastination…

#189034

You must be logged in to reply to this topic.