主題: 聲音、音效、音樂
1. 實作: 播放 WAV檔
#include <windows.h>
#include <mmsystem.h>
int main()
{
/// 檔名 / 空 /聲音同步
PlaySoundA("thunder_clap.wav",NULL,SND_SYNC);
}

#include <windows.h>
#include <mmsystem.h>
void display()
{
}
void keyboard(unsigned char key,int x,int y)
{
///ASYNC表示不等音檔播完直接播下一個
if(key=='1')PlaySoundA("do.wav",NULL,SND_ASYNC);
if(key=='2')PlaySoundA("me.wav",NULL,SND_ASYNC);
if(key=='3')PlaySoundA("fa.wav",NULL,SND_ASYNC);
if(key=='4')PlaySoundA("so.wav",NULL,SND_ASYNC);
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
glutCreateWindow("week12");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
}
2. 實作: 播放 MP3檔

#include <windows.h>
#include <mmsystem.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"///記得加入CMP3_MCI.h檔到同一個專
CMP3_MCI mp3; 案目錄
int main(int argc, char** argv)
{
mp3.Load("四月.mp3");
mp3.Play();
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
glutCreateWindow("week12");
glutDisplayFunc(display);
glutMainLoop();
}

#include <windows.h>
#include <mmsystem.h>
#include <GL/glut.h>
#include "CMP3_MCI.h"
CMP3_MCI mp3;
CMP3_MCI Do,Re,Mi,Fa;
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();
///讓按鍵同時按能夠和弦
}
int main(int argc, char** argv)
{
Do.Load("do.wav");Re.Load("re.wav");
Mi.Load("mi.wav");Fa.Load("fa.wav");
mp3.Load("四月.mp3");
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE);
glutCreateWindow("week12");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
}
3.GLUT .cbp 專案檔 的設定 (執行目錄、include/lib目錄、link lib檔)


然後將freeglut檔內bin檔的freeglut.dll及音檔丟入專案檔內
*音樂添加圖形發出聲音

球碰撞到邊界會發出音樂
#include <windows.h>
#include <mmsystem.h>
#include <GL/glut.h>
#include "CMP3_MCI.h" /// TODO3: 雙引號,在專案同一個目錄裡
CMP3_MCI mp3;///ex. int a; TODO3: 宣告一個物件變數,叫 mp3
CMP3_MCI Do, Re, Mi, Fa, So; ///TODO4: 有5個物件變數
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();///TODO6: 備份
glTranslatef(ballX, ballY, 0);///TODO6: 移到ballX,ballY
glutSolidSphere(0.1, 30,30);///TODO6:圓球
glPopMatrix();///TODO6:還原
glutSwapBuffers();
}
void timer(int t)///TODO6: timer
{
glutTimerFunc(50, timer, t+1);///TODO6: 用timer
ballX+=dx; ballY+=dy;///TODO6: 球會動
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();///TODO6: 重畫畫面
}
void mouse(int button, int state, int x, int y)///TODO6: 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();///TODO4 PlaySoundA("do.wav",NULL,SND_ASYNC);
if(key=='2') Re.Play();///TODO4//PlaySoundA("re.wav",NULL,SND_ASYNC);
if(key=='3') Mi.Play();///TODO4//PlaySoundA("mi.wav",NULL,SND_ASYNC);
if(key=='4') Fa.Play();///TODO4//PlaySoundA("fa.wav",NULL,SND_ASYNC);
if(key=='5') So.Play();///TODO4//PlaySoundA("so.wav",NULL,SND_ASYNC);
}///TODO4: 上面的程式, 現在可以有合弦 (ex. Do+Mi+So => 只會有個音出來...)
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");///TODO4: 5個物件變數 設好檔案
mp3.Load("music.mp3");///TODO3:
///mp3.Play();///TODO3:
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week12 sound");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);///TODO2:鍵盤有函式
glutTimerFunc(50, timer, 0);///TODO6
glutMouseFunc(mouse);///TODO6
glutMainLoop();
}
沒有留言:
張貼留言