This is a simple sound library for mbed. This sound library uses a Ticker to simulate a 50% duty cycle pwm signal on any pin. The frequency of this signal can be varied to allow sound to be created by any piezoelectric device that is connected to that pin.

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 }