鍵盤事件
在預設程式碼中按下Ctrl+F找到keyboard函示
```
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key == 27) exit(1234); //按下esc鍵後關閉視窗並回傳1234
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week11");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
}
```
按下esc鍵後關閉視窗並回傳1234
播放音檔
音檔
wav: 檔案大,容易撥放
mp3: 經壓縮過所以檔案較小,不易播放
mp3: 經壓縮過所以檔案較小,不易播放
WAV檔
按下數字鍵1、2、3撥放音檔do.wav、re.wav、mi.wav
```
#include <windows.h>
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y) //絕對路徑要兩個反斜線
{
if(key == '1') PlaySound("D:\\222\\do.wav", NULL, SND_ASYNC);
if(key == '2') PlaySound("D:\\222\\re.wav", NULL, SND_ASYNC);
if(key == '3') PlaySound("D:\\222\\mi.wav", NULL, SND_ASYNC);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week11");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
}
```
直接撥放音檔需要修改compiler設定
在Linker setting裡的library新增winmm
```
#include <windows.h>
#include <stdio.h>
int main()
{
PlaySound("D:\\222\\do.wav", NULL, SND_SYNC);
PlaySound("D:\\222\\re.wav", NULL, SND_SYNC);
PlaySound("D:\\222\\mi.wav", NULL, SND_SYNC);
printf("Hello World");
}
```PlaySound函式的第三個參數:
SND_SYNC: 等待+同步,完整撥放音檔後繼續執行
SND_ASYNC: 不等待+不同步,執行下個指令時結束撥放
程式碼會在完整撥放三個音檔後才列印出"Hellow World"
兩個相同工作目錄(檔案與專案皆存在D:\\)下的檔案可以使用"相對路徑"以縮減程式碼:
PlaySound("222\\do.wav",NULL,SND_SYNC);
MP3檔案
播放MP3檔需使用外掛程式碼"CMP3_MCI.h"
將檔案存在專案資料夾內,和程式碼相同目錄
```
#include <windows.h>
#include <windows.h>
#include "CMP3_MCI.h" ///匯入外掛程式碼
CMP3_MCI myMP3; ///宣告物件變數
int main()
{
char filename[]= "222\\thereisareason.mp3";
myMP3.Load(filename);
myMP3.Play();
}
```
解決歷史餘毒(工作執行目錄)
把freeglut/bin裡的freeglut.dll複製到專案裡
音檔也複製到專案的目錄
把project-properties裡的build taregts工作執行目錄working dir改成小數點.代表同一目錄
音檔也複製到專案的目錄
把project-properties裡的build taregts工作執行目錄working dir改成小數點.代表同一目錄
沒有留言:
張貼留言