정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

프로세싱 코드입니다...
오박사 | 2015-09-14

import processing.serial.*;
import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;

Minim minim = new Minim(this);

AudioSample playBangarang;

int wait;

int bangarang;


Serial myPort;

void setup(){
  println(Serial.list());
  myPort = new Serial(this, Serial.list()[2],9600);
  playBangarang = minim.loadSample("bangarang.wav");
 

}

void draw(){
 
  if(myPort.available() >=1) {     
    if(myPort.read() == '9') {
      bangarang = myPort.read();
    
    }
  }

  background(255);
  print(bangarang);
  print(" ");


  if(bangarang > 0)
   playBangarang.trigger();
 
}

 

코드 수정을 했는데여

 

실행 되는것을 보니 코드자체는 오류가 없는듯 합니다...

저기 밑줄이 좀걸리네요...

밑줄 부분에 이러한 매세지가 뜹니다.

일단 제생각대로 수정했는데 소리가 나오지않네요 궁금한 점이있습니다.

1. 버튼이 36개인데 각각 신호를 보내주는 코드는 어느부분인가요

2. 음악파일은 wav파일인데 상관없나요?

3. 음원파일의 저장은 어느곳에다 넣어야하나요 현재는 소스파일 폴더안에 저장햇습니다.

 

프로젝트 완성이 곧인데 여기서 막히네요...

 

프로필사진

수박쨈 2015-09-14 14:05:11

 if(myPort.read() == '9') 이 부분은 제가 종이 피아노 만들때 임의로 넣은 값인데 제작하신 스케치 파일에서도 9라는 값을 보내나요??

 

종이피아노 만들 때 9라는 값이 들어오면 그 뒤에 오는 값이 도레미파솔라시도에 해당하는 값이 온다는 신호값 정도로 지정하여 사용했는데(종이 피아노 소스를 보면 스케치부분에서 상단부에 byte ch = '9'; 값을 볼 수 있고 스케치 하단에서는 ch값을 먼저 보낸뒤에 도레미파솔라시도 값을 보내는것을 볼 수 있습니다)

 저 소스는 스케치에서 '9'라는 값이 들어오면 그냥 사용하셔도 되고 아니라면 삭제해도 무방합니다.

 

각각 신호를 보내주는 부분이 무슨말인지는 모르겠네요. 만약에 버튼1을 눌렀을 경우 1이라는 값이 전달되고 버튼2가 눌리면 2라는 값이 전달되고 이런식으로 스케치와 프로세싱을 맞추면 될 듯 합니다.

 

wav파일도 재생 가능합니다.

 

종이 피아노 프로젝트에도 적었지만 음원파일은 프로세싱 파일이 존재하는 디렉토리에 옮겨놓으시면 됩니다.

프로필사진

오박사 2015-09-14 14:45:30

스케치코드에서 버튼1을 누르면 변수 b1 의 값이 1, 버튼2를 누르면 변수 b2의 값이 1  누르지않을경우 0으로 다 초기화 시켰는데요

이렇게 설정하면 각각 제어를 못할까요? b1 은 1    b2는 2      b3은 3 이렇게 해야하나요??

프로필사진

오박사 2015-09-14 14:46:14

마지막에

  if(bangarang > 0)
   playBangarang.trigger();
  

이부분은 무엇인가요?

코드를 아예 전부 이해를 못하겠네요...

프로필사진

오박사 2015-09-14 14:48:33

저기 오류도 신경쓰이네요 흐허헝...ㅠ

프로필사진

수박쨈 2015-09-14 15:34:58

playBangarang.trigger(); 부분은 지정한 음원파일을 실행하는 부분입니다.

if(bangarang > 0)
   playBangarang.trigger();

위 부분은 bangarang이 0보다 클 경우 위에서 지정한 음원파일(playBangarang = minim.loadSample("bangarang.wav");)을 실행시키는 구문입니다.

음원을 실행시키려면 실행시키기 위한 조건이 있어야겠죠. 위 소스 모든 값이 1로 오면 프로세싱에서는 어느 버튼이 눌렸는지 알 수 없습니다. 버튼마다 각각 고유한 값을 가지고있어야 구분할 수 있습니다.

프로필사진

오박사 2015-09-14 16:17:05

너무귀찮게 해드려서 죄송합니다..

import processing.serial.*;
 import ddf.minim.spi.*;
 import ddf.minim.signals.*;
 import ddf.minim.*;
 import ddf.minim.analysis.*;
 import ddf.minim.ugens.*;
 import ddf.minim.effects.*;

Minim minim = new Minim(this);

AudioSample playBangarang;

int wait;

int bangarang;


 Serial myPort;

void setup(){
   println(Serial.list());
   myPort = new Serial(this, Serial.list()[2],9600);
   playBangarang = minim.loadSample("bangarang.wav");
 

}

void draw(){
 
   if(myPort.available() >=1) {    

       bangarang = myPort.read();
    
    
   }

  background(255);
   print(bangarang);
   print(" ");


   if(bangarang > 0)
    playBangarang.trigger();
 
 }

 

프로세싱 코드는 이러한데요 bangarang.wav라는파일이 프로세싱 파일 폴더내에 저장되어있습니다.

아두이노 스케치에서는 Serial.write(b[1]); 으로 버튼 1을 누르면 1을 전송게끔 했습니다.

그래서 시험삼아 1번 버튼을 누르면 bangarang.wav 음원이 재생되게하려했는데요....

이부분에 오류가 난다는데 파일이름이 틀린것도 아니고 왜 오류가 나는지 모르겠습니다..

오류 매세지 입니다.

으으 너무 감사하고 죄송합니다. 완성되면 꼭 프로젝트란에 올리겠습니다

프로필사진

수박쨈 2015-09-14 18:16:49

그 음원의 포맷을 자바 사운드에서 실행을 못시키는거 같은데 minim의 버전을 보시고 한번 minim의 버전을 업그레이드 해보세요.

http://code.compartmental.net/tools/minim/

 

아래 링크는 개인이 올린 링크인데 똑같은에러가 떠서 해결하기 위해 올린듯 합니다.

https://github.com/ddf/Minim

 

이전글   |    무인 트랙터 2015-09-14
다음글   |    오렌지 보드 BLE 에서 2015-09-15