今はタイマでモデル更新していますが、音声の経過で更新するのが普通ですね。
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 件のコメント:
コメントを投稿