2019年5月9日 星期四

Week12 鍾嘉穎 2019-05-09

1. 聲音
      1. 下載一個WAV
      2. 打開CodeBlocks
      3. 開新Project (Console Application)
      4. 把完來的程式碼刪掉
      6. 加入一個winmm的library
      
      5. 改成以下的程式碼
                  #include<windows.h>
                  #include<mmsystem.h> ///裏面有聲音的函式
                  ///上面兩行不能交換!!!!
                  int main()
                  {
                     PlaySoundA("C:\\Users\\user\\Downloads\\bubbs.wav",NULL,SND_SYNC);
                     ///播放音樂 (    檔名                            ,沒有人,SoundSync                            )
                  }

                  SND_SYNC: 同步播放 , 會一個一個等他慢慢播
                       SND_ASYNC: 不同步, 可能程式碼會先結束

                       C語言裏 ,  //=/
                       兩行就會執行兩次

      
      6. 聲音就會跑出來

2. 主題: 鍵盤 聲音 音樂WAV MP3
      1. 先載入freeglut (跟第一週一樣)
           1. Google search "freeglut windows"
           2. 從Transmission Zero 下載 "freeglut 3.0.0 MinGW Package"
           3. 解壓縮後放到桌面
           4. 在lib複製一個"libfreeglut.a"命名為"libglut32.a"
           5. CodeBlocks 開
           6. File  ->  New -> Project -> GLUT Project
           7. 把location改成"C:\Users\user\Desktop\freeglut"

      2. 加入兩行程式碼
          #include <mmsystem.h>
          PlaySoundA("C:\\Users\\user\\Downloads\\bubbs.wav",NULL,SND_SYNC);

               ...

               const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
               const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
               const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
               const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

               const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
               const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
               const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
               const GLfloat high_shininess[] = { 100.0f };

               /* Program entry point */
               #include <mmsystem.h>
               int main(int argc, char *argv[])
               {
                   PlaySoundA("C:\\Users\\user\\Downloads\\bubbs.wav",NULL,SND_SYNC);
                   glutInit(&argc, argv);
                   glutInitWindowSize(640,480);
                   glutInitWindowPosition(10,10);
                   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

                   glutCreateWindow("GLUT Shapes");

                   glutReshapeFunc(resize);
                   glutDisplayFunc(display);
                   glutKeyboardFunc(key);
                   glutIdleFunc(idle);

                   ...


      3. **不用加library 因為裏面內置了
      4. 會先跑音樂再跑紅色的3DObject
      
      
     
     5. 在Key的函式裏加程式碼(do re mi ...)
          if(key=='1') PlaySoundA("C:\\Users\\user\\Downloads\\do.wav",NULL,SND_SYNC);
          if(key=='2') PlaySoundA("C:\\Users\\user\\Downloads\\re.wav",NULL,SND_SYNC);
          if(key=='3') PlaySoundA("C:\\Users\\user\\Downloads\\mi.wav",NULL,SND_SYNC);
          if(key=='4') PlaySoundA("C:\\Users\\user\\Downloads\\fa.wav",NULL,SND_SYNC);
          if(key=='5') PlaySoundA("C:\\Users\\user\\Downloads\\so.wav",NULL,SND_SYNC);
               ...
               
                   glPushMatrix();
                       glTranslated(2.4,-1.2,-6);
                       glRotated(60,1,0,0);
                       glRotated(a,0,0,1);
                       glutWireTorus(0.2,0.8,slices,stacks);
                   glPopMatrix();

                   glutSwapBuffers();
               }

               #include <mmsystem.h>
               static void key(unsigned char key, int x, int y)
               {
                   if(key=='1') PlaySoundA("C:\\Users\\user\\Downloads\\do.wav",NULL,SND_SYNC);
                   if(key=='2') PlaySoundA("C:\\Users\\user\\Downloads\\re.wav",NULL,SND_SYNC);
                   if(key=='3') PlaySoundA("C:\\Users\\user\\Downloads\\mi.wav",NULL,SND_SYNC);
                   if(key=='4') PlaySoundA("C:\\Users\\user\\Downloads\\fa.wav",NULL,SND_SYNC);
                   if(key=='5') PlaySoundA("C:\\Users\\user\\Downloads\\so.wav",NULL,SND_SYNC);

                   switch (key)
                   {
                       case 27 :
                       case 'q':
                           exit(0);
                           break;

                       case '+':

               ...
            ***但按鍵盤的時候會卡住 (因為SND_SYNC) 所以要改成 SND_ASYNC
        
     6. 改成SND_ASYNC (不會卡 按很快)
          if(key=='1') PlaySoundA("C:\\Users\\user\\Downloads\\do.wav",NULL,SND_ASYNC);
          if(key=='2') PlaySoundA("C:\\Users\\user\\Downloads\\re.wav",NULL,SND_ASYNC);
          if(key=='3') PlaySoundA("C:\\Users\\user\\Downloads\\mi.wav",NULL,SND_ASYNC);
          if(key=='4') PlaySoundA("C:\\Users\\user\\Downloads\\fa.wav",NULL,SND_ASYNC);
          if(key=='5') PlaySoundA("C:\\Users\\user\\Downloads\\so.wav",NULL,SND_ASYNC);
               ...
               
                   glPushMatrix();
                       glTranslated(2.4,-1.2,-6);
                       glRotated(60,1,0,0);
                       glRotated(a,0,0,1);
                       glutWireTorus(0.2,0.8,slices,stacks);
                   glPopMatrix();

                   glutSwapBuffers();
               }

               #include <mmsystem.h>
               static void key(unsigned char key, int x, int y)
               {
                   if(key=='1') PlaySoundA("C:\\Users\\user\\Downloads\\do.wav",NULL,SND_ASYNC);
                   if(key=='2') PlaySoundA("C:\\Users\\user\\Downloads\\re.wav",NULL,SND_ASYNC);
                   if(key=='3') PlaySoundA("C:\\Users\\user\\Downloads\\mi.wav",NULL,SND_ASYNC);
                   if(key=='4') PlaySoundA("C:\\Users\\user\\Downloads\\fa.wav",NULL,SND_ASYNC);
                   if(key=='5') PlaySoundA("C:\\Users\\user\\Downloads\\so.wav",NULL,SND_ASYNC);

                   switch (key)
                   {
                       case 27 :
                       case 'q':
                           exit(0);
                           break;

                       case '+':

               ...
        
     7. 下載  "CMP3_MCI.h"

     8. 放到CodeBlocks 專案的資料夾
      

     9. 加播放MP3的程式碼
          #include "CMP3_MCI.h"
          CMP3_MCI myMP3;
          myMP3.Load("C:\\Users\\user\\Downloads\\bubbs.wav");
          myMP3.Play();
                 ...
               const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
               const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

               const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
               const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
               const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
               const GLfloat high_shininess[] = { 100.0f };

               /* Program entry point */
               #include "CMP3_MCI.h"
               #include <mmsystem.h>
               CMP3_MCI myMP3;
               int main(int argc, char *argv[])
               {
                   myMP3.Load("C:\\Users\\user\\Downloads\\bubbs.wav");
                   myMP3.Play();
                   glutInit(&argc, argv);
                   glutInitWindowSize(640,480);
                   glutInitWindowPosition(10,10);
                   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
               
                   glutCreateWindow("GLUT Shapes");

                   glutReshapeFunc(resize);
                   glutDisplayFunc(display);

               ...
      

3. 複習: 階層 T-R-T 骨架
4. 作業:能操控的機器人

沒有留言:

張貼留言