2020年5月13日 星期三

2020/05/13-天氣晴

Week12

step01_利用 PlaySoundA() 來播放 WAV檔, 小心執行目錄是 freeglut的bin裡面



step02_用同一個方法播放音符

#include <windows.h> ///為了下面認識DWORD
#include <mmsystem.h> ///裡面有PlaySound
int main()
{
    ///播聲音 正常的ASCII檔名,空,聲音要同步(間隔長速度慢)
    PlaySoundA("si.wav",NULL,SND_SYNC);
    PlaySoundA("la.wav",NULL,SND_SYNC);
    PlaySoundA("so.wav",NULL,SND_SYNC);
    PlaySoundA("fa.wav",NULL,SND_SYNC);
    PlaySoundA("mi.wav",NULL,SND_SYNC);
}




step03_用keyboard函式播音符

#include <windows.h> ///為了下面認識DWORD
#include <mmsystem.h> ///裡面有PlaySound
#include <GL/glut.h>
void display()
{
}
void keyboard(unsigned char key,int x,int y)
{                                                     ///不要同步不要結束 繼續
    if(key=='7')PlaySoundA("si.wav",NULL,SND_ASYNC);
    if(key=='6')PlaySoundA("la.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySoundA("so.wav",NULL,SND_SYNC);
    if(key=='4')PlaySoundA("fa.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySoundA("mi.wav",NULL,SND_ASYNC);
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week12 sound");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);///鍵盤有函式

    glutMainLoop();
}



step04_播放mp3檔,先把CMP3_MCI.h放到專案目錄裡,music.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_SYNC);
    if(key=='4')PlaySoundA("fa.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySoundA("so.wav",NULL,SND_ASYNC);
}
int main(int argc,char**argv)
{
    mp3.Load("music.mp3");
    mp3.Play();

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week12 sound");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);///鍵盤有函式

    glutMainLoop();
}



step05_改成按鍵且有和弦

#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(); ///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_SYNC);
    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");
    ///設好檔案

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week12 sound");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);///鍵盤有函式

    glutMainLoop();
}




Notepad++修改.cbp檔,並將freeglut.dll跟音檔移到專案目錄裡



#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個物件變數

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("shot.wav",NULL,SND_ASYNC);
}
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_SYNC);
    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");
    ///設好檔案

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week12 sound");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);///鍵盤有函式
    glutMouseFunc(mouse);

    glutMainLoop();
}

沒有留言:

張貼留言