컴플리트 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를 중복으로 썼는데, 하나 밖에 없으니 한 줄로 줄여도 되겠다.
그러고 보니 입력 종료 알리는 커맨드를 안 넣어줬네. 중복으로 놔둬야겠다.
안녕하세요. 펩시맨이라고 합니다.
재미있는 내용이 많네요. 관심있게 잘 보고 갑니다.
종종 들리겠습니다.
새해 복 많이 받으세요 ^^
앗 안녕하세요?
이리저리 검색하다 많은 도움을 받았던 홈페이지의 주인장이시군요. 새해 복 많이 받으세요.