Michael Dushkoff / Music Featured

Dependents:   SuperMbedBall Tono

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Notes.cpp Source File

Notes.cpp

00001 /* * * * * * * * * * * * * * * * * * * * * * * * * * *
00002  * This is a definitions class for music notes and   *
00003  * their frequencies.                                *
00004  *                                                   *
00005  * Created by: Michael Dushkoff (mad1841@rit.edu)    *
00006  * * * * * * * * * * * * * * * * * * * * * * * * * * */
00007 
00008 #include "mbed.h"
00009 #include "Notes.h"
00010 
00011 // Initialize local note arrays for indexing
00012 double _A[]  = {NOTE_A0, NOTE_A1, NOTE_A2, NOTE_A3, NOTE_A4,
00013                 NOTE_A5, NOTE_A6, NOTE_A7};
00014 double _AS[] = {NOTE_AS0, NOTE_AS1, NOTE_AS2, NOTE_AS3, NOTE_AS4,
00015                 NOTE_AS5, NOTE_AS6, NOTE_AS7};
00016 double _B[]  = {NOTE_B0, NOTE_B1, NOTE_B2, NOTE_B3, NOTE_B4,
00017                 NOTE_B5, NOTE_B6, NOTE_B7};
00018 double _BS[] = {NOTE_C0, NOTE_C1, NOTE_C2, NOTE_C3, NOTE_C4,
00019                 NOTE_C5, NOTE_C6, NOTE_C7, NOTE_C8};
00020 double _C[]  = {NOTE_C0, NOTE_C1, NOTE_C2, NOTE_C3, NOTE_C4,
00021                 NOTE_C5, NOTE_C6, NOTE_C7, NOTE_C8};
00022 double _CS[] = {NOTE_CS0, NOTE_CS1, NOTE_CS2, NOTE_CS3, NOTE_CS4,
00023                 NOTE_CS5, NOTE_CS6, NOTE_CS7, NOTE_CS8};
00024 double _D[]  = {NOTE_D0, NOTE_D1, NOTE_D2, NOTE_D3, NOTE_D4,
00025                 NOTE_D5, NOTE_D6, NOTE_D7, NOTE_D8};
00026 double _DS[] = {NOTE_DS0, NOTE_DS1, NOTE_DS2, NOTE_DS3, NOTE_DS4,
00027                 NOTE_DS5, NOTE_DS6, NOTE_DS7, NOTE_DS8};
00028 double _E[]  = {NOTE_E0, NOTE_E1, NOTE_E2, NOTE_E3, NOTE_E4,
00029                 NOTE_E5, NOTE_E6, NOTE_E7};
00030 double _ES[] = {NOTE_F0, NOTE_F1, NOTE_F2, NOTE_F3, NOTE_F4,
00031                 NOTE_F5, NOTE_F6, NOTE_F7};
00032 double _F[]  = {NOTE_F0, NOTE_F1, NOTE_F2, NOTE_F3, NOTE_F4,
00033                 NOTE_F5, NOTE_F6, NOTE_F7};
00034 double _FS[] = {NOTE_FS0, NOTE_FS1, NOTE_FS2, NOTE_FS3, NOTE_FS4,
00035                 NOTE_FS5, NOTE_FS6, NOTE_FS7};
00036 double _G[]  = {NOTE_G0, NOTE_G1, NOTE_G2, NOTE_G3, NOTE_G4,
00037                 NOTE_G5, NOTE_G6, NOTE_G7};
00038 double _GS[] = {NOTE_GS0, NOTE_GS1, NOTE_GS2, NOTE_GS3, NOTE_GS4,
00039                 NOTE_GS5, NOTE_GS6, NOTE_GS7};
00040 
00041 /*
00042  * This is a lookup function to provide the correct
00043  * frequency given a note and an octave
00044  *
00045  * note - The given note character [A - G]
00046  * sharp - Whether the note is sharp (1) or not (0)
00047  * octave - The given octave [0 - 8]
00048  */
00049 double notes::get_freq(char note, int sharp, int octave) {
00050     switch(note){
00051         case 'A':
00052             //A Note
00053             if (octave>=0 && octave <=7){
00054                 if (sharp == 0){
00055                     return _A[octave];
00056                 }
00057                 else{
00058                     return _AS[octave];
00059                 }
00060             }
00061         break;
00062         case 'B':
00063             //B Note
00064             if (octave>=0 && octave <=7){
00065                 if (sharp == 0){
00066                     return _B[octave];
00067                 }
00068                 else{
00069                     return _BS[octave];
00070                 }
00071             }
00072         break;
00073         case 'C':
00074             //C Note
00075             if (octave>=0 && octave <=8){
00076                 if (sharp == 0){
00077                     return _C[octave];
00078                 }
00079                 else{
00080                     return _CS[octave];
00081                 }
00082             }
00083         break;
00084         case 'D':
00085             //D Note
00086             if (octave>=0 && octave <=8){
00087                 if (sharp == 0){
00088                     return _D[octave];
00089                 }
00090                 else{
00091                     return _DS[octave];
00092                 }
00093             }
00094         break;
00095         case 'E':
00096             //E Note
00097             if (octave>=0 && octave <=7){
00098                 if (sharp == 0){
00099                     return _E[octave];
00100                 }
00101                 else{
00102                     return _ES[octave];
00103                 }
00104             }
00105         break;
00106         case 'F':
00107             //F Note
00108             if (octave>=0 && octave <=7){
00109                 if (sharp == 0){
00110                     return _F[octave];
00111                 }
00112                 else{
00113                     return _FS[octave];
00114                 }
00115             }
00116         break;
00117         case 'G':
00118             //G Note
00119             if (octave>=0 && octave <=7){
00120                 if (sharp == 0){
00121                     return _G[octave];
00122                 }
00123                 else{
00124                     return _GS[octave];
00125                 }
00126             }
00127         break;
00128     }
00129     return 0;
00130 }