GM drum pad demo program
使用機材
購入はこちら。
https://www.switch-science.com/catalog/1489/
https://www.switch-science.com/catalog/1966/
https://www.switch-science.com/catalog/1624/
接続(Capacitive Touch Keypadの場合)
LPCXpresso824-MAX | Capacitive Touch Keypad |
---|---|
GND | GND |
A4 | SDA |
A5 | SCL |
D2 | IRQ |
+3V3 | VCC |
接続(Touch Shieldの場合)
Touch Shieldに足の長いピンソケットを半田付けして、動画の様にそのままeVY1ボードに接続します。
制御について
MPR121から取得したタッチ情報を使用して、MIDIのノートオン、ノートオフをeVY1にシリアルで送信しています。ソースコード中の key_tbl[] の値を変更すれば、キーに割り当てた音色を変えることが出来ます。ドラム用音色はこちらを参考にして下さい。
Revision 1:db4dbd6734e6, committed 2016-03-18
- Comitter:
- MACRUM
- Date:
- Fri Mar 18 04:58:12 2016 +0000
- Parent:
- 0:771fd7f08681
- Commit message:
- * Extended number of keypads; * Added more drum percussion sound; * Fixed key hold error
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 771fd7f08681 -r db4dbd6734e6 main.cpp --- a/main.cpp Thu Mar 10 05:12:57 2016 +0000 +++ b/main.cpp Fri Mar 18 04:58:12 2016 +0000 @@ -30,25 +30,32 @@ I2C i2c(A4, A5); InterruptIn irq(D2); -#define LED_ON 0 -#define LED_OFF 1 +#define LED_ON 0 +#define LED_OFF 1 +#define NUM_PADS 12 MPR121 touch_pad(i2c, irq, MPR121::ADDR_VSS); RawSerial midi(D1, NC); -const int key_tbl[9] = { - 38, // 9 - 39, // 6 - 41, // 3 - 42, // 8 - 45, // 5 - 49, // 2 - 67, // 7 - 79, // 4 - 36, // 1 +const int key_tbl[NUM_PADS] = { + 38, // 0 Snare Drum 1 + 39, // 1 Hand Clap + 46, // 2 Open Hi-hat + 42, // 3 Closed Hi-hat + + 49, // 4 Crash Cymbal 1 + 48, // 5 High Tom 2 + 45, // 6 Mid Tom 2 + 41, // 7 Low Tom 2 + + 56, // 8 Cowbell + 51, // 9 Ride Cymbal 1 + 52, // 10 Chinese Cymbal + 36, // 11 Bass Drum 1 + }; -int key_pressed[9]; +int key_pressed[NUM_PADS]; int main() { @@ -58,10 +65,6 @@ midi.baud(31250); wait(3.5); // Wait few seconds for booting eVY1-Shleld. - // Initialize (Phonetic symbols - eVocaloid) - const uint8_t aMsgInit[] = "\xF0\x43\x79\x09\x00\x50\x10" "4 a\0" "\xF7"; - for (uint32_t i = 0; i < sizeof(aMsgInit)-1; midi.putc(aMsgInit[i++])); - const uint8_t aMsgVol[] = "\xB9\x07\x70"; for (uint32_t i = 0; i < sizeof(aMsgVol)-1; midi.putc(aMsgVol[i++])); @@ -69,7 +72,7 @@ if(touch_pad.isPressed()) { uint16_t button_val = touch_pad.buttonPressed(); if (button_val != 0) { - for(int i=0; i<9; i++) { + for(int i=0; i<NUM_PADS; i++) { if ((button_val & (1 << i))) { if (key_pressed[i] == 0) { midi.putc(0x99); // note on CH10 @@ -77,10 +80,12 @@ midi.putc(100); // velocity key_pressed[i] = 1; } + } else { + key_pressed[i] = 0; } } } else { - for(int i=0; i<9; i++) { + for(int i=0; i<NUM_PADS; i++) { if ((button_val & (1 << i)) == 0) { key_pressed[i] = 0; midi.putc(0x89); // note off CH10