Sound update

Dependencies:   4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed

Revision:
27:a09981ebd532
Parent:
26:163d7ca8c42d
Child:
28:bccd14334bb9
diff -r 163d7ca8c42d -r a09981ebd532 main.cpp
--- a/main.cpp	Thu Dec 08 02:12:14 2022 +0000
+++ b/main.cpp	Thu Dec 08 18:42:16 2022 +0000
@@ -35,11 +35,10 @@
 PwmOut Rgb(p23);
 PwmOut rGb(p24);
 PwmOut rgB(p25);
-//Speaker DACout(p18);
+Speaker DACout(p18);
 //wave_player waver(&DACout);
 
 
-
 ////////////////////////////////
 // MAIN.CPP LOCAL DEFINITIONS //
 ////////////////////////////////
@@ -55,34 +54,253 @@
 //////////////////////
 // MAIN.CPP THREADS //
 //////////////////////
-/*
+
 void audioThread()
 {
     while (true) {
-        FILE *wave_file;
+        //FILE *wave_file;
         while (game1 == false && game2 == false) {
-            led2 = true;
+            DACout.PlayNote(369.99, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(466.16, 0.2, 1);
+            DACout.PlayNote(554.37, 0.2, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(466.16, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(369.99, 0.4, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(293.66, 0.2, 1);
+            DACout.PlayNote(293.66, 0.2, 1);
+            DACout.PlayNote(293.66, 0.2, 1);
+            DACout.PlayNote(0, 0.8, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(277.18, 0.4, 1);
+            DACout.PlayNote(293.66, 0.2, 1);
+            DACout.PlayNote(369.99, 0.2, 1);
+            DACout.PlayNote(466.16, 0.2, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(554.37, 0.2, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(466.16, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(369.99, 0.4, 1);
+            DACout.PlayNote(659.25, 0.4, 1);
+            DACout.PlayNote(622.25, 0.4, 1);
+            DACout.PlayNote(587.33, 0.4, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(0, 0.4, 1);
+            
+            
+            
+            DACout.PlayNote(392.00, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(554.37, 0.2, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(369.99, 0.2, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(554.37, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(329.00, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(523.25, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(329.00, 0.4, 1);
+            DACout.PlayNote(369.99, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(329.63, 0.4, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(277.18, 0.2, 1);
+            DACout.PlayNote(277.18, 0.2, 1);
+            DACout.PlayNote(277.18, 0.2, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(277.18, 0.2, 1);
+            DACout.PlayNote(277.18, 0.2, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(277.18, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(0, 0.4, 1);
+            DACout.PlayNote(311.13, 0.4, 1);
+            if(game1 == true || game2 == true) break;
+            DACout.PlayNote(293.66, 0.4, 1);
+            //DACout.PlayNote(440.00, 0.3, 1);
+            
+            /*led2 = true;
             wave_file=fopen("/sd/MiiMenu.wav","r");
+            PRINTF("Opening");
             waver.play(wave_file);
             fclose(wave_file);
-            led2 = false;
+            led2 = false;*/
         }
         while (game1 == true && game2 == false) {
-            led2 = true;
+            DACout.PlayNote(659.25, 0.3, 1);
+            DACout.PlayNote(493.88, 0.3, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+           if(game1 != true && game2 == false) break;
+            DACout.PlayNote(587.33, 0.3, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(493.88, 0.3, 1);
+            DACout.PlayNote(440.00, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(440.00, 0.3, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(659.25, 0.3, 1);
+            DACout.PlayNote(587.33, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(493.88, 0.3, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(587.33, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(659.25, 0.3, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(440.00, 0.3, 1);
+            DACout.PlayNote(440.00, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            
+            DACout.PlayNote(583.33, 0.3, 1);
+            DACout.PlayNote(698.46, 0.3, 1);
+            DACout.PlayNote(880.00, 0.3, 1);
+            DACout.PlayNote(783.99, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(698.46, 0.3, 1);
+            DACout.PlayNote(659.25, 0.3, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(659.25, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(587.33, 0.3, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(493.88, 0.3, 1);
+            DACout.PlayNote(493.88, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(587.33, 0.3, 1);
+            DACout.PlayNote(659.25, 0.3, 1);
+            DACout.PlayNote(523.35, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(440.00, 0.3, 1);
+            DACout.PlayNote(440.00, 0.3, 1);
+           /* led2 = true;
             wave_file=fopen("/sd/tetris.wav","r");
             waver.play(wave_file);
             fclose(wave_file);
-            led2 = false;
+            led2 = false;*/
         }
         while (game2 == true && game1 == false) {
-            led2 = true;
+            DACout.PlayNote(329.63, 0.6, 1);
+            DACout.PlayNote(349.23, 0.6, 1);
+            DACout.PlayNote(392.00, 0.15, 1);
+            DACout.PlayNote(523.25, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(493.88, 0.15, 1);
+            DACout.PlayNote(523.25, 0.15, 1);
+            DACout.PlayNote(392.00, 0.15, 1);
+            DACout.PlayNote(329.63, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(261.63, 0.15, 1);
+            DACout.PlayNote(293.66, 0.15, 1);
+            DACout.PlayNote(329.33, 0.15, 1);
+            DACout.PlayNote(293.66, 0.6, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(293.66, 1.2, 1);
+            DACout.PlayNote(329.63, 0.6, 1);
+            DACout.PlayNote(349.23, 0.3, 1);
+            DACout.PlayNote(329.63, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(349.23, 0.15, 1);
+            
+            
+            DACout.PlayNote(392.00, 0.15, 1);
+            DACout.PlayNote(523.25, 0.15, 1);           
+            DACout.PlayNote(587.33, 0.15, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(587.33, 0.1, 1);
+            DACout.PlayNote(659.25, 0.1, 1);
+            DACout.PlayNote(698.46, 0.15, 1);
+            DACout.PlayNote(659.25, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(587.33, 0.15, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(392.00, 0.15, 1);
+            DACout.PlayNote(440.00, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(440.00, 0.15, 1);
+            DACout.PlayNote(587.33, 0.15, 1);
+            DACout.PlayNote(587.33, 0.1, 1);
+            DACout.PlayNote(587.33, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(587.33, 0.1, 1);
+            DACout.PlayNote(659.25, 0.1, 1);
+            DACout.PlayNote(698.46, 0.15, 1);
+            DACout.PlayNote(659.25, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(587.33, 0.15, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(392.00, 0.3, 1);
+            DACout.PlayNote(392.00, 0.6, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(392.00, 0.15, 1);
+            DACout.PlayNote(587.33, 0.1, 1);
+            DACout.PlayNote(659.25, 0.1, 1);
+            DACout.PlayNote(698.46, 0.15, 1);
+            DACout.PlayNote(659.25, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(587.33, 0.15, 1);
+            DACout.PlayNote(523.25, 0.3, 1);
+            DACout.PlayNote(783.99, 0.3, 1);
+            DACout.PlayNote(783.99, 0.6, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(783.99, 0.15, 1);
+            DACout.PlayNote(783.99, 0.1, 1);
+            DACout.PlayNote(880.00, 0.1, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(932.33, 0.15, 1);
+            DACout.PlayNote(880.00, 0.15, 1);           
+            DACout.PlayNote(783.99, 0.15, 1);
+            DACout.PlayNote(698.46, 0.6, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(830.61, 0.15, 1);
+            DACout.PlayNote(783.99, 0.15, 1);
+            DACout.PlayNote(698.46, 0.15, 1);
+            DACout.PlayNote(622.25, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(739.99, 0.15, 1);
+            DACout.PlayNote(698.46, 0.1, 1);
+            DACout.PlayNote(698.46, 0.15, 1);
+            DACout.PlayNote(622.25, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(554.37, 0.15, 1);
+            DACout.PlayNote(415.30, 0.15, 1);
+            DACout.PlayNote(349.23, 0.15, 1);
+            DACout.PlayNote(277.18, 0.15, 1);
+            DACout.PlayNote(311.13, 0.3, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(554.37, 0.3, 1);
+            DACout.PlayNote(587.33, 0.6, 1);
+            DACout.PlayNote(587.33, 0.6, 1);
+            DACout.PlayNote(587.33, 0.15, 1);
+            DACout.PlayNote(392.00, 0.15, 1);
+            if(game1 != true && game2 == false) break;
+            DACout.PlayNote(587.33, 0.3, 1);
+            DACout.PlayNote(783.99, 0.3, 1);
+            DACout.PlayNote(783.99, 0.6, 1);
+            DACout.PlayNote(783.99, 1.2, 1);
+            if(game1 != true && game2 == false) break;
+            /*led2 = true;
             wave_file=fopen("/sd/WiiPlayAirHockey.wav","r");
             waver.play(wave_file);
             fclose(wave_file);
-            led2 = false;
+            led2 = false;*/
         }
     }
-}*/
+}
 
 void ledThread()
 {
@@ -113,10 +331,18 @@
     // Launch four threads
     Thread thread1(tetrisGame, osPriorityHigh);
     Thread thread2(hockeyGame, osPriorityHigh);
-    //Thread thread3(audioThread, osPriorityLow);
+    Thread thread3(audioThread, osPriorityLow);
     Thread thread4(ledThread, osPriorityLow);
     
     // The main thread goes on to blink LEDs
+    //Speaker mySpeaker(p18);
+    // loops forever playing two notes on speaker using analog samples
+    //PRINTF("test");
+//    while(1) {
+//        //mySpeaker.PlayNote(969.0, 0.5, 1.0);
+////        mySpeaker.PlayNote(800.0, 0.5, 1.0);
+//        //PRINTF("loop");
+//    }
     while (true) {
         led1 = 1;
         Thread::wait(500);
@@ -143,7 +369,7 @@
         PRINTF("[MAIN] Thread stacks: %lu %lu %lu %lu\r\n",
             thread1.used_stack(),
             thread2.used_stack(),
-            //thread3.used_stack(),
+            thread3.used_stack(),
             thread4.used_stack());
         
         // Launch into the air hockey game