Integrating Processing with Chuck with OSC

447 Views Asked by At

In processing I made a button "Play Amazing Notes" to send a signal to chuck(for playing notes) with OSC(open sound control),but when I run processing script it shows these error messages.


ControlP5 2.2.6 infos, comments, questions at http://www.sojamo.de/libraries/controlP5
play Note
Dec 04, 2016 11:47:23 PM controlP5.ControlBroadcaster printMethodError
SEVERE: An error occured while forwarding a Controller event, please check your code at playNote
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at controlP5.ControlBroadcaster.invokeMethod(Unknown Source)
    at controlP5.ControlBroadcaster.callTarget(Unknown Source)
    at controlP5.ControlBroadcaster.broadcast(Unknown Source)
    at controlP5.Controller.broadcast(Unknown Source)
    at controlP5.Button.setValue(Unknown Source)
    at Kandeze_SendOscMessage.createControls(Kandeze_SendOscMessage.java:51)
    at Kandeze_SendOscMessage.setup(Kandeze_SendOscMessage.java:34)
    at processing.core.PApplet.handleDraw(PApplet.java:2387)
    at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:871)
    at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
    at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
    at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
    at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
    at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
    at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
    at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
    at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
    at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
Caused by: java.lang.NullPointerException
    at Kandeze_SendOscMessage.playNote(Kandeze_SendOscMessage.java:61)
    ... 24 more
OscP5 0.9.8 infos, comments, questions at http://www.sojamo.de/oscP5


### [2016/12/4 23:47:23] PROCESS @ OscP5 stopped.
### [2016/12/4 23:47:23] PROCESS @ UdpClient.openSocket udp socket initialized.
### [2016/12/4 23:47:24] ERROR @ UdpServer.start()  IOException, couldnt create new DatagramSocket @ port 12000 java.net.BindException: Address already in use: Cannot bind
### [2016/12/4 23:47:24] INFO @ OscP5 is running. you (192.168.0.103) are listening @ port 12000

My Processing Code looks like this:

import controlP5.*;
import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress dest;
ControlP5 cp5;

void setup(){

  size(200,210,P3D);
  background(0);

  createControls();

  //setUp Osc sending
  oscP5 = new OscP5(this,12000);
  dest = new NetAddress("127.0.0.1",6449);

}

void draw(){
  background(0);
  smooth();
}

void createControls(){
  cp5 = new ControlP5(this);

  cp5.addButton("playNote")
      .setValue(0)
      .setCaptionLabel("Play Amazing Notes")
      .setPosition(10,10)
      .setSize(180,50);

}

void playNote(){
    println("play Note");
    OscMessage msg=new OscMessage("/playNote");
    oscP5.send(msg,dest);
}

And the Chuck code is:

Mandolin m=> dac;

OscIn oin;
OscMsg msg;
6448 => oin.port;

"/playNote" => oin.addAddress;

while(true){

    oin =>  now;
    while (oin.recv(msg))

    {
        msg.address @=> string address;
        if(msg.address=="/playNote")
        {
            Math.random2f(48,70) => float note;

            note => Std.mtof => m.freq;

            }

        }

    }
1

There are 1 best solutions below

0
On

You have to initialize OscP5 and NetAddress before creating the control.

void setup(){

  size(200,210,P3D);
  background(0);

  //setUp Osc sending
  oscP5 = new OscP5(this,12000);
  dest = new NetAddress("127.0.0.1",6448);

  //create controlls after the OSC setup
  createControls();

}

then the error goes away - (the cp5 button event handler has to know the oscP5 object)

Btw. you are using different ports in the processing code (6449) and chuck code (6448).

Obviously they have to be the same to make it work.

To actually hear the Mandoline playing in the chuck code it needs a noteOn call:

1.0 => m.noteOn;