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