jordy morsinkhof / Mbed 2 deprecated Totaleprogramma

Dependencies:   USBHost USBHostXpad mbed-rtos mbed

Revision:
0:345f76c72b9a
diff -r 000000000000 -r 345f76c72b9a Audio.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Audio.h	Wed Feb 25 08:25:16 2015 +0000
@@ -0,0 +1,418 @@
+
+#include "Speaker.h"
+#include <vector>
+
+//This needs work to get threading working
+
+class Audio{
+private:
+    Mutex mutex;
+    Speaker& speaker;
+    bool playing;
+    int code;       //sound code
+    
+    bool getplaying(){
+        bool b;
+        mutex.lock();
+        b = playing;
+        mutex.unlock();
+        return b;
+    }
+    int getcode(){
+        int c;
+        mutex.lock();
+        c = code;
+        mutex.unlock();   
+        return c;
+    }
+public:
+    Audio(Speaker& ao) : speaker(ao)
+    {   
+    }
+    void play(int code){
+        mutex.lock();
+        this->code = code;
+        this->playing = true;
+        mutex.unlock();
+    }
+    void stop(){
+        mutex.lock();
+        this->playing = false;
+        mutex.unlock();   
+    }
+    
+    void run(){
+        while(true){    //service audio requests...
+            
+            //if not playing, wait fast
+            if(!getplaying()){
+                Thread::wait(1);
+                continue;   
+            }
+            
+            
+            int code = getcode();
+            
+            switch(code){
+                case 0: // up
+                    speaker.PlayNote(500.0, 0.05, 1.0);
+                    speaker.PlayNote(600.0, 0.05, 1.0);
+                    speaker.PlayNote(700.0, 0.05, 1.0);
+                    break;
+                case 1: // down
+                    speaker.PlayNote(500.0, 0.05, 1.0);
+                    speaker.PlayNote(550.0, 0.05, 1.0);
+                    break;
+                case 2: //left
+                    speaker.PlayNote(400.0, 0.1, 1.0);
+                    speaker.PlayNote(500.0, 0.1, 1.0);
+                    break;
+                case 3:  // right
+                    speaker.PlayNote(600.0, 0.05, 1.0);
+                    speaker.PlayNote(500.0, 0.05, 1.0);
+                    break;
+                    
+                // trigger sound
+                case 4:
+                
+                    speaker.PlayNote(500.0, 0.05, 1.0);
+                    speaker.PlayNote(600.0, 0.05, 1.0);
+                    speaker.PlayNote(700.0, 0.05, 1.0);
+                    break;
+                    
+                // mario!
+                case 5:
+                    playMario();
+                    break;
+                default: break; 
+            }
+            
+            
+            //Thread::wait(10);
+        }
+    }
+    
+    
+    void playNote(float a, float b, float c){
+        speaker.PlayNote(a,b,c);
+    }
+    
+public:
+    
+    void playMario(){
+          
+        playNote(660.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(660.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(660.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(510.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(660.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(770.0, 0.08, 1.0);
+        Thread::wait(413);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(431);
+        playNote(510.0, 0.08, 1.0);
+        Thread::wait(338);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(300);
+        playNote(320.0, 0.08, 1.0);
+        Thread::wait(375);
+        playNote(440.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(480.0, 0.06, 1.0);
+        Thread::wait(248);
+        playNote(450.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(150);
+        playNote(660.0, 0.06, 1.0);
+        Thread::wait(150);
+        playNote(760.0, 0.04, 1.0);
+        Thread::wait(113);
+        playNote(860.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(700.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(760.0, 0.04, 1.0);
+        Thread::wait(263);
+        playNote(660.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(520.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(580.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(480.0, 0.06, 1.0);
+        Thread::wait(375);
+        playNote(510.0, 0.08, 1.0);
+        Thread::wait(338);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(300);
+        playNote(320.0, 0.08, 1.0);
+        Thread::wait(375);
+        playNote(440.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(480.0, 0.06, 1.0);
+        Thread::wait(248);
+        playNote(450.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(150);
+        playNote(660.0, 0.06, 1.0);
+        Thread::wait(150);
+        playNote(760.0, 0.04, 1.0);
+        Thread::wait(113);
+        playNote(860.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(700.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(760.0, 0.04, 1.0);
+        Thread::wait(263);
+        playNote(660.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(520.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(580.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(480.0, 0.06, 1.0);
+        Thread::wait(375);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(760.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(720.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(680.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(620.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(650.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(570.0, 0.08, 1.0);
+        Thread::wait(165);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(760.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(720.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(680.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(620.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(650.0, 0.15, 1.0);
+        Thread::wait(225);
+        playNote(1020.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(1020.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(1020.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(760.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(720.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(680.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(620.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(650.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(570.0, 0.08, 1.0);
+        Thread::wait(315);
+        playNote(585.0, 0.08, 1.0);
+        Thread::wait(338);
+        playNote(550.0, 0.08, 1.0);
+        Thread::wait(315);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(270);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(760.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(720.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(680.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(620.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(650.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(570.0, 0.08, 1.0);
+        Thread::wait(165);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(760.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(720.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(680.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(620.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(650.0, 0.15, 1.0);
+        Thread::wait(225);
+        playNote(1020.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(1020.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(1020.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(760.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(720.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(680.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(620.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(650.0, 0.11, 1.0);
+        Thread::wait(225);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(430.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(570.0, 0.08, 1.0);
+        Thread::wait(315);
+        playNote(585.0, 0.08, 1.0);
+        Thread::wait(338);
+        playNote(550.0, 0.08, 1.0);
+        Thread::wait(315);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(270);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.04, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.04, 1.0);
+        Thread::wait(263);
+        playNote(500.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(580.0, 0.06, 1.0);
+        Thread::wait(263);
+        playNote(660.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(430.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(380.0, 0.06, 1.0);
+        Thread::wait(450);
+        playNote(500.0, 0.04, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.04, 1.0);
+        Thread::wait(263);
+        playNote(500.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(580.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(660.0, 0.06, 1.0);
+        Thread::wait(413);
+        playNote(870.0, 0.06, 1.0);
+        Thread::wait(244);
+        playNote(760.0, 0.06, 1.0);
+        Thread::wait(450);
+        playNote(500.0, 0.04, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(500.0, 0.04, 1.0);
+        Thread::wait(263);
+        playNote(500.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(580.0, 0.06, 1.0);
+        Thread::wait(263);
+        playNote(660.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(500.0, 0.06, 1.0);
+        Thread::wait(225);
+        playNote(430.0, 0.06, 1.0);
+        Thread::wait(113);
+        playNote(380.0, 0.06, 1.0);
+        Thread::wait(450);
+        playNote(660.0, 0.08, 1.0);
+        Thread::wait(113);
+        playNote(660.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(660.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(510.0, 0.08, 1.0);
+        Thread::wait(75);
+        playNote(660.0, 0.08, 1.0);
+        Thread::wait(225);
+        playNote(770.0, 0.08, 1.0);
+        Thread::wait(413);
+        playNote(380.0, 0.08, 1.0);
+        Thread::wait(431);
+   
+    }
+};
\ No newline at end of file