This is a patch to enables the sending of MIDI-controller data from the Korg Electribe ES-1 to maxMSP.
Some technical details:
The ES-1 only sends MIDI note values on the MIDI-out port. The controllers are only sent by so called NPRN-Data. Usual audio-applications can’t handle this kind of data hidden in the MIDI-stream. MaxMSP allows to handle every kind of incoming data, so I figured out to convert the controller values into the max format. The single sample-channels 1 till 7B changes the controller values of the knobs. All in all you can control over 68 controller values in addition to the ordinary MIDI note data with that patch! Using the patch is pure fun, because the Electribe ES-1 it is still one of the best hardware controller interfaces available.
To use it, simply copy the content of the .txt-file into the copy-buffer and select in maxMSP “open from clipboard”. Done, that’s all. Download here.
If you port this patch to pure data or vvvv, leave a comment and we will link to your place or host your patch at this place. Use this patch for a performance? (It doesn’t have to be necessarily a music performance…) Then please feedback and post a comment here.
Hi,
it looks great. i buyed a es-1 and will try this patch soon.
do you have a patch for sending midi control data from computer(from ableton maybe) to es-1 ?
i am looking for one patch that does the job exactly inverse of yours.
maybe it can be built easily. i need to learn about binary codes of these midi control messages. but still dont know how to assign control messages with es-1 messages.
all i need is writing and saving automations (of a song) to the computer.
Thanks for the interest …
Regards from Istanbul
Posted on March 28th, 2007 at 02:40Hello Okan.
– First of all you can make use of Pluggo, to make VST PlugIns out of maxMSP patches to make use in Abletome Live. Pluggo again cost money, but I am almost sure that threre are similar tools out there for free, maybe in the pure data community.
– I was wondering why you would make use of NPRN-Data from your applications into the ES-1. From my point of view this did not make sense.
Posted on March 30th, 2007 at 23:43To control MIDI-Note Data (Notes on, offs etc.) there are better solutions on board of the ES-1. And for making a dump of all data at once you can write a simple patch. Once I made a quick patch. If you want I can mail it to you.
hi martin,
this patch is really functional. it works! i simply want to write some automations (like volume control) on ableton to control es-1. it is because that i want to use es-1 in my track arrangements. there isnt any related info on the web. even korg didnt answer. i am very thankful if ou have a patch that sends midi cc# automations(written in ableton) to es-1.
i am not good at coding. i’ll try to write this patch on puredata and then can send messages by using midiyoke midi ports maybe. i will send you if i will have achieved something working correctly.
thanks again for this patch!!
okan
Posted on March 31st, 2007 at 14:24Thanks Okan. Interesting thoughs though. Would be an interesting enhancement to make the patch bi-directional and to also make a vst-version of it.
Greetings to Istanbul!
Posted on March 31st, 2007 at 14:50I just ported this to pure data. If you run the cyclone library, the patch is identical to the max one.
Posted on June 4th, 2007 at 00:28Will it be hard to change this file to be usefull on ER-1 MK2?
Posted on July 23rd, 2007 at 11:43Hello Kraku.
I don’t have an ER-1 MK2 available, but it should be really no problem to customize this device. I could imagine that the engineers at Korg simply used the same layout of controller numbers for the ER-1. If not, that you can simply analyze the incoming controller values in the patch and customize it to the ER-1 MK2 and your needs.
Posted on July 23rd, 2007 at 17:06Hey there Martin,
I have an ER 1 and was testing his patch out in Ableton Live. How can I send the midi data produced in max/msp to ableton?
when I currently test it, the midi data is not being recognised in abelton.
Cheers
nick
Posted on April 13th, 2008 at 23:21Hi Nick!
What exactly are you trying to do? This one is a patch for maxMSP, unfortunately I did not managed to make a VST-version of it. As far as I know Ableton does not understand maxMSP files, but only VST.
If someone would make this possible, it would be a pleasure to publish it here.
Posted on April 13th, 2008 at 23:50hi Martin.
In Ableton there is a function that allow us to map midi parameters to effects. I was thinking of using one the knobs on the ER1 to control Ableton based reverb wet/dry controls. This would be really good :)
Posted on April 14th, 2008 at 10:55Hi Nick.
Like I already said… Ableton does not understand maxMSP patches. It is possible to make a VST out of the patch above. But you need special software to do so. I think it was called Pluggo, or any other thing from Cycling 74. I would really appreciate it, if someone could just VST the patch, test it and send it to me, in order to please people like you. ;)
Posted on April 14th, 2008 at 12:57Oh I found out a way in the ableton forum :) no worries !
——————-
its really easy, just takes a while to get all the pieces.
I have successfully mapped every knob and button on my KORG ES1 mkII to ableton to use as a sequencer/controller.
First things first, the only buttons that will work right after you hook it up to ableton are the part keys.(i.e. where you samples are arrnaged and selected on the korg) all the other knobs and faders will not.
These knobs and faders do send information. If you havn’t tried already, try to midi map a knob into ableton. Any knob will send a CC# (controller change) normally either 6/….or98/, followed by some more information…. these are useless without being properly translated, and in reality are NRPN(
Step 1 = Get MIDI-OX and MIDI Yoke installed on your computer. Detailed instructions can be found at midiox.com.
Step 2 = After these programs have been installed, hook up your electribe to your computer via your MIDI connection.
Step 3 = Open up MIDIOX, and go to options at the top, click on MIDI devices. You should see your input MIDI device on the list. Select your IN device and then select and OUT device(a MIDI YOKE channel). We have setup a kind of translation bay. NRPN will come in on the INPUT, translated, spit back OUT immediately on the OUTPUT. Close this list.
Step 4 = Open up a input and output monitor in MIDI-OX, if all is connected properly you should see the input start scrolling. I came to believe this is my korgs timeclock. Now the fun begins.
Step 5 = Click on view>MIDI status..this will open up a sort map. Move a knob on your electribe and look in this map. a NRPN # and min-maxrange will show up. The range is almost 99% always 0-16256. Ok so we now have the NRPN # and range for one of your knobs, write these down, i swear it will help.
Step 6 = Now, with this information we can start translating this knobs NRPN to a usable CC signal. Click options and then data mapping. This will open up a translation map. Nothing should be checked in here except, (TURN MAP ON). Click on insert.
Step 7 = After clicking insert it will bring up Define Mapping window. Do as follows
WHEN INPUT MATCHES
Channel=Any Event=NRPN Min1=NRPN # Max1=(same NRPN as before) Min2=0 Max2=16256
WHEN OUTPUT MATCHES
Channel=Any Event=Controller Change Min1=AnyCC you want 1-97(excluding 6,98, and the channel you are sending on) Max1=the same CC as Min1 Min2=0 Max2=127
Click ok.
Step 8 = to check move the knob, make sure you are still getting chages on the input monitor. ( the turn map on after ok button) had to be checked or the data mapping will no be turned on. We have now taken a unusable NRPN and converted it to a usable CC.
Last step is to open Ableton and setup your MIDI options to recieve on all channels. You also have to go into the MIDI options and on whatever MIDI yoke channel you used( i used 1) make sure the sync and remote keys are solid. Now, turn midi mapping on, click on a parameter and move your knob. If all went well it will show up as whatever CC you assigned it. Have fun.
On my ES1 mkII I have 8 sample parts. Each on of these parts is assigned to a part in IMPULSE. If i have part 1 selected i have knobs for everything, time,decay,start,vol,drive,filter……all of these are just for the kick…..i select my part 2 button on my korg(which makes all my knobs send different NRPN when selected) and i have the same control over part 2.
Basically it turned impulse into a bad ass because i can eff up each hit respectively. I
Posted on April 14th, 2008 at 15:12hey, it’s all this possible if i use logic pro 8 ??
Posted on May 16th, 2008 at 02:54i can only use the keys but not the faders..
I think not directly, because you can’t load any patch into Logic 8, I guess. Check if Logic 8 support direct manipulation of NPRN-Data. Otherwise I definitely will have to check, to finally make a VST out of the patch..
Posted on May 16th, 2008 at 11:17Hi could somebody explain how to port this patch to Pure Data? I know it must be relatively simple, but I’m new to all this.
Also has anybody modified it to work with the EA-1 or the MK-2? If so please explain how it’s done???
This would all make me very happy indeed!
Posted on July 30th, 2008 at 01:41Hi there,
Can somebody explain this?
I try to use my ES1 with battery3 (NI)as controller. I can assign note as I want but when I play patterns, I have a terrible result (to many midi info?):samples are sometimes slowing down and then running after the tempo… Do you think i can use it as told before (then solution??) or do you think the midi port of the ES1 is not able to manage so many output informations?
PS: any idea wher can I find a Midi device Map for ES1MK2?
thank you so much for your help.
Posted on July 31st, 2009 at 18:30@Phaco: Hm, this issue is not really related to this patch, isn’t it? Unfortunately I am not that deep into the ES-1 and MIDI-things to give you a help on this. Maybe anyone else?
Posted on August 1st, 2009 at 17:04Hi,
I’ve followed the ableton method of mapping my ER1 Mk2, I noticed in nicks post he said he managed to get it to change the nprn for each part so you can control the decay, pitch, modulation etc of each part. How can I map this in midiox so that when I select a different part key all the knobs a assigned a different value in order to map them for each individual part in ableton?
Also has anyone tried reverse mapping, so that the er1 can be controlled from ableton?
Any ideas would be very interesting!
Andy
Posted on August 9th, 2009 at 12:43Hi,
I’m triyng to control a digitech whammy pedal with the Electribe es-1….
Here the midi capablities of the whammy:
“The WhammyTM is capable of remotely adjusting the treadle position, as well as turning the WhammyTM effect on and off through the use of MIDI continuous control commands. MIDI CC11 adjusts the treadle position. A value of 0 on MIDI CC11 corresponds to a toe up position and 127 corresponds to a toe down position.
MIDI CC0 is used to turn on and off the Whammy effect. Values from 0 through 64 on MIDI CC0 will turn the WhammyTM effect off, and values from 65 through 127 will turn the effect on.”….
Now, it’s possible to create a kind of “arpeggio” with a pattern from the electribe?
I hope the question is clear (my english is very poor!!!)….
Thanks….
Adriano
Posted on April 15th, 2010 at 17:37I don’t see a reason, why it should be impossible to do this effect. You of course will need a software, that is capable of doing the MIDI-data action while sending it to the pedal.
Posted on April 15th, 2010 at 17:46The reason is to have a live set “easy-to-program”….
I know that it’s possible with the softwares, but it’s not immediate…and in a live set you can’t “improvvise”….
My idea is to have a midi pedalboard to switch the pattern on the electribe connected to the whammy to create the arpeggios…
Posted on April 15th, 2010 at 18:14Hello!
Posted on May 20th, 2010 at 00:30i would like to circuit bend my electribe es1..
it is possible isnt it?
could anyone send me an email with any projects that have been made done before like this?
please!!
attila
bit off topic i know…..sorry.
Posted on May 20th, 2010 at 00:32forgive me..
Hm attila,
Posted on May 20th, 2010 at 00:32did you tried google? I’m not an expert at circuit-bending, but I am not sure, if it is a good idea, to circuit-bend the ES-1. Especially not for beginners! Start small, use toys.
Hi guys,
Pretty cool thread here. Saved my day. I extended the patch so that it is a bit more robust and also has a CC -> NRPN back conversion.
I tested against an Electribe ER1 and EM1, Live 8.1 and Max 5.
I got rid of the [thresh] object, as it seemed to introduce some faulty messages in the stream as well. Adapted the js from http://tetradev.blogspot.com/2010/03/nrpns-part-1-basics.html
Please post here, if you are continuing on my patch somehow.
Cheers,
Ludwig
———
{
“boxes” : [ {
“box” : {
“maxclass” : “newobj”,
“text” : “unpack 0 0″,
“outlettype” : [ “int”, “int” ],
“id” : “obj-177″,
“fontsize” : 12.0,
“patching_rect” : [ 351.0, 252.0, 69.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “js filter_nrpn.js”,
“outlettype” : [ “” ],
“id” : “obj-175″,
“fontsize” : 12.0,
“patching_rect” : [ 350.0, 215.0, 88.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 1
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “t b b b i”,
“outlettype” : [ “bang”, “bang”, “bang”, “int” ],
“id” : “obj-162″,
“fontsize” : 12.0,
“patching_rect” : [ 336.0, 356.0, 59.5, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 4
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-161″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 482.0, 398.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-160″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 470.0, 212.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “midiparse”,
“outlettype” : [ “”, “”, “”, “int”, “int”, “int”, “int” ],
“id” : “obj-145″,
“fontsize” : 12.0,
“patching_rect” : [ 352.0, 144.0, 100.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 7
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “t b i”,
“outlettype” : [ “bang”, “int” ],
“id” : “obj-144″,
“fontsize” : 12.0,
“patching_rect” : [ 809.0, 355.0, 32.5, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “t i i i”,
“outlettype” : [ “int”, “int”, “int” ],
“id” : “obj-143″,
“fontsize” : 12.0,
“patching_rect” : [ 899.0, 425.0, 46.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 3
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “i”,
“outlettype” : [ “int” ],
“id” : “obj-139″,
“fontsize” : 12.0,
“patching_rect” : [ 899.0, 394.0, 32.5, 20.0 ],
“numinlets” : 2,
“fontname” : “Arial”,
“numoutlets” : 1
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “+ 175″,
“outlettype” : [ “int” ],
“id” : “obj-136″,
“fontsize” : 12.0,
“patching_rect” : [ 913.0, 363.0, 41.0, 20.0 ],
“numinlets” : 2,
“fontname” : “Arial”,
“numoutlets” : 1
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “midiout b”,
“id” : “obj-114″,
“fontsize” : 12.0,
“patching_rect” : [ 817.0, 539.0, 59.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “comment”,
“text” : “cc to nrpn conversion”,
“id” : “obj-109″,
“fontsize” : 12.0,
“patching_rect” : [ 804.0, 267.0, 150.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “pack 0 99 6 0 98 0 0 6 0″,
“outlettype” : [ “” ],
“id” : “obj-108″,
“fontsize” : 12.0,
“patching_rect” : [ 816.0, 506.0, 139.0, 20.0 ],
“numinlets” : 9,
“fontname” : “Arial”,
“numoutlets” : 1
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “ctlin b”,
“outlettype” : [ “int”, “int”, “int” ],
“id” : “obj-106″,
“fontsize” : 12.0,
“patching_rect” : [ 804.0, 295.0, 46.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 3
}
}
, {
“box” : {
“maxclass” : “comment”,
“text” : “pitch, velocity, channel”,
“id” : “obj-81″,
“fontsize” : 12.0,
“patching_rect” : [ 44.0, 589.0, 150.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “comment”,
“text” : “pass midi notes -> electribe”,
“id” : “obj-82″,
“fontsize” : 12.0,
“patching_rect” : [ 46.0, 443.0, 185.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-83″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 44.0, 561.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-84″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 84.0, 561.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-85″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 123.0, 562.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “notein b”,
“outlettype” : [ “int”, “int”, “int” ],
“id” : “obj-86″,
“fontsize” : 9.0,
“patching_rect” : [ 181.0, 475.0, 46.0, 17.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 3
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “noteout b”,
“id” : “obj-87″,
“fontsize” : 12.0,
“patching_rect” : [ 172.0, 560.0, 61.0, 20.0 ],
“numinlets” : 3,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “i”,
“outlettype” : [ “int” ],
“id” : “obj-60″,
“fontsize” : 12.0,
“patching_rect” : [ 483.0, 423.0, 32.5, 20.0 ],
“numinlets” : 2,
“fontname” : “Arial”,
“numoutlets” : 1
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “i”,
“outlettype” : [ “int” ],
“id” : “obj-59″,
“fontsize” : 12.0,
“patching_rect” : [ 394.0, 424.0, 32.5, 20.0 ],
“numinlets” : 2,
“fontname” : “Arial”,
“numoutlets” : 1
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “i”,
“outlettype” : [ “int” ],
“id” : “obj-58″,
“fontsize” : 12.0,
“patching_rect” : [ 438.0, 424.0, 32.5, 20.0 ],
“numinlets” : 2,
“fontname” : “Arial”,
“numoutlets” : 1
}
}
, {
“box” : {
“maxclass” : “comment”,
“text” : “mind message creation:\nfirst compile, then send”,
“linecount” : 2,
“id” : “obj-53″,
“fontsize” : 12.0,
“patching_rect” : [ 531.0, 367.0, 150.0, 34.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “comment”,
“text” : “nrpn to cc conversion”,
“id” : “obj-44″,
“fontsize” : 12.0,
“patching_rect” : [ 393.0, 53.0, 150.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “comment”,
“text” : “pitch, velocity, channel”,
“id” : “obj-38″,
“fontsize” : 12.0,
“patching_rect” : [ 45.0, 307.0, 150.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “comment”,
“text” : “pass midi notes -> ableton”,
“id” : “obj-36″,
“fontsize” : 12.0,
“patching_rect” : [ 47.0, 161.0, 150.0, 20.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-28″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 439.0, 398.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “split 0 100″,
“outlettype” : [ “int”, “int” ],
“id” : “obj-29″,
“fontsize” : 9.0,
“patching_rect” : [ 352.0, 322.0, 51.0, 17.0 ],
“numinlets” : 3,
“fontname” : “Arial”,
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-9″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 45.0, 279.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-10″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 85.0, 279.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-11″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 124.0, 280.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “notein a”,
“outlettype” : [ “int”, “int”, “int” ],
“id” : “obj-12″,
“fontsize” : 9.0,
“patching_rect” : [ 182.0, 193.0, 46.0, 17.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 3
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “midiin a”,
“outlettype” : [ “int” ],
“id” : “obj-31″,
“fontsize” : 9.0,
“patching_rect” : [ 394.0, 90.0, 42.0, 17.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 1
}
}
, {
“box” : {
“maxclass” : “comment”,
“text” : “valid controller value (are based between 0 and 100)”,
“id” : “obj-17″,
“fontsize” : 9.0,
“patching_rect” : [ 408.0, 325.0, 236.0, 17.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-20″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 398.0, 397.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “number”,
“outlettype” : [ “int”, “bang” ],
“id” : “obj-21″,
“fontsize” : 9.0,
“triscale” : 0.9,
“patching_rect” : [ 352.0, 298.0, 35.0, 17.0 ],
“htextcolor” : [ 0.870588, 0.870588, 0.870588, 1.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“bgcolor” : [ 0.866667, 0.866667, 0.866667, 1.0 ],
“numoutlets” : 2
}
}
, {
“box” : {
“maxclass” : “comment”,
“text” : “controller”,
“id” : “obj-34″,
“fontsize” : 9.0,
“patching_rect” : [ 394.0, 297.0, 100.0, 17.0 ],
“numinlets” : 1,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “noteout a”,
“id” : “obj-26″,
“fontsize” : 12.0,
“patching_rect” : [ 173.0, 278.0, 61.0, 20.0 ],
“numinlets” : 3,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “ctlout a”,
“id” : “obj-19″,
“fontsize” : 12.0,
“patching_rect” : [ 410.0, 612.0, 85.0, 20.0 ],
“numinlets” : 3,
“fontname” : “Arial”,
“numoutlets” : 0
}
}
],
“lines” : [ {
“patchline” : {
“source” : [ “obj-21″, 0 ],
“destination” : [ “obj-29″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-12″, 0 ],
“destination” : [ “obj-9″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-12″, 1 ],
“destination” : [ “obj-10″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-12″, 2 ],
“destination” : [ “obj-11″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-12″, 0 ],
“destination” : [ “obj-26″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-12″, 1 ],
“destination” : [ “obj-26″, 1 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-12″, 2 ],
“destination” : [ “obj-26″, 2 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-28″, 0 ],
“destination” : [ “obj-58″, 1 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-20″, 0 ],
“destination” : [ “obj-59″, 1 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-59″, 0 ],
“destination” : [ “obj-19″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-58″, 0 ],
“destination” : [ “obj-19″, 1 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-60″, 0 ],
“destination” : [ “obj-19″, 2 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-86″, 0 ],
“destination” : [ “obj-83″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-86″, 1 ],
“destination” : [ “obj-84″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-86″, 2 ],
“destination” : [ “obj-85″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-86″, 2 ],
“destination” : [ “obj-87″, 2 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-86″, 1 ],
“destination” : [ “obj-87″, 1 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-86″, 0 ],
“destination” : [ “obj-87″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-136″, 0 ],
“destination” : [ “obj-139″, 1 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-106″, 2 ],
“destination” : [ “obj-136″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-139″, 0 ],
“destination” : [ “obj-143″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-143″, 0 ],
“destination” : [ “obj-108″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-143″, 1 ],
“destination” : [ “obj-108″, 3 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-143″, 2 ],
“destination” : [ “obj-108″, 6 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-106″, 1 ],
“destination” : [ “obj-108″, 5 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-106″, 0 ],
“destination” : [ “obj-144″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-144″, 1 ],
“destination” : [ “obj-108″, 8 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-144″, 0 ],
“destination” : [ “obj-139″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-108″, 0 ],
“destination” : [ “obj-114″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-31″, 0 ],
“destination” : [ “obj-145″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-145″, 6 ],
“destination” : [ “obj-160″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-160″, 0 ],
“destination” : [ “obj-161″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-161″, 0 ],
“destination” : [ “obj-60″, 1 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-145″, 2 ],
“destination” : [ “obj-175″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-175″, 0 ],
“destination” : [ “obj-177″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-162″, 0 ],
“destination” : [ “obj-59″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-162″, 1 ],
“destination” : [ “obj-58″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-162″, 2 ],
“destination” : [ “obj-60″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-177″, 0 ],
“destination” : [ “obj-21″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-177″, 1 ],
“destination” : [ “obj-20″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-29″, 0 ],
“destination” : [ “obj-162″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
, {
“patchline” : {
“source” : [ “obj-162″, 3 ],
“destination” : [ “obj-28″, 0 ],
“hidden” : 0,
“midpoints” : [ ]
}
}
Posted on April 23rd, 2011 at 21:05]
}
Oh, and here the filter_nrpn.js file…
// MIDI CC constants
const CC_DATA_MSB = 6;
//const CC_DATA_LSB = 38; // not used
const CC_NRPN_LSB = 98;
const CC_NRPN_MSB = 99;
// inlets and outlets
inlets = 1;
outlets = 1;
// global variables and arrays
var nrpn_index;
var value;
var cc_index;
var cc_value;
function list(val)
{
if(arguments.length==2)
{
cc_index = arguments[0];
cc_value = arguments[1];
switch(cc_index)
{
case CC_DATA_MSB:
// If we have a valid NRPN index, then the data is valid
if(nrpn_index)
{
send_cc(nrpn_index, cc_value);
}
break;
case CC_NRPN_LSB:
nrpn_index = cc_value;
break;
default:
break;
}
}
}
// Send NRPN: Send NRPN index and value to output 1
Posted on April 23rd, 2011 at 21:06function send_cc(i, v)
{
outlet(0, i, v);
nrpn_index = null;
value = null; // reset the parsed value
value_lsb = null; // reset the LSB of the value
}
Great. Thanks Ludwig for your contribution.
Posted on April 25th, 2011 at 13:59hi people,
is it possible tp link this script to Ableton’s control surface ?
Posted on June 24th, 2011 at 05:49here is the patch for MAX FOR LIVE, this is for abelton live so you can use it as a plugin.
https://www.yousendit.com/download/M0RveUNKYUlUME4zZUE9PQ
Posted on September 10th, 2011 at 01:22its only up till the 16th of Sep’ (2011) but I will repost it for a month or so.
Posted on September 10th, 2011 at 01:25hello, i am a complete noob when it come to max, could someone please give me the dummies guide to setting this up?
Posted on September 10th, 2011 at 01:27I would like to see a VIDEO ! :)
1) Are the 16th sequencer buttons also traduced?
2) So you can send a different midi message (CC?) for EVERY KNOB on EVERY PART?
Posted on October 15th, 2011 at 06:28Hello,
Posted on November 13th, 2011 at 23:42Please up the MAX for LIVE pathch again. The link has expired!!
Thanks!