tankkk

Dependencies:   USBHost USBHostXpad mbed-rtos mbed

Audio.h

Committer:
hotwheelharry
Date:
2014-12-06
Revision:
9:789350244478
Parent:
8:36b2ef26a0b1

File content as of revision 9:789350244478:


#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);
   
    }
};