2020年5月13日 星期三

欸你過來一下12

今天要先做出能播放聲音的程式
/*今天的部落格有小彩蛋喔*/
目標1:用1行播放WAV檔(PlaySound)

聽說用WAV比較簡單,一行就能解決d(`・∀・)b
▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼
#include <windows.h>
#include <mmsystem.h>
int main()
{///播聲音 正常ASCII檔名,空,聲音要同步
    PlaySoundA("Hahaha.wav",NULL,SND_SYNC);
}///檔案要放在freeglut/bin裡面
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

目標2:小鍵盤
可以自己隨時播放想要的音效了ヽ(✿゚▽゚)ノ

▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼
#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();
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

目標3:播放mp3
*要記得把老師給的檔案丟進去目前的專案資料夾喔
*不丟進去會無讀取mp3喔 ε٩(๑> ₃ <)۶з


▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼
#include <windows.h>
#include <mmsystem.h>
#include <GL/glut.h>
#include "CMP3_MCI.h" ///雙引號:在專案同一個目錄裡
CMP3_MCI 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);
    if(key=='0') PlaySoundA("pig.wav",NULL,SND_ASYNC);
}
int main(int argc, char**argv)
{
    mp3.Load("music.mp3");
    mp3.Play();
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("week12");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);///鍵盤函式
    glutMainLoop();
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

目標4:做出合弦音
剛剛所做的鍵盤一次只能按一個音(╥﹏╥)
因為PlaySound是一個古老的函式,所以...

▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼
#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();//PlaySoundA("do.wav",NULL,SND_ASYNC);
    if(key=='2') Re.Play();//PlaySoundA("re.wav",NULL,SND_ASYNC);
    if(key=='3') Mi.Play();//PlaySoundA("mi.wav",NULL,SND_ASYNC);
    if(key=='4') Fa.Play();//PlaySoundA("fa.wav",NULL,SND_ASYNC);
    if(key=='5') So.Play();//PlaySoundA("so.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("music.mp3");
    ///mp3.Play();///先不要播放mp3
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("week12");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);//鍵盤函式
    glutMainLoop();
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

目標5:CodeBlocks專案檔&目錄
把C:/......改掉 --> .
" . "代表目前檔案位置
記得把原本的檔案都丟到目前的專案資料夾去
不然會跑不出來喔 (^_っ^)



這個沒有程式碼喔
真是難得 ε٩(๑> ₃ <)۶з


目標6:綜合以上的練習
感謝小葉老師送給我們---超級最終版.cpp



真的太多了,回家在寫///再啦ㄍㄢˋ
▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼
#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();///TODO6: 備份
        glTranslatef(ballX, ballY, 0);///TODO6: 移到ballX,ballY
        glutSolidSphere(0.1, 30,30);///TODO6:圓球
    glPopMatrix();///TODO6:還原
    glutSwapBuffers();
}
void timer(int t)///TODO6: timer
{
    glutTimerFunc(50, timer, t+1);///TODO6: 用timer
    ballX+=dx; ballY+=dy;///TODO6: 球會動
    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();///TODO6: 重畫畫面
}
void mouse(int button, int state, int x, int y)///TODO6: mouse會有槍聲
{
    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");

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
    glutCreateWindow("week12 sound");
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutTimerFunc(50, timer, 0);///TODO6
    glutMouseFunc(mouse);///TODO6
    glutMainLoop();
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
偷偷跟老師抱怨一下
我覺得"傳送檔案"的功能,真的很煩
因為每次傳送完成,就會切換原本的視窗
導致部落格要一直重新打字,好討厭

沒有留言:

張貼留言