2020年5月13日 星期三

(*^ω^*) 喵~Week12

主題:聲音播放
➽WAV檔:簡單的一行程式碼~
  • 播出一首音樂~
    • #include <windows.h>
    • #include <mmsystem.h>
    • int main()
    • {
    •     PlaySoundA("paino.wav",NULL,SND_SYNC);
    • }
      • PlaySound播聲音
      • A正常的ASCII檔名
      • NULL空
      • SND_SYNC聲音要同步(播完一首才會播下一首)
      • WAV檔要放在C:\Users\Administrator\Desktop\freeglut\bin
  • 可以不只一首!!
    • #include <windows.h>
    • #include <mmsystem.h>
    • int main()
    • {
    •     PlaySoundA("paino.wav",NULL,SND_SYNC);
    •     PlaySoundA("drums.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);
    • }
    • int main(int argc, char **argv)
    • {
    •     glutInit(&argc, argv);
    •     glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    •     glutCreateWindow("week12");
    •     glutDisplayFunc(display);
    •     glutKeyboardFunc(keyboard);
    •     glutMainLoop();
    • }
      • SND_ASYNC聲音同步(可直接切入插播)
      • WAV檔要放在C:\Users\Administrator\Desktop\freeglut\bin
      • display()必須要寫但可以不放東西
➽MP3檔:有點麻煩~
          • 播出音樂
            • #include <windows.h>
            • #include <mmsystem.h>
            • #include <GL/glut.h>
            • #include "CMP3_MCI.h"///雙引號,在專案同一個目錄裡抓檔案
            • CMP3_MCI mp3;///宣告mp3變數
            • void display()
            • {
            • }
            • int main(int argc, char **argv)
            • {
            •     mp3.Load("drums.mp3");//讀入
            •     mp3.Play();//播放
            •     glutInit(&argc, argv);
            •     glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
            •     glutCreateWindow("week12");
            •     glutDisplayFunc(display);

            •     glutMainLoop();
            • }
              • CMP3_MCI.h可以在moodle裡找到
              • CMP3_MCI.h要放在專案程式碼同一層
              • MP3檔要放在C:\Users\Administrator\Desktop\freeglut\bin
          • 改良版小鋼琴(簡易版無法彈出和弦)
            • #include <windows.h>
            • #include <mmsystem.h>
            • #include <GL/glut.h>
            • #include "CMP3_MCI.h"
            • CMP3_MCI mp3;
            • CMP3_MCI Do,Re,Mi,Fa,So;///宣告5個變數
            • void display()
            • {
            • }
            • void keyboard(unsigned char key, int x,int y)
            • {
            •     if(key=='1') Do.Play();
            •     if(key=='2') Re.Play();
            •     if(key=='3') Mi.Play();
            •     if(key=='4') Fa.Play();
            •     if(key=='5') So.Play();ˋˋ
            • }
            • 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("drums.mp3");
            •     mp3.Play();
            •     glutInit(&argc, argv);
            •     glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
            •     glutCreateWindow("week12");
            •     glutDisplayFunc(display);
            •     glutKeyboardFunc(keyboard);
            •     glutMainLoop();
            • }
              • 改善PlaySound無法彈出和弦的問題(Do+Re+Mi一起按⇒只播一個音)
              • 用CMP3_MCI.h可成功彈出和弦
          ➽為什麼檔案(圖檔、音檔)都必須放到[freeglut\bin]?很奇怪!!
          • 原因:
            • 因為需要[freeglut.dll]
          • 解決方法:
            • NotePab++開啟專案檔裡的CBP檔
            • 找到2"C:\Users\Administrator\Desktop\freeglut\bin"改成"."
            • [freeglut.dll]複製進專案資料夾以後都能自給自足了
          ➽小遊戲

          • 一顆小球碰到牆會發出Do、Re、Mi、Fa、Sol
            • #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;///ballX會加上dx, ballY會加上dy
            • void display()
            • {///想法: 可不可以做個小遊戲....有個球,會動來來動
            •     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            •     glPushMatrix();
            •         glTranslatef(ballX, ballY, 0);///移到ballX,ballY
            •         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("shot.wav", NULL, SND_ASYNC);
            • }
            • void keyboard(unsigned char key, int x, int y)
            • {                                
            •     if(key=='1') Do.Play();
            •     if(key=='2') Re.Play();
            •     if(key=='3') Mi.Play();
            •     if(key=='4') Fa.Play();
            •     if(key=='5') So.Play();
            • }
            • 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("music.mp3");
            •     ///mp3.Play();
            •     glutInit(&argc, argv);
            •     glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
            •     glutCreateWindow("week12 sound");
            •     glutDisplayFunc(display);
            •     glutKeyboardFunc(keyboard);
            •     glutTimerFunc(50, timer, 0);
            •     glutMouseFunc(mouse);
            •     glutMainLoop();
            • }

          沒有留言:

          張貼留言