Virtual Color Fader for Max/MSP

This Max/MSP patch reads in a serial string like this:

Rnnn
Gnnn
Bnnn

Where nnn is an ASCII-formatted decimal number from 0 to 255. It then converts the values into the RGB colod for the patch’s background.

An Arduino program to send the appropriate data follows.

To use the patch, copy the text and paste it into a new max patch window.

Thanks to David Mellis and Jamie Allen for the collaboration. These patches were written for a one-day Arduino workshop at NIME 07 hosted by the three of us. The Arduino program comes from the Arduino example files, by David Mellis.

Technorati Tags: , ,



virtualcolorfader.png

max v2;
#N vpatcher 0 44 587 638;
#P window setfont "Sans Serif" 9.;
#P comment 137 34 100 196617 Read the serial port every two milliseconds;
#P window linecount 1;
#P newex 156 276 27 196617 / 4;
#P number 156 254 35 9 0 1023 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 106 276 27 196617 / 4;
#P number 106 254 35 9 0 1023 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 55 276 27 196617 / 4;
#P number 55 254 35 9 0 1023 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P hidden newex 55 303 112 196617 bgcolor 220 120 192;
#P user multiSlider 167 145 125 91 0. 1023. 1 3449 15 0 0 2 0 0 0;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P user multiSlider 438 145 125 91 0. 1023. 1 3449 15 0 0 2 0 0 0;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P user multiSlider 301 144 125 91 0. 1023. 1 3449 15 0 0 2 0 0 0;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#N vpatcher 20 74 303 387;
#P window setfont "Sans Serif" 9.;
#P newex 92 248 62 196617 fromsymbol;
#B color 5;
#P message 134 231 73 196617;
#P newex 134 211 62 196617 prepend set;
#B color 5;
#P newex 92 211 40 196617 itoa;
#B color 5;
#P newex 92 191 55 196617 zl group 4;
#P newex 50 158 52 196617 select 10;
#P message 130 86 14 196617 1;
#P message 112 86 14 196617 0;
#P newex 50 132 27 196617 gate;
#P newex 130 64 52 196617 select 82;
#P comment 151 45 25 196617 "R";
#P inlet 130 44 15 0;
#P outlet 92 270 15 0;
#P fasten 5 0 4 0 117 111 55 111;
#P fasten 6 0 4 0 135 111 55 111;
#P connect 4 0 7 0;
#P fasten 3 1 4 1 177 128 72 128;
#P connect 7 0 8 0;
#P connect 7 1 8 0;
#P connect 8 0 9 0;
#P connect 9 0 12 0;
#P connect 12 0 0 0;
#P connect 7 0 5 0;
#P connect 1 0 3 0;
#P connect 3 0 6 0;
#P connect 9 0 10 0;
#P connect 10 0 11 0;
#P pop;
#P newobj 55 96 49 196617 p parseR;
#N vpatcher 20 74 620 474;
#P window setfont "Sans Serif" 9.;
#P newex 92 250 62 196617 fromsymbol;
#B color 5;
#P message 134 233 73 196617 501
;
#P newex 134 213 62 196617 prepend set;
#B color 5;
#P newex 92 213 40 196617 itoa;
#B color 5;
#P newex 92 193 55 196617 zl group 4;
#P newex 50 160 52 196617 select 10;
#P message 130 88 14 196617 1;
#P message 112 88 14 196617 0;
#P newex 50 134 27 196617 gate;
#P newex 130 66 52 196617 select 66;
#P comment 169 50 25 196617 "B";
#P inlet 130 46 15 0;
#P outlet 92 272 15 0;
#P fasten 5 0 4 0 117 113 55 113;
#P fasten 6 0 4 0 135 113 55 113;
#P connect 4 0 7 0;
#P fasten 3 1 4 1 177 130 72 130;
#P connect 7 0 8 0;
#P connect 7 1 8 0;
#P connect 8 0 9 0;
#P connect 9 0 12 0;
#P connect 12 0 0 0;
#P connect 7 0 5 0;
#P connect 1 0 3 0;
#P connect 3 0 6 0;
#P connect 9 0 10 0;
#P connect 10 0 11 0;
#P pop;
#P newobj 156 96 49 196617 p parseB;
#N vpatcher 589 252 861 563;
#P window setfont "Sans Serif" 9.;
#P comment 153 47 25 196617 "G";
#P newex 92 250 62 196617 fromsymbol;
#B color 5;
#P message 134 233 73 196617 718;
#P newex 134 213 62 196617 prepend set;
#B color 5;
#P newex 92 213 40 196617 itoa;
#B color 5;
#P newex 92 193 55 196617 zl group 4;
#P newex 50 160 52 196617 select 10;
#P message 130 88 14 196617 1;
#P message 112 88 14 196617 0;
#P newex 50 134 27 196617 gate;
#P newex 130 66 52 196617 select 71;
#P inlet 130 46 15 0;
#P outlet 92 272 15 0;
#P fasten 5 0 3 0 135 113 55 113;
#P fasten 4 0 3 0 117 113 55 113;
#P connect 3 0 6 0;
#P fasten 2 1 3 1 177 130 72 130;
#P connect 6 0 7 0;
#P connect 6 1 7 0;
#P connect 7 0 8 0;
#P connect 8 0 11 0;
#P connect 11 0 0 0;
#P connect 6 0 4 0;
#P connect 1 0 2 0;
#P connect 2 0 5 0;
#P connect 8 0 9 0;
#P connect 9 0 10 0;
#P pop;
#P newobj 106 96 49 196617 p parseG;
#P toggle 55 34 15 0;
#P hidden newex 55 52 46 196617 metro 2;
#P newex 55 72 71 196617 serial a 9600;
#B color 5;
#P window linecount 3;
#P comment 319 50 100 196617 Virtual Color Fader Most of the code by Jamie Allen;
#P connect 3 0 2 0;
#P connect 2 0 1 0;
#P connect 1 0 6 0;
#P connect 6 0 11 0;
#P connect 11 0 12 0;
#P fasten 12 0 10 0 60 298 60 298;
#P fasten 1 0 4 0 60 92 111 92;
#P fasten 4 0 13 0 111 243 111 243;
#P connect 13 0 14 0;
#P connect 14 0 10 1;
#P fasten 1 0 5 0 60 92 161 92;
#P fasten 5 0 15 0 161 243 161 243;
#P connect 15 0 16 0;
#P fasten 16 0 10 2 161 298 162 298;
#P fasten 6 0 9 0 60 129 172 129;
#P fasten 4 0 7 0 111 129 306 129;
#P fasten 5 0 8 0 161 129 443 129;
#P pop;

Arduino program:

int redPin = 0;
int greenPin = 1;
int bluePin = 2;
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.print("R");
  Serial.println(analogRead(redPin));
  Serial.print("G");
  Serial.println(analogRead(greenPin));
  Serial.print("B");
  Serial.println(analogRead(bluePin));
  delay(100);
}