2014年12月18日木曜日

8.1.MP3 音声再生

せっかくなので、音声再生させます。
今はタイマでモデル更新していますが、音声の経過で更新するのが普通ですね。
MP3を mciSendString 関数を使って再生します

#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
#ifdef _DEBUG
#pragma comment(lib,"../../freeglut-2.8.1/lib/x86/Debug/freeglut.lib")
#else
#pragma comment(lib,"../../freeglut-2.8.1/lib/x86/freeglut.lib")
#endif
#ifdef _WIN32
#include     <windows.h>
#include     <Mmsystem.h>
#endif
#include     <stdio.h>
#include     <string.h>
#include     <GL/glut.h>

//----------------------------------------------------
void Initialize(void){}
//----------------------------------------------------
void Display(void) {
    glutSwapBuffers();
}
//----------------------------------------------------
void Idle(void){}
//----------------------------------------------------
void Keyboard( unsigned char key, int x, int y )
{
    HDC glDc = wglGetCurrentDC();
    HWND hWnd = WindowFromDC(glDc);

    switch( key )
    {
     case '\033':
      exit(0);
      break;
     case 's':
      mciSendString("stop ../Release/zzz.mp3",NULL,0,NULL);
      mciSendString("close ../Release/zzz.mp3",NULL,0,NULL);
      break;
     case 'p':
      mciSendString(TEXT("open ../Release/zzz.mp3"), NULL, 0, NULL);
      mciSendString(TEXT("play ../Release/zzz.mp3 notify"), NULL, 0, hWnd);
      break;
     default:
      break;
    }
}
//----------------------------------------------------
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);//環境の初期化
    glutInitWindowPosition(100, 100); // ウィンドウの位置
    glutInitWindowSize(640, 480);      // ウィンドウサイズ
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);//ディスプレイモードの指定
    glutCreateWindow("MP3 play");  //ウィンドウの作成
    glutDisplayFunc(Display); //描画時に呼び出される関数を指定する(関数名:Display)
    glutKeyboardFunc( keyboard );
    glutIdleFunc(Idle);       //プログラムアイドル状態時に呼び出される関数
    Initialize(); //初期設定の関数を呼び出す

    HDC glDc = wglGetCurrentDC();
    HWND hWnd = WindowFromDC(glDc);

    mciSendString(TEXT("open ../Release/zzz.mp3"), NULL, 0, NULL);
    mciSendString(TEXT("play ../Release/zzz.mp3 notify"), NULL, 0, hWnd);
    glutMainLoop();
    return 0;
}
GLUTを使っていますが、使う必要はありません。
せっかくですので keyboard をつかってSTOP/PLAYを実装しています。

0 件のコメント:

コメントを投稿