Plays audio samples from an array stored in flash. Values are from an audio *.wav file that was automatically converted to a C array data source file. 8-bit samples used in this version and a PWM output pin (instead of AnalogOut)

Dependencies:   mbed

Fork of flash_audio_player_8bit by jim hamblen

See https://os.mbed.com/users/4180_1/notebook/using-flash-to-play-audio-clips/ for instructions

Revision:
2:9d7fa7666ee4
Parent:
1:bd7bef7df00b
--- a/main.cpp	Sun Oct 22 16:12:03 2017 +0000
+++ b/main.cpp	Sun Oct 22 16:50:32 2017 +0000
@@ -1,9 +1,9 @@
 #include "mbed.h"
-AnalogOut speaker(p18);
+PwmOut speaker(p26);
 Ticker sampletick;
 DigitalOut myled(LED1);
 //Plays Audio Clip using Array in Flash
-//8-bit audio samples used
+//8-bit audio samples used on PWM pin
 //setup const array in flash with audio values 
 //from free wav file conversion tool at
 //http://ccgi.cjseymour.plus.com/wavtocode/wavtocode.htm
@@ -14,19 +14,11 @@
 //get and set the frequency from wav conversion tool GUI
 int i=0;
 
-union short_or_char {
-    short s;
-    char  c[2];
-};
-
-union short_or_char sample;
-
-
 //interrupt routine to play next audio sample from array in flash
 void audio_sample ()
 {
-    sample.c[1] = sound_data[i];
-    speaker.write_u16(sample.s);
+
+    speaker = sound_data[i]/255.0;//scale to 0.0 to 1.0 for PWM
     i++;
     if (i>= NUM_ELEMENTS) {
         i = 0;
@@ -36,7 +28,7 @@
 }
 int main()
 {
-    sample.c[0] = 0; //setup fast byte to short conversion using union
+    speaker.period(1.0/250000.0); //PWM freq >10X audio sample rate
     while(1) {
         myled = 1;
 //use a ticker to play send next audio sample value to D/A