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
diff -r 000000000000 -r 0ba4b5723199 main.cpp
--- /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
+ }
+ }
+}
+