首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chuck与OSC的集成处理

Chuck与OSC的集成处理
EN

Stack Overflow用户
提问于 2016-12-04 19:05:14
回答 1查看 385关注 0票数 1

在处理过程中,我制作了一个按钮"Play Amazing“,以向使用OSC(打开声音控制)的chuck(播放音符)发送一个信号,但是当我运行处理脚本时,它会显示这些错误消息。

代码语言:javascript
复制
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

我的处理代码如下所示:

代码语言:javascript
复制
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);
}

查克的代码是:

代码语言:javascript
复制
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;

            }

        }

    }
EN

回答 1

Stack Overflow用户

发布于 2016-12-17 16:16:48

在创建控件之前,必须初始化OscP5和NetAddress。

代码语言:javascript
复制
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();

}

然后错误就消失了-( cp5按钮事件处理程序必须知道oscP5对象)

顺便说一句。您正在处理代码(6449)和查克代码(6448)中使用不同的端口。

显然,它们必须是相同的,才能发挥作用。

要想真正地听到曼多林在恰克代码中播放,它需要一个noteOn调用:

1.0 => m.noteOn;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40962459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档