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
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 }
Generated on Tue Jul 12 2022 18:38:04 by 1.7.2