2020年5月13日 星期三

Week12 - 07161045

聲音、音效、音樂(WAV檔)
  • 先開啟GLUT專案
  • 把程式碼都刪掉
  • 上網下載任一WAV檔音樂,將音樂放到freeglut裡的bin
  • 輸入以下程式碼:
#include <windows.h>
    #include <mmsystem.h>
      int main()
        {
              PlaySoundA("madmoo.wav", NULL, SND_SYNC);
            }
            • 上述程式碼藍色部分為音檔名稱
                 
            • 利用上面程式做出小星星
                 
            • 利用數字鍵彈鋼琴
            • 程式碼如下:
            #include <windows.h>
              #include <mmsystem.h>
                #include <GL/glut.h>
                  void display()
                    {
                      }
                        void keyboard(unsigned char key, int x, int y)
                          {
                                if(key=='1') PlaySoundA("do.wav", NULL, SND_ASYNC);
                                  if(key=='2') PlaySoundA("re.wav", NULL, SND_ASYNC);
                                    if(key=='3') PlaySoundA("mi.wav", NULL, SND_ASYNC);
                                      if(key=='4') PlaySoundA("fa.wav", NULL, SND_ASYNC);
                                        if(key=='5') PlaySoundA("so.wav", NULL, SND_ASYNC);
                                          if(key=='6') PlaySoundA("la.wav", NULL, SND_ASYNC);
                                            if(key=='7') PlaySoundA("si.wav", NULL, SND_ASYNC);
                                          }
                                            int main(int argc, char**argv)
                                              {
                                                    glutInit(&argc, argv);
                                                      glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                        glutCreateWindow("07161045");
                                                          glutDisplayFunc(display);
                                                            glutKeyboardFunc(keyboard);
                                                              glutMainLoop();
                                                            }
                                                                 

                                                            聲音、音效、音樂(MP3檔)
                                                            • 先到Moodle下載老師給的"CMP3_MCI.h",可讓電腦播MP3/WMA 音檔
                                                            • 將"CMP3_MCI.h"拉至桌面程式碼所在的資料夾裡
                                                            • 上網下在任一首mp3,拉至freeglut裡的bin
                                                            • 程式碼如下:
                                                            #include <windows.h>
                                                              #include <mmsystem.h>
                                                                #include <GL/glut.h>
                                                                  #include "CMP3_MCI.h"
                                                                    CMP3_MCI mp3;
                                                                      void display()
                                                                        {
                                                                          }
                                                                            void keyboard(unsigned char key, int x, int y)
                                                                              {
                                                                                    if(key=='1') PlaySoundA("do.wav", NULL, SND_ASYNC);
                                                                                      if(key=='2') PlaySoundA("re.wav", NULL, SND_ASYNC);
                                                                                        if(key=='3') PlaySoundA("mi.wav", NULL, SND_ASYNC);
                                                                                          if(key=='4') PlaySoundA("fa.wav", NULL, SND_ASYNC);
                                                                                            if(key=='5') PlaySoundA("so.wav", NULL, SND_ASYNC);
                                                                                              if(key=='6') PlaySoundA("la.wav", NULL, SND_ASYNC);
                                                                                                if(key=='7') PlaySoundA("si.wav", NULL, SND_ASYNC);
                                                                                              }
                                                                                                int main(int argc, char**argv)
                                                                                                  {
                                                                                                        mp3.Load("twice.mp3");
                                                                                                          mp3.Play();

                                                                                                              glutInit(&argc, argv);
                                                                                                                glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                  glutCreateWindow("07161045");
                                                                                                                    glutDisplayFunc(display);
                                                                                                                      glutKeyboardFunc(keyboard);
                                                                                                                        glutMainLoop();
                                                                                                                      }
                                                                                                                           
                                                                                                                      • 利用五個變數加上和弦
                                                                                                                      • 程式碼如下:
                                                                                                                      #include <windows.h>
                                                                                                                        #include <mmsystem.h>
                                                                                                                          #include <GL/glut.h>
                                                                                                                            #include "CMP3_MCI.h"
                                                                                                                              CMP3_MCI mp3;
                                                                                                                                CMP3_MCI Do, Re, Mi, Fa, So;
                                                                                                                                  void display()
                                                                                                                                    {
                                                                                                                                      }
                                                                                                                                        void keyboard(unsigned char key, int x, int y)
                                                                                                                                          {
                                                                                                                                                if(key=='1') Do.Play();///PlaySoundA("do.wav", NULL, SND_ASYNC);
                                                                                                                                                  if(key=='2') Re.Play();///PlaySoundA("re.wav", NULL, SND_ASYNC);
                                                                                                                                                    if(key=='3') Mi.Play();///PlaySoundA("mi.wav", NULL, SND_ASYNC);
                                                                                                                                                      if(key=='4') Fa.Play();///PlaySoundA("fa.wav", NULL, SND_ASYNC);
                                                                                                                                                        if(key=='5') So.Play();///PlaySoundA("so.wav", NULL, SND_ASYNC);
                                                                                                                                                      }
                                                                                                                                                        int main(int argc, char**argv)
                                                                                                                                                          {
                                                                                                                                                                Do.Load("do.wav");Re.Load("re.wav");Mi.Load("mi.wav");Fa.Load("fa.wav");So.Load("so.wav");
                                                                                                                                                                  mp3.Load("twice.mp3");
                                                                                                                                                                    mp3.Play();

                                                                                                                                                                        glutInit(&argc, argv);
                                                                                                                                                                          glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                                                                            glutCreateWindow("07161045");
                                                                                                                                                                              glutDisplayFunc(display);
                                                                                                                                                                                glutKeyboardFunc(keyboard);
                                                                                                                                                                                  glutMainLoop();
                                                                                                                                                                                }
                                                                                                                                                                                     
                                                                                                                                                                                • 將freeglut裡bin的資料拉至桌面程式碼所在的資料夾裡
                                                                                                                                                                                     
                                                                                                                                                                                • 再把"week12_07161045.cbp"用notepad++開啟,將兩個地方雙引號內改為"."
                                                                                                                                                                                     
                                                                                                                                                                                • 利用程式碼讓球碰到牆壁回彈,碰到牆壁發出Do、Re、Mi、Fa、So的聲音
                                                                                                                                                                                • 再加上滑鼠程式碼(槍聲)
                                                                                                                                                                                • 程式碼如下:
                                                                                                                                                                                #include <windows.h>
                                                                                                                                                                                  #include <mmsystem.h>
                                                                                                                                                                                    #include <GL/glut.h>
                                                                                                                                                                                      #include "CMP3_MCI.h"
                                                                                                                                                                                        CMP3_MCI mp3;
                                                                                                                                                                                          CMP3_MCI Do, Re, Mi, Fa, So;
                                                                                                                                                                                            float ballX=0, ballY=0, dx=0.05, dy=0.03;
                                                                                                                                                                                              void display()
                                                                                                                                                                                                {
                                                                                                                                                                                                      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                                                                                                                                                                        glPushMatrix();
                                                                                                                                                                                                              glTranslatef(ballX, ballY, 0);
                                                                                                                                                                                                                glutSolidSphere(0.1, 30, 30);
                                                                                                                                                                                                              glPopMatrix();
                                                                                                                                                                                                                glutSwapBuffers();
                                                                                                                                                                                                              }
                                                                                                                                                                                                                void timer(int t)
                                                                                                                                                                                                                  {
                                                                                                                                                                                                                        glutTimerFunc(50, timer, t+1);
                                                                                                                                                                                                                          ballX+=dx; ballY+=dy;
                                                                                                                                                                                                                            if(ballX>=1)
                                                                                                                                                                                                                              {
                                                                                                                                                                                                                                    Do.Play(); dx= -dx;
                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                    if(ballX<=-1)
                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                            Re.Play(); dx= -dx;
                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                            if(ballY>=1)
                                                                                                                                                                                                                                              {
                                                                                                                                                                                                                                                    Mi.Play(); dy= -dy;
                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                    if(ballY<=-1)
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                            Fa.Play(); dy= -dy;
                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                            glutPostRedisplay();
                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                            void mouse(int button, int state, int x, int y)
                                                                                                                                                                                                                                                              {
                                                                                                                                                                                                                                                                    if(state==GLUT_DOWN) PlaySoundA("bar.wav", NULL, SND_ASYNC);
                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                    void keyboard(unsigned char key, int x, int y)
                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                            if(key=='1') PlaySoundA("do.wav", NULL, SND_ASYNC);
                                                                                                                                                                                                                                                                              if(key=='2') PlaySoundA("re.wav", NULL, SND_ASYNC);
                                                                                                                                                                                                                                                                                if(key=='3') PlaySoundA("mi.wav", NULL, SND_ASYNC);
                                                                                                                                                                                                                                                                                  if(key=='4') PlaySoundA("fa.wav", NULL, SND_ASYNC);
                                                                                                                                                                                                                                                                                    if(key=='5') PlaySoundA("so.wav", NULL, SND_ASYNC);
                                                                                                                                                                                                                                                                                      if(key=='6') PlaySoundA("la.wav", NULL, SND_ASYNC);
                                                                                                                                                                                                                                                                                        if(key=='7') PlaySoundA("si.wav", NULL, SND_ASYNC);
                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                        int main(int argc, char**argv)
                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                mp3.Load("twice.mp3");
                                                                                                                                                                                                                                                                                                  mp3.Play();

                                                                                                                                                                                                                                                                                                      glutInit(&argc, argv);
                                                                                                                                                                                                                                                                                                        glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                                                                                                                                                                                                          glutCreateWindow("07161045");
                                                                                                                                                                                                                                                                                                            glutDisplayFunc(display);
                                                                                                                                                                                                                                                                                                              glutKeyboardFunc(keyboard);
                                                                                                                                                                                                                                                                                                                glutTimerFunc(50, timer, 0);
                                                                                                                                                                                                                                                                                                                  glutMouseFunc(mouse);
                                                                                                                                                                                                                                                                                                                    glutMainLoop();
                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                       

                                                                                                                                                                                                                                                                                                                  沒有留言:

                                                                                                                                                                                                                                                                                                                  張貼留言