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.
Dependencies: USBHost USBHostXpad mbed-rtos mbed
Diff: Audio.h
- 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