프로세싱osc코드입니다.
마우스를 y축 방향으로 드레그하면 원이 커지고
x축 방향으로 드레그하면 원이 작아지고
마우스드레그 x,y값이 127.0.0.1주소의 8000번포트에
/PROC라는 라벨을 달고 전송하며,
/SC라는 테그가 달린 정수타입의 데이터를 7000번포트로 받는 예제입니다.

// import librires
import oscP5.*;  
import netP5.*;

// Osc를 활용하기 위한 인스턴스 선언
OscP5 sendData;   // osc_data를 보내고 수신하는 포트를 설정하는 인스턴스 sendData를 선언
NetAddress dataAddress; // 주소를 설정하는 dataAddress 인스턴스를 선언

void setup()
{
  size(500, 500);
  background(0);
  smooth();
 

  // 선언한 인스턴스를 메모리에 할당 + 셋업
  sendData = new OscP5(this, 7000); 
 // sendData라는 Osc인스턴스(보내는부분)설정 및 수신포트 포트를 7000번으로 설정
  dataAddress = new NetAddress("127.0.0.1", 8000); 
//dataAddress라는 인스턴스를 로컬호스트 8000번포트로 설정
}


void draw() {
}


//osc송신
void mouseDragged() {
  
background(0);
  float freq;
  float level;
  
  //OscMessage라는 변수를 선언(sendData에 얹어서 보낼 데이터)
  OscMessage data01;  //OscMessage타입의 data01라는 변수를 선언
  OscMessage data02; // OscMessage타입의 data02라는 변수를 선언
  
   //data01,02라는 OscMessage값을 메모리에 할당 + 셋업
  data01 = new OscMessage("/PROC"); 
  data02 = new OscMessage("/PROC2");
  
  freq = map(mouseY, 0.0, float(height-1), 20.0, 2000.0);
  level = map(mouseX, 0.0, float(width-1), 0.0, 1.0);
  
  // add data (array)
  data01.add(freq); // data01의 값 뒤에 freq라는 데이터를 붙임
  data01.add(level); // data01의 값 뒤에 level이라는 데이터를 붙임

  data02.add(freq);
  data02.add(level);

  // send data
  sendData.send(data01, dataAddress); //sendData라는 OscP5의 인스턴스에 data01이라는 값을 dataAddress로 전송
  sendData.send(data02, dataAddress);//sendData라는 OscP5의 인스턴스에 data02이라는 값을 dataAddress로 전송
  // println("freq : " + freq + " level : " +level);
  ellipse(width*0.5, mouseY, width*level, height*level);
}


//Osc수신
void oscEvent(OscMessage theOscMessage) {
  if (theOscMessage.checkAddrPattern("/SC") == true) { // /SC라벨이 있는지 체크
    if (theOscMessage.checkTypetag("i")) {  // 데이터의 타입을 체크 i:정수,f:소수,s:문자
      int firstvalue = theOscMessage.get(0).intValue(); // 어레이의 첫번째 정수데이터를 가져와 firstvale라는 변수에 대입
      println("message " + firstvalue);
    }
  }
}




Advertisements