Processing to communicate with Pd
hey Arif, thanks for the reply. I have input what I think is right. Still no joy. Now it is disagreeing with CoordsCalc. I have included the code. I already had some of the things from the example. I think I just need to add integers but I dont know how or what to put.
import processing.video.*;
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
Capture video;
int numPixels; // number of pixels in the video
int rectDivide = 4; // the stage width/height divided by this number is the video width/height
int vidW; // video width
int vidH; // video height
int[][] colouredPixels; // the different colour references for each pixel
int[][] colourCompareData; // captured r, g and b colours
int currR; //
int currG; //
int currB; //
int[][] squareCoords; // x, y, w + h of the coloured areas
color[] colours; // captured colours
int colourRange = 25; // colour threshold
int[][] centrePoints; // centres of the coloured squares
color[] pixelColours;
boolean isShowPixels = false; // determines whether the square and coloured pixels are displayed
int colourMax = 2; // max amount of colours - also adjust the amount of colours added to pixelColours in setup()
int coloursAssigned = 0; // amount of cours currently assigned
CoordsCalc coordsCalc;
void setup()
{
size(640, 480);
vidW = width / rectDivide;
vidH = height / rectDivide;
video = new Capture(this, vidW, vidH, 30);
noStroke();
numPixels = vidW * vidH;
colouredPixels = new int[vidH][vidW];
colourCompareData = new int[colourMax][3];
squareCoords = new int[colourMax][4];
colours = new color[colourMax];
centrePoints = new int[colourMax][2];
color c1 = color(0, 255, 0);
color c2 = color(255, 0, 0);
pixelColours = new color[colourMax];
pixelColours[0] = color(0, 255, 0);
pixelColours[1] = color(255, 0, 0);
coordsCalc = new CoordsCalc();
oscP5 = new OscP5(this, 12000);
myRemoteLocation = new NetAddress("127.0.0.1", 12000);
}
void captureEvent(Capture video)
{
video.read();
}
void draw()
{
noStroke();
fill(255, 255, 255);
rect(0, 0, width, height);
drawVideo();
coordsCalc.update();
for (int i = 0; i < coloursAssigned; i++)
{
if (isShowPixels) drawSquare(i);
}
background(0);
}
void mousePressed() {
/* in the following different ways of creating osc messages are shown by example */
OscMessage myMessage = new OscMessage("/test");
myMessage.add(colourLocation); /* add an int to the osc message */
myMessage.add(colourLocation);
/* send the message */
oscP5.send(myMessage, myRemoteLocation);
}
/* incoming osc message are forwarded to the oscEvent method. */
void oscEvent(OscMessage theOscMessage) {
/* print the address pattern and the typetag of the received OscMessage */
print("### received an osc message.");
print(" addrpattern: "+theOscMessage.addrPattern());
println(" typetag: "+theOscMessage.typetag());
}
}
void drawVideo()
{
for (int i = 0; i < coloursAssigned; i++)
{
fill(colours_);
rect(i * 10, vidH, 10, 10);
}
image(video, 0, 0);
noFill();
stroke(255, 0, 0);
strokeWeight(2);
rect(vidW - 4, vidH - 4, 4, 4);
}
void drawSquare(int 
{
int sqX = squareCoords_[0];
int sqY = squareCoords_[1];
int sqW = squareCoords_[2];
int sqH = squareCoords_[3];
noFill();
stroke(0, 0, 255);
strokeWeight(3);
rect(sqX, sqY, sqW, sqH);
//stroke(0, 0, 255);
//strokeWeight(4);
rect(sqX * rectDivide, sqY * rectDivide, sqW * rectDivide, sqH * rectDivide);
line(sqX * rectDivide, sqY * rectDivide, ((sqX * rectDivide) + (sqW * rectDivide)), ((sqY * rectDivide) + (sqH * rectDivide)));
line(((sqX * rectDivide) + (sqW * rectDivide)), sqY * rectDivide, sqX * rectDivide, (sqY * rectDivide + sqH * rectDivide));
}
void keyPressed()
{
println("key pressed = " + key);
color currPixColor = video.pixels[numPixels - (vidW * 2) - 3];
int pixR = (currPixColor >> 16) & 0xFF;
int pixG = (currPixColor >>
& 0xFF;
int pixB = currPixColor & 0xFF;
if (key == 'p')
{
isShowPixels = !isShowPixels;
}
if (key == '1')
{
coloursAssigned = 1;
colourCompareData[0][0] = pixR;
colourCompareData[0][1] = pixG;
colourCompareData[0][2] = pixB;
colours[0] = color(pixR, pixG, pixB);
}
if (colourMax < 2 || coloursAssigned < 1) return;
if (key == '2')
{
coloursAssigned = 2;
colourCompareData[1][0] = pixR;
colourCompareData[1][1] = pixG;
colourCompareData[1][2] = pixB;
colours[1] = color(pixR, pixG, pixB);
}
if (key == '0')
{
coloursAssigned = 0;
}
}_____
Open DMX external?
hi there
i followed the different forum post on getting the enttec open dmx usb to work in ubuntu and pd.
so far i downloaded the dmx4linux-2.6 package
extracting it ok
patching it ok
./configure ok
make gives me this result:
make -C libs all
make[1]: Betrete Verzeichnis '/home/maik/externals/dmx4linux-2.6.1/libs'
cc -c -o open.o open.c
cc -c -o sleep.o sleep.c
ar rcs libdmx4l.a open.o sleep.o
cc -fPIC -c -o open.lo open.c
cc -fPIC -c -o sleep.lo sleep.c
cc -shared -Wl,-soname,libdmx4l.so.2 -o libdmx4l.so.2.5 open.lo sleep.lo -lc
ln -sf libdmx4l.so.2.5 libdmx4l.so.2
ln -sf libdmx4l.so.2 libdmx4l.so
make[1]: Verlasse Verzeichnis '/home/maik/externals/dmx4linux-2.6.1/libs'
make -C tools all
make[1]: Betrete Verzeichnis '/home/maik/externals/dmx4linux-2.6.1/tools'
cc -Ipointer -Wall -O2 -I/home/maik/externals/dmx4linux-2.6.1/include -c -o dmxtest.o dmxtest.c
dmxtest.c: In Funktion »Reader«:
dmxtest.c:65: Warnung: Der Rückgabewert von »fgets«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert
dmxtest.c: In Funktion »Writer«:
dmxtest.c:143: Warnung: Der Rückgabewert von »fgets«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert
cc -L/home/maik/externals/dmx4linux-2.6.1/libs -o dmxtest dmxtest.o -ldmx4l
cc -Ipointer -Wall -O2 -I/home/maik/externals/dmx4linux-2.6.1/include -c -o midi2dmx.o midi2dmx.c
midi2dmx.c: In Funktion »DMXput«:
midi2dmx.c:246: Warnung: Der Rückgabewert von »write«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert
midi2dmx.c:254: Warnung: Der Rückgabewert von »write«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert
midi2dmx.c: In Funktion »reset«:
midi2dmx.c:297: Warnung: Der Rückgabewert von »write«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert
cc -L/home/maik/externals/dmx4linux-2.6.1/libs -o midi2dmx midi2dmx.o -ldmx4l
cc -Ipointer -Wall -O2 -I/home/maik/externals/dmx4linux-2.6.1/include -c -o uart_dmxd.o uart_dmxd.c
cc -L/home/maik/externals/dmx4linux-2.6.1/libs -o uart_dmxd uart_dmxd.o -ldmx4l
cc -Ipointer -Wall -O2 -I/home/maik/externals/dmx4linux-2.6.1/include -c -o dmxconsole.o dmxconsole.c
dmxconsole.c:19:20: Fehler: curses.h: No such file or directory
dmxconsole.c: In Funktion »mask«:
dmxconsole.c:138: Warnung: Implizite Deklaration der Funktion »erase«
dmxconsole.c:141: Warnung: Implizite Deklaration der Funktion »attrset«
dmxconsole.c:142: Warnung: Implizite Deklaration der Funktion »move«
dmxconsole.c:143: Fehler: »COLS« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:143: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
dmxconsole.c:143: Fehler: für jede Funktion in der er auftritt.)
dmxconsole.c:144: Warnung: Implizite Deklaration der Funktion »addch«
dmxconsole.c:148: Fehler: »LINES« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:161: Warnung: Implizite Deklaration der Funktion »printw«
dmxconsole.c: In Funktion »values«:
dmxconsole.c:199: Fehler: »COLS« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:207: Warnung: Implizite Deklaration der Funktion »mvprintw«
dmxconsole.c:249: Fehler: »LINES« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:263: Warnung: Implizite Deklaration der Funktion »attron«
dmxconsole.c:263: Fehler: »A_REVERSE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:268: Warnung: Implizite Deklaration der Funktion »addstr«
dmxconsole.c: In Funktion »crossfade«:
dmxconsole.c:362: Warnung: Implizite Deklaration der Funktion »refresh«
dmxconsole.c: In Funktion »load«:
dmxconsole.c:404: Warnung: Der Rückgabewert von »fread«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert
dmxconsole.c: In Funktion »changepalette«:
dmxconsole.c:470: Warnung: Implizite Deklaration der Funktion »init_pair«
dmxconsole.c:470: Fehler: »COLOR_BLACK« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:470: Fehler: »COLOR_CYAN« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:471: Fehler: »COLOR_GREEN« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:472: Fehler: »COLOR_WHITE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:473: Fehler: »COLOR_BLUE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:474: Fehler: »COLOR_RED« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:476: Fehler: »COLOR_YELLOW« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:492: Warnung: Implizite Deklaration der Funktion »COLOR_PAIR«
dmxconsole.c:503: Fehler: »A_REVERSE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:504: Fehler: »A_BOLD« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:505: Fehler: »A_NORMAL« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c: In Funktion »calcscreengeometry«:
dmxconsole.c:536: Fehler: »COLS« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:543: Fehler: »LINES« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c: Auf höchster Ebene:
dmxconsole.c:566: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »*« token
dmxconsole.c: In Funktion »pointerevent«:
dmxconsole.c:613: Fehler: »KEY_UP« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:616: Fehler: »KEY_DOWN« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:620: Fehler: »KEY_LEFT« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:623: Fehler: »KEY_RIGHT« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:627: Fehler: »KEY_PPAGE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:630: Fehler: »KEY_NPAGE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c: Auf höchster Ebene:
dmxconsole.c:636: Fehler: expected »)« before »a«
dmxconsole.c: In Funktion »cleanup«:
dmxconsole.c:648: Fehler: »w« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:650: Warnung: Implizite Deklaration der Funktion »resetty«
dmxconsole.c:651: Warnung: Implizite Deklaration der Funktion »endwin«
dmxconsole.c: In Funktion »main«:
dmxconsole.c:793: Fehler: »w« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:793: Warnung: Implizite Deklaration der Funktion »initscr«
dmxconsole.c:800: Warnung: Implizite Deklaration der Funktion »savetty«
dmxconsole.c:801: Warnung: Implizite Deklaration der Funktion »start_color«
dmxconsole.c:802: Warnung: Implizite Deklaration der Funktion »noecho«
dmxconsole.c:803: Warnung: Implizite Deklaration der Funktion »raw«
dmxconsole.c:804: Warnung: Implizite Deklaration der Funktion »keypad«
dmxconsole.c:804: Fehler: »TRUE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:811: Fehler: »mmask_t« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:811: Fehler: expected »;« before »m«
dmxconsole.c:812: Warnung: Implizite Deklaration der Funktion »mousemask«
dmxconsole.c:812: Fehler: »BUTTON1_PRESSED« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:812: Fehler: »BUTTON2_PRESSED« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:812: Fehler: »BUTTON3_PRESSED« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:812: Fehler: »BUTTON4_PRESSED« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:812: Fehler: »REPORT_MOUSE_POSITION« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:812: Fehler: »m« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:813: Warnung: Implizite Deklaration der Funktion »mouseinterval«
dmxconsole.c:855: Warnung: Implizite Deklaration der Funktion »wgetch«
dmxconsole.c:961: Fehler: »KEY_PPAGE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:979: Fehler: »KEY_NPAGE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1012: Fehler: »KEY_HOME« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1018: Fehler: »KEY_END« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1026: Fehler: »KEY_RIGHT« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1031: Fehler: »KEY_LEFT« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1036: Fehler: »KEY_DOWN« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1047: Fehler: »KEY_UP« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1059: Fehler: »KEY_IC« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1066: Fehler: »KEY_DC« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1129: Warnung: Implizite Deklaration der Funktion »KEY_F«
dmxconsole.c:1129: Fehler: case-Marke reduziert nicht auf Ganzzahlkonstante
dmxconsole.c:1133: Fehler: case-Marke reduziert nicht auf Ganzzahlkonstante
dmxconsole.c:1137: Fehler: »KEY_MOUSE« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1139: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »oldevent«
dmxconsole.c:1139: Fehler: »oldevent« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1140: Fehler: »MEVENT« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1140: Fehler: expected »;« before »event«
dmxconsole.c:1141: Warnung: Implizite Deklaration der Funktion »getmouse«
dmxconsole.c:1141: Fehler: »event« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1141: Fehler: »OK« nicht deklariert (erste Benutzung in dieser Funktion)
dmxconsole.c:1141: Warnung: Implizite Deklaration der Funktion »meventcmp«
dmxconsole.c:1184: Warnung: Implizite Deklaration der Funktion »resizeterm«
make[1]: *** [dmxconsole.o] Fehler 1
make[1]: Verlasse Verzeichnis '/home/maik/externals/dmx4linux-2.6.1/tools'
make: *** [all] Fehler 2
any suggestions? something with dmxconsole?
i'm really not into all the programming stuff so i basically need everything step by step.
hope someone can help
greets uisel
Slow-change visualization of audio signal
sunji: I believe it's iemlib... That's what it says in the help file.
arif: I know your pain... In fact, that's how I did it the first time. However, it depends to a large extent on the music you play - if you relay only on the composite amplitude, you might find out that if you cover the whole spectrum (e.g. green is very quiet and red is very loud) you get various colors only in very dynamic pieces. Otherwise it is red all the time (or another color, if you shift the spectrum).
On the other hand, if you apply the spectrum to a section between the limits (i.e. green is moderately loud and red is very loud), the shifts might be much too drastic (i.e. "disco").
In other words, if you get the perfect setting for one piece of music, it is very likely that it will be messed up for another. Which gave me an excellent idea to use dynamic mins and maxes for each fragment (piece of music starting with longer silence? each play instance?), but it might be hard to pull off...
Basic Synesthesia
You'll have to pardon me as I've just started working with PD but my question should be fairly easy to answer...
I'm working on a patch that will allow midi 'notes' (from a midi keyboard) to trigger rgb values. From my beginners perspective the easiest way to do this is to have the values from the lowest note to the highest note read a table/array of rgb values which are then sent to GEM so that each note always corresponds to the same rgb value. The nice thing about this is that I can set the table to read different arrays so that i can switch between different 'color schemes'.
Unfortunately i cannot figure out a way to arrange rgb values in a table that can then be routed to the message: which i have been using in previous patches to control the color of my GEM Objects. I can't seem to find anything that explains in detail or example the color objects and messages related to GEM.
Also for later patches that may involve multiple objects paired to polyphonic midi notes this seem like the wrong way to approach this patch.
Also, could i just create a trigger that send out a bang according to the numbers from my [notein] object
PureData's patchfile format
@from said:
Color: Some graphical elements have color attributes. Per color only one signed integer value is stored that contains the three 8-bit color // components (RGB). Formula to calculate color attribute values:
color = ( * -65536) + ( [green] * -256) + ( [blue] * -1)
Where [red], [green], [blue] obviously represent the three color components, their values range from 0 to 255. They apply to the attributes [background color], [front color], [label color] of various elements.
my notes on the matter:
I discovered that this formula did not produce the same values that were being in produced in the file. After a frustrating investigation into the discrepency, I realized that Pd color component values are not stored as 8-bit values. For some reason Pd scales these values down to 6-bit values. I am not sure why 6-bit values instead of 8-bit; it does not make much sense to me. The following formula produces accurate results to +/- 1 tolerance:
color = (([red]/-4 * 2^12) +([green]/-4 * 2^6) +([blue]*-1)
I am not sure why the result of this ends up one number off. I think it has to do with integer numbers being rounded when divided by four.
If you convert the decimal representation of the the RGB triplet to hexadecimal, and take the 5 least significant nibbles of that hexadecimal number, and convert each of those nibbles to binary, you can extract the 6-bit values. A binary representation looks like this:
xxrr rrrr gggg ggbb bbbb,
where each letter represents one bit. The six r's, six g's, and six b's obviously refer to the 6-bit red, green and blue values.[/blue][/green][/red][/blue][/green][/red][/blue][/green]
Color values in Pd files
according to the Unofficial Pd v0.37 fileformat specification by Simon Asselbergs and Tjeerd Sietsma at http://student-kmt.hku.nl/~tjeerd/pd/pd_fileformat.html, colors (for canvases, labels, etc) are stored in the Pd file according to the following scheme:
"Color: Some graphical elements have color attributes. Per color only one signed integer value is stored that contains the three 8-bit color components (RGB).
Formula to calculate color attribute values:
color = ( * -65536) + ( [green] * -256) + ( [blue] * -1) "
this isn't working for me though. does anyone know how colors are stored in the file. i imagine the calculation is something like this but with different numbers. i've been trying to figure this out for hours and have had no luck. hopefully i can figure this out soon.[/blue][/green]