A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.

Dependencies:   mbed USBDevice PinDetect

Committer:
ndelfino
Date:
Thu Apr 14 03:00:08 2016 +0000
Revision:
11:f65806ee5833
Parent:
8:deaedb59243e
Child:
17:55e6132c54a8
I can handle any and all keys passed in. Anything. Try me bro.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ndelfino 3:8f80e267a80d 1 #include "mbed.h"
ndelfino 8:deaedb59243e 2 #include "LEDController.h"
ndelfino 3:8f80e267a80d 3
ndelfino 3:8f80e267a80d 4 DigitalOut myled1_1(p5);
ndelfino 3:8f80e267a80d 5 DigitalOut myled1_2(p6);
ndelfino 3:8f80e267a80d 6 DigitalOut myled1_3(p7);
ndelfino 3:8f80e267a80d 7
ndelfino 4:bb9f50305401 8 DigitalOut myled2_1(p8);
ndelfino 4:bb9f50305401 9 DigitalOut myled2_2(p9);
ndelfino 4:bb9f50305401 10 DigitalOut myled2_3(p10);
ndelfino 4:bb9f50305401 11
ndelfino 4:bb9f50305401 12 DigitalOut myled3_1(p11);
ndelfino 4:bb9f50305401 13 DigitalOut myled3_2(p12);
ndelfino 4:bb9f50305401 14 DigitalOut myled3_3(p13);
ndelfino 4:bb9f50305401 15
ndelfino 4:bb9f50305401 16 DigitalOut myled4_1(p14);
ndelfino 4:bb9f50305401 17 DigitalOut myled4_2(p15);
ndelfino 4:bb9f50305401 18 DigitalOut myled4_3(p16);
ndelfino 3:8f80e267a80d 19
ndelfino 8:deaedb59243e 20 void identifyKeyForLed(int key, int type);
ndelfino 11:f65806ee5833 21 void chooseLedForKey(int colors[3], int type, int signature, int key);
ndelfino 11:f65806ee5833 22 void setLedToKey(int colors[3], int type, int signature, int led, int key);
ndelfino 4:bb9f50305401 23
ndelfino 4:bb9f50305401 24 //These are the notes numbers and RGB values.
ndelfino 8:deaedb59243e 25 //int noteC[] = {24,0,0,0};
ndelfino 8:deaedb59243e 26 //int noteD[] = {26,1,0,0};
ndelfino 8:deaedb59243e 27 //int noteE[] = {16,0,1,0};
ndelfino 8:deaedb59243e 28 //int noteF[] = {17,0,0,1};
ndelfino 8:deaedb59243e 29 //int noteG[] = {32,1,1,0};
ndelfino 8:deaedb59243e 30 //int noteA[] = {34,0,1,1};
ndelfino 8:deaedb59243e 31 //int noteB[] = {36,1,1,1};
ndelfino 4:bb9f50305401 32
ndelfino 8:deaedb59243e 33 //A larger array of all the keys to be iterated over.
ndelfino 8:deaedb59243e 34 //int keys[7][4] = {noteC, noteD, noteE, noteF, noteG, noteA, noteB};
ndelfino 11:f65806ee5833 35 int colors[12][3] = {{0,0,0},{0,0,0},{1,0,0},{1,0,0},{0,1,0},{0,0,1},{0,0,1},{1,1,0},{1,1,0},{0,1,1},{0,1,1},{1,1,1}};
ndelfino 11:f65806ee5833 36
ndelfino 4:bb9f50305401 37
ndelfino 11:f65806ee5833 38 int keys[11][12] = {{0,1,2,3,4,5,6,7,8,9,10,11},
ndelfino 11:f65806ee5833 39 {12,13,14,15,16,17,18,19,20,21,22,23},
ndelfino 11:f65806ee5833 40 {24,25,26,27,28,29,30,31,32,33,34,35},
ndelfino 11:f65806ee5833 41 {36,37,38,39,40,41,42,43,44,45,46,47},
ndelfino 11:f65806ee5833 42 {48,49,50,51,52,53,54,55,56,57,58,59},
ndelfino 11:f65806ee5833 43 {60,61,62,63,64,65,66,67,68,69,70,71},
ndelfino 11:f65806ee5833 44 {72,73,74,75,76,77,78,79,80,81,82,83},
ndelfino 11:f65806ee5833 45 {84,85,86,87,88,89,90,91,92,93,94,95},
ndelfino 11:f65806ee5833 46 {96,97,98,99,100,101,102,103,104,105,106,107},
ndelfino 11:f65806ee5833 47 {108,109,110,111,112,113,114,115,116,117,118,119},
ndelfino 11:f65806ee5833 48 {120,121,122,123,124,125,126,127,0,0,0,0}};
ndelfino 11:f65806ee5833 49
ndelfino 11:f65806ee5833 50 const int keysSize = 12;
ndelfino 11:f65806ee5833 51
ndelfino 11:f65806ee5833 52 int ledKeys[4] = {-1,-1,-1,-1};
ndelfino 5:a687cfa7be62 53
ndelfino 8:deaedb59243e 54 LEDController::LEDController() {
ndelfino 11:f65806ee5833 55
ndelfino 3:8f80e267a80d 56 }
ndelfino 4:bb9f50305401 57
ndelfino 8:deaedb59243e 58 void LEDController::identifyKeyForLed(int key, int type){
ndelfino 8:deaedb59243e 59 //pc.printf("\r\nGetting note");
ndelfino 11:f65806ee5833 60 int octave = key/12;
ndelfino 11:f65806ee5833 61
ndelfino 8:deaedb59243e 62 for(int i = 0; i < keysSize; i++){
ndelfino 11:f65806ee5833 63 if(keys[octave][i] == key){
ndelfino 8:deaedb59243e 64 //pc.printf("\r\nNote Chosen, no signature");
ndelfino 11:f65806ee5833 65 chooseLedForKey(colors[i], type,0, keys[octave][i]);
ndelfino 11:f65806ee5833 66 }
ndelfino 4:bb9f50305401 67 }
ndelfino 4:bb9f50305401 68 }
ndelfino 4:bb9f50305401 69
ndelfino 4:bb9f50305401 70 //Chooses which LED to use based upon which are set or if they needed to be turned off.
ndelfino 11:f65806ee5833 71 void LEDController::chooseLedForKey(int colors[3], int type, int signature, int key){
ndelfino 4:bb9f50305401 72
ndelfino 4:bb9f50305401 73 //Determines if the LED is not set and therefore can be used.
ndelfino 8:deaedb59243e 74 //Or if it is in use by the same key being passed in which means it needs to be turned off.
ndelfino 8:deaedb59243e 75 if(type == -1){
ndelfino 11:f65806ee5833 76 if(ledKeys[0] == key){
ndelfino 11:f65806ee5833 77 setLedToKey(colors, type, signature, 1, key);
ndelfino 11:f65806ee5833 78 }else if(ledKeys[1] == key){
ndelfino 11:f65806ee5833 79 setLedToKey(colors, type, signature, 2, key);
ndelfino 11:f65806ee5833 80 }else if(ledKeys[2] == key){
ndelfino 11:f65806ee5833 81 setLedToKey(colors, type, signature, 3, key);
ndelfino 11:f65806ee5833 82 }else if(ledKeys[3] == key){
ndelfino 11:f65806ee5833 83 setLedToKey(colors, type, signature, 4, key);
ndelfino 8:deaedb59243e 84 }
ndelfino 8:deaedb59243e 85
ndelfino 8:deaedb59243e 86 }else{
ndelfino 11:f65806ee5833 87 if(ledKeys[0] == -1){
ndelfino 8:deaedb59243e 88 //pc.printf("\r\nLED1 chosen.");
ndelfino 11:f65806ee5833 89 setLedToKey(colors, type, signature, 1, key);
ndelfino 11:f65806ee5833 90 }else if(ledKeys[1] == -1){
ndelfino 11:f65806ee5833 91 setLedToKey(colors, type, signature, 2, key);
ndelfino 11:f65806ee5833 92 }else if(ledKeys[2] == -1){
ndelfino 11:f65806ee5833 93 setLedToKey(colors, type, signature, 3, key);
ndelfino 11:f65806ee5833 94 }else if(ledKeys[3] == -1){
ndelfino 11:f65806ee5833 95 setLedToKey(colors, type, signature, 4, key);
ndelfino 8:deaedb59243e 96 }
ndelfino 8:deaedb59243e 97 }
ndelfino 4:bb9f50305401 98 }
ndelfino 4:bb9f50305401 99
ndelfino 8:deaedb59243e 100 //This sets the key or clears the previously set key if the type is off.
ndelfino 11:f65806ee5833 101 void LEDController::setLedToKey(int colors[3], int type, int signature, int led, int key){
ndelfino 8:deaedb59243e 102 if(led == 1){
ndelfino 8:deaedb59243e 103 if(type == 1){
ndelfino 8:deaedb59243e 104 //pc.printf("\r\nTurning on light 1");
ndelfino 11:f65806ee5833 105 ledKeys[0] = key;
ndelfino 11:f65806ee5833 106 myled1_1 = colors[0];
ndelfino 11:f65806ee5833 107 myled1_2 = colors[1];
ndelfino 11:f65806ee5833 108 myled1_3 = colors[2];
ndelfino 8:deaedb59243e 109 }else{
ndelfino 8:deaedb59243e 110 //pc.printf("\r\nTurning off light 1");
ndelfino 11:f65806ee5833 111 ledKeys[0] = -1;
ndelfino 8:deaedb59243e 112 myled1_1 = 0;
ndelfino 8:deaedb59243e 113 myled1_2 = 0;
ndelfino 8:deaedb59243e 114 myled1_3 = 0;
ndelfino 8:deaedb59243e 115 }
ndelfino 8:deaedb59243e 116 }else if(led == 2){
ndelfino 8:deaedb59243e 117 if(type == 1){
ndelfino 8:deaedb59243e 118 //pc.printf("\r\nTurning on light 2");
ndelfino 11:f65806ee5833 119 ledKeys[1] = key;
ndelfino 11:f65806ee5833 120 myled2_1 = colors[0];
ndelfino 11:f65806ee5833 121 myled2_2 = colors[1];
ndelfino 11:f65806ee5833 122 myled2_3 = colors[2];
ndelfino 4:bb9f50305401 123 }else{
ndelfino 8:deaedb59243e 124 // pc.printf("\r\nTurning off light 2");
ndelfino 11:f65806ee5833 125 ledKeys[1] = -1;
ndelfino 8:deaedb59243e 126 myled2_1 = 0;
ndelfino 8:deaedb59243e 127 myled2_2 = 0;
ndelfino 8:deaedb59243e 128 myled2_3 = 0;
ndelfino 4:bb9f50305401 129 }
ndelfino 8:deaedb59243e 130 }else if(led == 3){
ndelfino 8:deaedb59243e 131 if(type == 1){
ndelfino 8:deaedb59243e 132 // pc.printf("\r\nTurning on light 3");
ndelfino 11:f65806ee5833 133 ledKeys[2] = key;
ndelfino 11:f65806ee5833 134 myled3_1 = colors[0];
ndelfino 11:f65806ee5833 135 myled3_2 = colors[1];
ndelfino 11:f65806ee5833 136 myled3_3 = colors[2];
ndelfino 8:deaedb59243e 137 }else{
ndelfino 8:deaedb59243e 138 // pc.printf("\r\nTurning off light 3");
ndelfino 11:f65806ee5833 139 ledKeys[2] = -1;
ndelfino 8:deaedb59243e 140 myled3_1 = 0;
ndelfino 8:deaedb59243e 141 myled3_2 = 0;
ndelfino 8:deaedb59243e 142 myled3_3 = 0;
ndelfino 8:deaedb59243e 143 }
ndelfino 8:deaedb59243e 144 }else if(led == 4){
ndelfino 8:deaedb59243e 145 if(type == 1){
ndelfino 8:deaedb59243e 146 // pc.printf("\r\nTurning on light 4");
ndelfino 11:f65806ee5833 147 ledKeys[3] = key;
ndelfino 11:f65806ee5833 148 myled4_1 = colors[0];;
ndelfino 11:f65806ee5833 149 myled4_2 = colors[1];
ndelfino 11:f65806ee5833 150 myled4_3 = colors[2];
ndelfino 8:deaedb59243e 151 }else{
ndelfino 8:deaedb59243e 152 // pc.printf("\r\nTurning off light 4");
ndelfino 11:f65806ee5833 153 ledKeys[3] = -1;
ndelfino 8:deaedb59243e 154 myled4_1 = 0;
ndelfino 8:deaedb59243e 155 myled4_2 = 0;
ndelfino 8:deaedb59243e 156 myled4_3 = 0;
ndelfino 8:deaedb59243e 157 }
ndelfino 8:deaedb59243e 158 }
ndelfino 8:deaedb59243e 159
ndelfino 4:bb9f50305401 160 }