Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:0ba4b5723199
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Jun 16 15:20:07 2013 +0000 @@ -0,0 +1,46 @@ +/* Program Example 11.5: 16-bit mono wave player + */ +#include "mbed.h" +#include "SDFileSystem.h" +#define BUFFERSIZE 4096 // number of data in circular buffer +SDFileSystem sd(p5, p6, p7, p8, "sd"); +AnalogOut DACout(p18); +Ticker SampleTicker; +int SampleRate; +float SamplePeriod; // sample period in microseconds +int CircularBuffer[BUFFERSIZE]; // circular buffer array +int ReadPointer=0; +int WritePointer=0; +bool EndOfFileFlag=0; + +void DACFunction(void); // function prototype + +int main() { + FILE *fp = fopen("/sd/testa.wav", "rb"); // open wave file + fseek(fp, 24, SEEK_SET); // move to byte 24 + fread(&SampleRate, 4, 1, fp); // get sample frequency + SamplePeriod=(float)1/SampleRate; // calculate sample period as float + SampleTicker.attach(&DACFunction,SamplePeriod); // start output tick + + while (!feof(fp)) { // loop until end of file is encountered + fread(&CircularBuffer[WritePointer], 2, 1, fp); + WritePointer=WritePointer+1; // increment Write Pointer + if (WritePointer>=BUFFERSIZE) { // if end of circular buffer + WritePointer=0; // go back to start of buffer + } + } + EndOfFileFlag=1; + fclose(fp); +} + +// DAC function called at rate SamplePeriod +void DACFunction(void) { + if ((EndOfFileFlag==0)|(ReadPointer>0)) { // output while data available + DACout.write_u16(CircularBuffer[ReadPointer]); // output to DAC + ReadPointer=ReadPointer+1; // increment pointer + if (ReadPointer>=BUFFERSIZE) { + ReadPointer=0; // reset pointer if necessary + } + } +} +