아두이노를 이용한 MIDI 입력 패드 제작

컴플리트 MIDI 북을 보고 MIDI데이터 규격에 맞춰
아날로그 입력을 노트온벨러서티로 출력하도록 스케치를 작성했다.
아날로그 0번에 압력 감지 센서를 달고 그 값을 건반 누른 세기로 바꿔주면 끝나는 간단한 구조다

압력 감지 센서를 이용했지만, 가속도 센서를 이용하면 탬버린 등을 만들 수도 있을 것이며
다양한 센서를 이용해서 여러가지 음악 입력장치를 만들 수 있다.

—-

// Variables:
byte note = 35;            // 재생될 MIDI NOTE값
int AnalogValue = 0;      // 아날로그 입력값
byte noteOnVel = 0;        // 노트온벨러서티 값
boolean lastPlay = 0;     // 눌린상태 체크

void setup() {
   //  Set MIDI baud rate:
   Serial.begin(31250);
}

void loop() {

     AnalogValue = analogRead(0);  // 아날로그 입력 체크
     noteOnVel = AnalogValue/8;    // 1024->128로 변환

   if (noteOnVel > 0){    // 눌린 값이 있나?
    if(lastPlay==0){      // 기존에 눌리지 않았다면
     noteOn(0x90, note, noteOnVel); // 0채널 note값에 눌린값의 세기로 출력
     lastPlay = 1;          // 이미 눌렸다
    }
  } else {  // 손을 뗐으면 다시 리셋
    lastPlay = 0;


  }

  delay(5); //반응속도에 따라 값 조정 할 것.

}

//  plays a MIDI note.  Doesn't check to see that
//  cmd is greater than 127, or that data values are  less than 127:
void noteOn(byte cmd, byte data1, byte data2) {
   Serial.print(cmd, BYTE);
   Serial.print(data1, BYTE);
   Serial.print(data2, BYTE);
}

흠 여러 조건을 넣으려고 if를 중복으로 썼는데, 하나 밖에 없으니 한 줄로 줄여도 되겠다.
그러고 보니 입력 종료 알리는 커맨드를 안 넣어줬네. 중복으로 놔둬야겠다.

2 thoughts on “아두이노를 이용한 MIDI 입력 패드 제작”

  1. 안녕하세요. 펩시맨이라고 합니다.
    재미있는 내용이 많네요. 관심있게 잘 보고 갑니다.
    종종 들리겠습니다.
    새해 복 많이 받으세요 ^^

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.