2020年5月13日 星期三

week12_wendy

電腦圖學 學習日誌

week12

  • 主題: 聲音、音效、音樂
  • 實作: 播放 WAV檔
  • 實作: 播放 MP3檔
  • 實作: GLUT .cbp 專案檔 的設定 (執行目錄、include/lib目錄、link lib檔)

(一)播放WAV檔


播放聲音

#include <windows.h>
為了下面的DWRO
#include <mmsystem.h>
裡面有PlaySound函式

int main()
{
    PlaySoundA("llj1p-0y7jq.wav",NULL,SND_SYNC);
    把wav檔放在freeglut\bin資料夾中
}

播放聲音&配合keyboard函式座小鍵盤效果

#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);
    ASYNC不停頓 SYNC會停頓

    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("week2_music");

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

    glutMainLoop();
}


(二)播放mp3檔

必須先把CMP3_MCI.h檔放在Project

#include <windows.h>
#include <mmsystem.h>
#include <GL/glut.h>
#include "CMP3_MCI.h" 
CMP3_MCI mp3;    宣告物件變數(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("music2.mp3");   音樂檔案放置
    mp3.Play();
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week2_music");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);

    glutMainLoop();
}

鍵盤合弦設定

#include <windows.h>
#include <mmsystem.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"

CMP3_MCI mp3;       
宣告物件變數(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("music2.mp3");
    ///mp3.Play();
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week2_music");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);

    glutMainLoop();
}

(三)如合獨立執行專案檔

遇到的問題:

在之前的課程中我們要執行自己建立的專案檔,但執行目錄的路徑卻指向

⇒C:\Users\Administrator\Desktop\freeglut\bin

並非在我們的project上執行

解決方法:

到project中開啟 XXX.cbp檔

更改路徑 "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;
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 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();
}
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();
        dx = -dy;
    }if(ballX<=-1){
        FA.Play();
        dx = -dy;
    }

    glutPostRedisplay();
}
void mouse(int button, int state,int x,int y)
{
    if(state==GLUT_DOWN) PlaySoundA("shot.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("music2.mp3");
    ///mp3.Play();
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week2_music");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutTimerFunc(50, timer,0);
    glutMouseFunc(mouse);
    glutMainLoop();
}







沒有留言:

張貼留言