首先先複習上裡面的讀取音樂(NOW:1)
先用紅框的程式碼,去做使用,讓我們的音樂能撥放忘記擺設的話,可以回去上週的截圖中
接下來我們需要會使用MP3讀取(NOW:2)
外掛就在moodle上的CMP3 MCI.h把它放入專案黨上面就可以了,接下來就在這裡呼叫
接下來就是學習計時器應用(NOW:3)
紅框中 就是他們需要的 記得,這些在聲音計時有幫助
最後呢 就是使用內插法,把圖形去做規律旋轉(NOW:4)
原程式碼與註解在底下
#include <GL/glut.h>
#include <stdlib.h>
#include <windows.h>///NOW:1
#include <mmsystem.h>///NOW:1
#include "CMP3_MCI.h"///MP3的外掛 NOW:2
#include <stdio.h>
CMP3_MCI myMP3; ///宣告一個變數放置mp3 NOW:2
float angle=0, oldangle=0, newangle=90;///角度、舊角度、新角度 NOW:4
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1); ///照著角度去旋轉 NOW:4
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void timer(int t){
glutTimerFunc(1000, timer, t+1); ///要等多久, 要呼叫誰?, 參數 NOW:3
printf("Now t is : %d\n",t); ///看看已經經過幾秒了 NOW:3.5
///PlaySound("Do.wav", NULL, SND_ASYNC); ///NOW:3
float alpha= (t)/30.0; ///先算出一個內插的alpha值 NOW:4
angle = newangle * alpha + oldangle * (1-alpha);///把角度去做內插 NOW:4
glutPostRedisplay(); ///重新畫圖 NOW:4
}
int main(int argc, char *argv[])
{
///PlaySound("Do.wav",NULL,SND_ASYNC |SND_LOOP);///SND_LOOP會讓Do一直重複撥放 NOW:1
///myMP3.Load("listen.mp3");///讀入MP3檔案 NOW:2
///myMP3.Play();///撥放MP3
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutTimerFunc(5000, timer, 0); ///有一個計時器的函數timer NOW:3
glutDisplayFunc(display);
glutMainLoop();
}



沒有留言:
張貼留言