Headers for MAX32630FTHR Demo Board sample programs
noteplayer.cpp
- Committer:
- Lugs
- Date:
- 2019-07-30
- Revision:
- 0:a6a8578e95af
File content as of revision 0:a6a8578e95af:
#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; } }