Search code examples
processingsyphon

Using Syphon Send Frames for MADMAPPER


I am having trouble sending a sketch through Syphon to Madmapper. The regular "send frames" sketch works, but when I try to incorporate the parameters to my sketch, the visualization doesn't show.

Please take a look at my code and let me know what am I doing wrong:

   //Final Project
import codeanticode.syphon.*;


float rotation=0.1;
int num = 100, frms = 320;
float theta, time;
long rs; 
PGraphics canvas;
SyphonServer server;

//long: Use this datatype when you need a number to have a greater magnitude than can be 
//stored within an int.

void setup () {
  size(800, 800, P2D);
  canvas = createGraphics(800, 800, P2D);
  loop();
  server = new SyphonServer(this, "sublime");
};


void draw() {

  background(0);

canvas.beginDraw();
canvas.smooth();
  noStroke();
  fill(255, 255, 255, 20);
  rect(mouseX, mouseY, 50, 50);

  time = (frameCount % frms)/float(frms);
  paintQuads(); 
  theta += 2/TWO_PI/frms;
}



void paintQuads() {
  for (int i=0; i<num; i++) {
    fill(0);
    stroke(255);
    float r = random(-.5, .5);
    float sz = random(5, 15);
    resetMatrix(); //  Replaces the current matrix with the identity matrix. 
    // This effectively clears all transformation functions set before it.



    //multiply the quads

    //Translate
    //Specifies an amount to displace objects within the display window. 
    //The x parameter specifies left/right translation, the y parameter specifies up/down
    //translation, and the z parameter specifies translations toward/away from the screen. 
    //Using this function with the z parameter requires using P3D as a parameter in 
    //combination with size as shown in the above example. 


    translate(random(width), random(height));
    rotate(r);
    rotate(rotation); 

    //images

    noStroke();

    fill(255, 0, 0, 70);
    quad(38, 31, 86, 20, 69, 63, 30, 76);

    fill(255, 210, 0, 10);
    quad(width-9, height-9, 86, 20, 69, 63, 30, 76);

    fill(255, 0, 0, 30);
    ellipse(36, 36, 16, 16);

    fill(50, 46, 100, 20 );
    quad(46, 20, 14, 14, 46, 20, 14, 14);

    fill(50, 46, 100, 75);
    quad(50, 0, 12, 12, 50, 0, 12, 12);

    rotation=rotation+0.5;
  }
  canvas.endDraw();
  image(canvas, 0, 0);
  //send canvas to Syphon
  server.sendImage(canvas);
}

Thank you! -k


