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

Dependencies:   mbed USBDevice PinDetect

Committer:
ndelfino
Date:
Wed Apr 13 17:44:36 2016 +0000
Revision:
8:deaedb59243e
Parent:
5:a687cfa7be62
Child:
11:f65806ee5833
Connected my code to Austin's. Made some fixes to the LEDController. Now lights will light up and turn off appropriately if they are in the same octave. Changed the values I was using for numerical identification of notes.

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