➽WAV檔:簡單的一行程式碼~
- 播出一首音樂~
- #include <windows.h>
- #include <mmsystem.h>
- int main()
- {
- PlaySoundA("paino.wav",NULL,SND_SYNC);
- }
- PlaySound播聲音
- A正常的ASCII檔名
- NULL空
- SND_SYNC聲音要同步(播完一首才會播下一首)
- WAV檔要放在C:\Users\Administrator\Desktop\freeglut\bin
- 可以不只一首!!
- #include <windows.h>
- #include <mmsystem.h>
- int main()
- {
- PlaySoundA("paino.wav",NULL,SND_SYNC);
- PlaySoundA("drums.wav",NULL,SND_SYNC);
- .
- .
- .
- }
- 製作簡易小鋼琴~
- #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");
- glutDisplayFunc(display);
- glutKeyboardFunc(keyboard);
- glutMainLoop();
- }
- SND_ASYNC聲音不同步(可直接切入插播)
- WAV檔要放在C:\Users\Administrator\Desktop\freeglut\bin
- display()必須要寫但可以不放東西
- 播出音樂
- #include <windows.h>
- #include <mmsystem.h>
- #include <GL/glut.h>
- #include "CMP3_MCI.h"///雙引號,在專案同一個目錄裡抓檔案
- CMP3_MCI mp3;///宣告mp3變數
- void display()
- {
- }
- int main(int argc, char **argv)
- {
- mp3.Load("drums.mp3");//讀入
- mp3.Play();//播放
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
- glutCreateWindow("week12");
- glutDisplayFunc(display);
- glutMainLoop();
- }
- CMP3_MCI.h可以在moodle裡找到
- CMP3_MCI.h要放在專案程式碼同一層
- MP3檔要放在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;///宣告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("drums.mp3");
- mp3.Play();
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
- glutCreateWindow("week12");
- glutDisplayFunc(display);
- glutKeyboardFunc(keyboard);
- glutMainLoop();
- }
- 改善PlaySound無法彈出和弦的問題(Do+Re+Mi一起按⇒只播一個音)
- 用CMP3_MCI.h可成功彈出和弦
- 原因:
- 因為需要[freeglut.dll]
- 解決方法:
➽小遊戲
- 一顆小球碰到牆會發出Do、Re、Mi、Fa、Sol
- #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;///ballX會加上dx, ballY會加上dy
- void display()
- {///想法: 可不可以做個小遊戲....有個球,會動來來動
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glPushMatrix();
- glTranslatef(ballX, ballY, 0);///移到ballX,ballY
- 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();
- 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("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();
- }


沒有留言:
張貼留言