Solution

  • It seems you are not using the PGraphics instance properly: some calls use it, some draw into the main sketch, but not the canvas PGraphics which is what you send to Syphon.

    One quick fix is to call server.sendScreen(); instead of server.sendImage();

    This way what is see in Processing is what you see in MadMapper via Syphon: syphon mad mapper preview

    Alternatively you can fix your PGraphics calls:

    //Final Project
    import codeanticode.syphon.*;
    
    
    float rotation=0.1;
    int num = 100, frms = 320;
    float theta, time;
    long rs; 
    PGraphics canvas;
    SyphonServer server;
    
    //long: Use this datatype when you need a number to have a greater magnitude than can be 
    //stored within an int.
    
    void setup () {
      size(800, 800, P2D);
      canvas = createGraphics(800, 800, P2D);
      loop();
      server = new SyphonServer(this, "sublime");
    };
    
    
    void draw() {
    
      background(0);
    
      canvas.beginDraw();
      canvas.smooth();
      canvas.background(0);
      noStroke();
      fill(255, 255, 255, 20);
      rect(mouseX, mouseY, 50, 50);
    
      time = (frameCount % frms)/float(frms);
      paintQuads(canvas); 
      theta += 2/TWO_PI/frms;
    
      canvas.endDraw();
      image(canvas,0,0);
      server.sendImage(canvas);
    }
    
    
    
    void paintQuads(PGraphics g) {
      for (int i=0; i<num; i++) {
        g.fill(0);
        g.stroke(255);
        float r = random(-.5, .5);
        float sz = random(5, 15);
        g.resetMatrix(); //  Replaces the current matrix with the identity matrix. 
        // This effectively clears all transformation functions set before it.
    
    
    
        //multiply the quads
    
        //Translate
        //Specifies an amount to displace objects within the display window. 
        //The x parameter specifies left/right translation, the y parameter specifies up/down
        //translation, and the z parameter specifies translations toward/away from the screen. 
        //Using this function with the z parameter requires using P3D as a parameter in 
        //combination with size as shown in the above example. 
    
    
        g.translate(random(width), random(height));
        g.rotate(r);
        g.rotate(rotation); 
    
        //images
    
        g.noStroke();
    
        g.fill(255, 0, 0, 70);
        g.quad(38, 31, 86, 20, 69, 63, 30, 76);
    
        g.fill(255, 210, 0, 10);
        g.quad(width-9, height-9, 86, 20, 69, 63, 30, 76);
    
        g.fill(255, 0, 0, 30);
        g.ellipse(36, 36, 16, 16);
    
        g.fill(50, 46, 100, 20 );
        g.quad(46, 20, 14, 14, 46, 20, 14, 14);
    
        g.fill(50, 46, 100, 75);
        g.quad(50, 0, 12, 12, 50, 0, 12, 12);
    
        rotation=rotation+0.5;
      }
    
      //  image(canvas, 0, 0);
      //send canvas to Syphon
    
      //  server.sendScreen();
    }
    

    Or if PGraphics is confusing to use for now, skip it altogether and send the screen:

    //Final Project
    import codeanticode.syphon.*;
    
    
    float rotation=0.1;
    int num = 100, frms = 320;
    float theta, time;
    long rs; 
    
    SyphonServer server;
    
    //long: Use this datatype when you need a number to have a greater magnitude than can be 
    //stored within an int.
    
    void setup () {
      size(800, 800, P2D);
      smooth();
    
      server = new SyphonServer(this, "sublime");
    };
    
    
    void draw() {
    
      background(0);
    
      noStroke();
      fill(255, 255, 255, 20);
      rect(mouseX, mouseY, 50, 50);
    
      time = (frameCount % frms)/float(frms);
      paintQuads(); 
      theta += 2/TWO_PI/frms;
    
      server.sendScreen();
    }
    
    
    
    void paintQuads() {
      for (int i=0; i<num; i++) {
        fill(0);
        stroke(255);
        float r = random(-.5, .5);
        float sz = random(5, 15);
        resetMatrix(); //  Replaces the current matrix with the identity matrix. 
        // This effectively clears all transformation functions set before it.
    
    
    
        //multiply the quads
    
        //Translate
        //Specifies an amount to displace objects within the display window. 
        //The x parameter specifies left/right translation, the y parameter specifies up/down
        //translation, and the z parameter specifies translations toward/away from the screen. 
        //Using this function with the z parameter requires using P3D as a parameter in 
        //combination with size as shown in the above example. 
    
    
        translate(random(width), random(height));
        rotate(r);
        rotate(rotation); 
    
        //images
    
        noStroke();
    
        fill(255, 0, 0, 70);
        quad(38, 31, 86, 20, 69, 63, 30, 76);
    
        fill(255, 210, 0, 10);
        quad(width-9, height-9, 86, 20, 69, 63, 30, 76);
    
        fill(255, 0, 0, 30);
        ellipse(36, 36, 16, 16);
    
        fill(50, 46, 100, 20 );
        quad(46, 20, 14, 14, 46, 20, 14, 14);
    
        fill(50, 46, 100, 75);
        quad(50, 0, 12, 12, 50, 0, 12, 12);
    
        rotation=rotation+0.5;
      }
    }