music main

Dependencies:   USBHost mbed

Fork of AppBoard_Waveplayer by jim hamblen

Revision:
11:e48cb1e38995
Parent:
10:6eefc37bfa23
diff -r 6eefc37bfa23 -r e48cb1e38995 main.cpp
--- a/main.cpp	Thu Apr 09 20:24:22 2015 +0000
+++ b/main.cpp	Tue Apr 14 03:46:33 2015 +0000
@@ -1,84 +1,65 @@
-#include "mbed.h"
-#include "USBHostMSD.h"
-#include "wave_player.h"
-#include "MMA7660.h"
-#include "rtos.h"
-
-//mbed Application board waveplayer demo
-//Plays the wave file "sample.wav" on the USB flash drive
-//Outputs to onboard speaker (but at very low volume)
-//and the Audio Out jack for connection to a set of amplified PC speakers (at higher volume)
-//Needs a USB flash drive inserted with the wav file on it to run
-
-//Analog Out Jack
-AnalogOut DACout(p18);
-//On Board Speaker
-PwmOut PWMout(p26);
-int music = 0;
-void readbuf();
-Serial pc(USBTX,USBRX);
-MMA7660 MMA(p28, p27);
-AnalogIn sound(p17);
-PwmOut r (p23);
-PwmOut g (p24);
-PwmOut b (p25);
- FILE *wave_file;
- void readbuf(void const *args);
- unsigned short * waveArray;
- DigitalIn fire(p14);
- void changemusic(void const *args);
- void changecolor(void const *args);
- int randomval = 0;
- int start = 0;
- Ticker fillbuf;
-unsigned short * buf;
- wave_player waver(&DACout,&PWMout, &waveArray[0]);
-int main()
-{
-    USBHostMSD msd("usb");
-   // for(int i = 0; i<256; i++)
-//        { 
-//       waveArray[i] = 0;
-//        }
-    
-    r.period(0.001);
-    //setup PWM hardware for a Class D style audio output
-    PWMout.period(1.0/400000.0);
-    printf("\r\n\nHello, wave world!\n");
-    // wait until connected to a USB device
-    while(!msd.connect()) {
-        Thread::wait(500);
-    }
-    //open wav file and play it
-
-     
-      pc.printf("\r\nenter wavefile\n\n"); 
-      wave_file =  fopen("/usb/sample.wav","r");
-      
-     // waver.set_verbosity(1);
-    Thread thread(readbuf);
-      waver.play(wave_file);
-      
-    fclose(wave_file);
-       
-       pc.printf("\r\n END OF FILE\n");
-        pc.printf("\r\n\n BUFFER:::\n");
-       
-         
-    
-   while(1);
-   
-}
-void readbuf(void const * args){
-   
-    while(1){
-         wait_ms(11.0);
-   
-    waver.getFIFO(buf);
-    
-    //for(int i = 0; i<256; i++) {
-//       printf("%hu\r\n",buf[i]); 
-//       }
-   }
-    
-}
+#include "mbed.h"
+#include "WaveFileReader.h"
+#include "USBHostMSD.h"
+#include "CircularBuffer.h"
+
+#define MAXSIZE 4096
+#define EXTRASIZE 0
+
+Serial pc(USBTX,USBRX);
+
+unsigned short buffer[MAXSIZE];
+AnalogOut DACout(p18);
+Ticker ticker;
+//CircularBuffer<unsigned short> circularBuffer(MAXSIZE+EXTRASIZE);  
+
+void writeAnalog(){
+    static int i=0;
+    if(i>=1024)i = 0;
+    //DACout.write_u16(circularBuffer.readOneSample());
+    DACout.write_u16(buffer[i]);
+    i++;
+    
+}
+
+int main() {
+         
+    pc.printf("\r\n Detecting USB...");
+    fflush(stdout);
+    
+    USBHostMSD msd("usb");
+    while(!msd.connect()) {
+        Thread::wait(500);
+        pc.printf("\r\nwaiting..");
+    }
+    pc.printf("\r\n USD Detected");
+    fflush(stdout);
+     
+    FILE *file;
+    file = fopen("/usb/sample.wav","r");
+    WaveFileReader waveReader(file,false);
+    pc.printf("\r\n File opened");
+    fflush(stdout);
+    
+    float samplePeriod = waveReader.readSamplePeriod();
+    waveReader.read(buffer,MAXSIZE);   
+    ticker.attach_us(&writeAnalog,samplePeriod);
+    //pc.printf("\r\n Ticker attached");
+    
+ //   while(1){
+//        while(circularBuffer.writeSizeRemaining() < MAXSIZE){}
+//        //pc.printf("\r\n Reading next MAXSIZE");
+//        //fflush(stdout);
+//        int length = waveReader.read(buffer,MAXSIZE);  
+//        if(length<MAXSIZE){
+//            circularBuffer.write(buffer,MAXSIZE); 
+//            break;
+//        }
+//        //Mixer.mix(buf);
+//        circularBuffer.write(buffer,MAXSIZE); 
+//    }
+    fclose(file);
+    while(1) {
+         
+    }
+}
\ No newline at end of file