Headers for MAX32630FTHR Demo Board sample programs

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers noteplayer.cpp Source File

noteplayer.cpp

00001 #include "noteplayer.h"
00002 
00003 float *audioDataBuffer = new float[128];
00004 volatile int bufferPOS = 0;
00005 Ticker SampleTime;
00006 
00007 void placeNewSample()
00008 {
00009     speaker.write(audioDataBuffer[bufferPOS++]); //multiply by POT value for volume.
00010     bufferPOS = (bufferPOS+1) & 0x07F;
00011 }
00012 
00013 void loadBuffer()
00014 {
00015     printf("Generating sine...\r\n");
00016     for(int i=0; i<128; i++) {
00017         audioDataBuffer[i] =((1.0 + sin((double(i)/16.0*6.28318530717959)))/2.0); //formula copied from mbed example
00018     }
00019 }
00020 
00021 note makeNote(unsigned char length, pitchname pitch2make)
00022 {
00023     note madenote;
00024     madenote.length = length;
00025     madenote.pitch = pitch2make;
00026     return madenote;
00027 }
00028 
00029 void playNote(note note2play)
00030 {
00031     float SPB = 60.0*4.0/(120.0);
00032     int PlayingFreq = pitch2freq(note2play.pitch);
00033     if(PlayingFreq == 0) { //rest
00034         wait((1/(float)note2play.length)*SPB);
00035     } else {
00036         int sampleRate = PlayingFreq * 16;
00037         speaker.period_us(1); //1MHz
00038         float ticker_period = (float) 1/(sampleRate);
00039         printf("\r\nTicker Period: %f\tTicker Freq: %f\r\nTarget Freq: %i \r\n\r\n",ticker_period, 1/ticker_period, PlayingFreq);
00040 
00041         SampleTime.attach(&placeNewSample,ticker_period);
00042         wait((1/(float)note2play.length)*SPB);
00043         SampleTime.detach();
00044 
00045         printf("\033[A\033[A\033[A\033[A");
00046     }
00047 }
00048 
00049 int pitch2freq(pitchname pitch2switch)
00050 {
00051     switch(pitch2switch) {
00052         case rest:
00053             return 0;
00054         case D2:
00055             return 73;
00056         case Ds2:
00057             return 78;
00058         case E2:
00059             return 82;
00060         case F2:
00061             return 87;
00062         case Fs2:
00063             return 92;
00064         case G2:
00065             return 98;
00066         case Gs2:
00067             return 104;
00068         case A2:
00069             return 110;
00070         case As2:
00071             return 117;
00072         case B2:
00073             return 123;
00074         case C3:
00075             return 131;
00076         case Cs3:
00077             return 139;
00078         case D3:
00079             return 147;
00080         case Ds3:
00081             return 156;
00082         case E3:
00083             return 165;
00084         case F3:
00085             return 175;
00086         case Fs3:
00087             return 185;
00088         case G3:
00089             return 196;
00090         case Gs3:
00091             return 208;
00092         case A3:
00093             return 220;
00094         case As3:
00095             return 233;
00096         case B3:
00097             return 247;
00098         case C4:
00099             return 262;
00100         case Cs4:
00101             return 277;
00102         case D4:
00103             return 294;
00104         case Ds4:
00105             return 311;
00106         case E4:
00107             return 330;
00108         case F4:
00109             return 349;
00110         case Fs4:
00111             return 370;
00112 
00113         case G4:
00114             return 392;
00115 
00116         case Gs4:
00117             return 415;
00118 
00119         case A4:
00120             return 440;
00121 
00122         case As4:
00123             return 466;
00124 
00125         case B4:
00126             return 494;
00127 
00128         case C5:
00129             return 523;
00130 
00131         case Cs5:
00132             return 554;
00133 
00134         case D5:
00135             return 587;
00136 
00137         case Ds5:
00138             return 622;
00139 
00140         case E5:
00141             return 659;
00142 
00143         case F5:
00144             return 698;
00145 
00146         case Fs5:
00147             return 740;
00148 
00149         case G5:
00150             return 784;
00151 
00152         case Gs5:
00153             return 831;
00154 
00155         case A5:
00156             return 880;
00157 
00158         case As5:
00159             return 932;
00160 
00161         case B5:
00162             return 988;
00163 
00164         case C6:
00165             return 1047;
00166 
00167         case Cs6:
00168             return 1109;
00169 
00170         case D6:
00171             return 1175;
00172 
00173         case Ds6:
00174             return 1245;
00175 
00176         case E6:
00177             return 1319;
00178 
00179         case F6:
00180             return 1397;
00181 
00182         case Fs6:
00183             return 1480;
00184 
00185         case G6:
00186             return 1568;
00187 
00188         case Gs6:
00189             return 1661;
00190 
00191         case END:
00192             return -1;
00193     }
00194 }