2021年4月26日 星期一

Hello World_Week10

20210426 聲音&打光


今天學了要如何播放音樂

只要將音樂(wav檔)放到freeglut的bin資料夾裡面



再使用windiws套件中的PlatSound就可以播放音樂了!



#include <windows.h>
int main()
{
    PlaySound("pig.wav",NULL,SND_SYNC);
}

--------------------------------------------------------------------------------------------------------------------------

也可以用一樣的方式播很多段音樂



#include <windows.h>
int main()
{
    PlaySound("so.wav",NULL,SND_SYNC);
    PlaySound("mi.wav",NULL,SND_SYNC);
    PlaySound("mi.wav",NULL,SND_SYNC);
    PlaySound("fa.wav",NULL,SND_SYNC);
    PlaySound("re.wav",NULL,SND_SYNC);
    PlaySound("re.wav",NULL,SND_SYNC);
    PlaySound("do.wav",NULL,SND_SYNC);
    PlaySound("re.wav",NULL,SND_SYNC);
    PlaySound("mi.wav",NULL,SND_SYNC);
    PlaySound("fa.wav",NULL,SND_SYNC);
    PlaySound("so.wav",NULL,SND_SYNC);
    PlaySound("so.wav",NULL,SND_SYNC);
    PlaySound("so.wav",NULL,SND_SYNC);
}

--------------------------------------------------------------------------------------------------------------------------

因為音樂後面有一段沒聲音的部分

但用上面的方法就得等上一段完全播完才能播下一段

所以要用鍵盤來控制音樂播放的時間點



#include <windows.h>
#include <stdio.h>
int main()
{
    ///PlaySound("so.wav",NULL,SND_SYNC);///等待同步
    char c;
    while(1)
    {
        c=getchar();
        PlaySound("so.wav",NULL,SND_ASYNC);///不等待同步
    }
}

--------------------------------------------------------------------------------------------------------------------------

再來要用不同按鍵來播不同的聲音



#include <windows.h>
#include <stdio.h>
int main()
{
    ///PlaySound("so.wav",NULL,SND_SYNC);///等待同步
    char c;
    while(1)
    {
        c=getchar();
        if(c=='1') PlaySound("do.wav",NULL,SND_ASYNC);
        if(c=='2') PlaySound("re.wav",NULL,SND_ASYNC);
        if(c=='3') PlaySound("mi.wav",NULL,SND_ASYNC);
        if(c=='4') PlaySound("fa.wav",NULL,SND_ASYNC);
        if(c=='5') PlaySound("so.wav",NULL,SND_ASYNC);
        ///PlaySound("so.wav",NULL,SND_ASYNC);///不等待同步
    }
}

--------------------------------------------------------------------------------------------------------------------------

接下來要讓圖跟音樂一起出現



#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("do.wav",NULL,SND_ASYNC);
    if(key=='2') PlaySound("re.wav",NULL,SND_ASYNC);
    if(key=='3') PlaySound("mi.wav",NULL,SND_ASYNC);
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10 sound");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
}

--------------------------------------------------------------------------------------------------------------------------

然後要加入用滑鼠播放聲音的功能




#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)
{///按下鍵盤即可播放聲音(wav檔)
    if(key=='1') PlaySound("do.wav",NULL,SND_ASYNC);
    if(key=='2') PlaySound("re.wav",NULL,SND_ASYNC);
    if(key=='3') PlaySound("mi.wav",NULL,SND_ASYNC);
}
void mouse(int button,int state,int x,int y)
{///按下滑鼠即可播放槍聲(wav檔)
    if(state==GLUT_DOWN) PlaySound("shot.wav",NULL,SND_ASYNC);
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10 sound");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMainLoop();
}

--------------------------------------------------------------------------------------------------------------------------

前面播放的音樂都是wav檔的格式

接下來要改成播放mp3檔!

這邊要使用CMP3_MCI.h的套件 並跟程式碼放在同一個資料夾裡

要播放的mp3檔也是放在freeglut的bin資料夾裡面



這樣就可以載入及播放mp3檔了




接下來要學打光的方式

前面的茶壺因為沒有打光 所以看起來像是2D圖片

只要加上打光之後看起來就會變成3D物件了!





沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...