Headers for MAX32630FTHR Demo Board sample programs
Diff: noteplayer.cpp
- Revision:
- 0:a6a8578e95af
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/noteplayer.cpp Tue Jul 30 02:44:30 2019 +0000 @@ -0,0 +1,194 @@ +#include "noteplayer.h" + +float *audioDataBuffer = new float[128]; +volatile int bufferPOS = 0; +Ticker SampleTime; + +void placeNewSample() +{ + speaker.write(audioDataBuffer[bufferPOS++]); //multiply by POT value for volume. + bufferPOS = (bufferPOS+1) & 0x07F; +} + +void loadBuffer() +{ + printf("Generating sine...\r\n"); + for(int i=0; i<128; i++) { + audioDataBuffer[i] =((1.0 + sin((double(i)/16.0*6.28318530717959)))/2.0); //formula copied from mbed example + } +} + +note makeNote(unsigned char length, pitchname pitch2make) +{ + note madenote; + madenote.length = length; + madenote.pitch = pitch2make; + return madenote; +} + +void playNote(note note2play) +{ + float SPB = 60.0*4.0/(120.0); + int PlayingFreq = pitch2freq(note2play.pitch); + if(PlayingFreq == 0) { //rest + wait((1/(float)note2play.length)*SPB); + } else { + int sampleRate = PlayingFreq * 16; + speaker.period_us(1); //1MHz + float ticker_period = (float) 1/(sampleRate); + printf("\r\nTicker Period: %f\tTicker Freq: %f\r\nTarget Freq: %i \r\n\r\n",ticker_period, 1/ticker_period, PlayingFreq); + + SampleTime.attach(&placeNewSample,ticker_period); + wait((1/(float)note2play.length)*SPB); + SampleTime.detach(); + + printf("\033[A\033[A\033[A\033[A"); + } +} + +int pitch2freq(pitchname pitch2switch) +{ + switch(pitch2switch) { + case rest: + return 0; + case D2: + return 73; + case Ds2: + return 78; + case E2: + return 82; + case F2: + return 87; + case Fs2: + return 92; + case G2: + return 98; + case Gs2: + return 104; + case A2: + return 110; + case As2: + return 117; + case B2: + return 123; + case C3: + return 131; + case Cs3: + return 139; + case D3: + return 147; + case Ds3: + return 156; + case E3: + return 165; + case F3: + return 175; + case Fs3: + return 185; + case G3: + return 196; + case Gs3: + return 208; + case A3: + return 220; + case As3: + return 233; + case B3: + return 247; + case C4: + return 262; + case Cs4: + return 277; + case D4: + return 294; + case Ds4: + return 311; + case E4: + return 330; + case F4: + return 349; + case Fs4: + return 370; + + case G4: + return 392; + + case Gs4: + return 415; + + case A4: + return 440; + + case As4: + return 466; + + case B4: + return 494; + + case C5: + return 523; + + case Cs5: + return 554; + + case D5: + return 587; + + case Ds5: + return 622; + + case E5: + return 659; + + case F5: + return 698; + + case Fs5: + return 740; + + case G5: + return 784; + + case Gs5: + return 831; + + case A5: + return 880; + + case As5: + return 932; + + case B5: + return 988; + + case C6: + return 1047; + + case Cs6: + return 1109; + + case D6: + return 1175; + + case Ds6: + return 1245; + + case E6: + return 1319; + + case F6: + return 1397; + + case Fs6: + return 1480; + + case G6: + return 1568; + + case Gs6: + return 1661; + + case END: + return -1; + } +} \ No newline at end of file