電腦圖學 學習日誌
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();
}


沒有留言:
張貼留言