2020年5月13日 星期三

:D~week12

🔴播放wav檔
#include <windows.h>
#include <mmsystem.h>
int main()
{///播聲音 正常的ASCII檔名,空,聲音要同步
    PlaySoundA("chaha.wav",NULL,SND_SYNC);
}///檔案要在(freeglut\bin資料夾裡)


🔴試著播出多個wav檔,按鍵盤發出聲音
#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 sound");

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

    glutMainLoop();
}


🔴播出mp3檔,播放時還是可以按鍵盤發出聲音
-->但這個按鍵不能發出和弦
#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);
}
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();
}


🔴播出mp3檔,播放時還是可以按鍵盤發出聲音
-->按鍵可以發出和弦
#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"); ///5個按鍵變數 設好檔案
    mp3.Load("music.mp3");
    mp3.Play();
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week12 sound");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);

    glutMainLoop();
}


🔴更改工作目錄  將原本執行的目錄改成小數點"."


🔴將原本目錄中要執行的聲音檔及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;

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) ///mouse會有槍聲
{
    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_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("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();
}

沒有留言:

張貼留言