int main() { // Initialization //-------------------------------------------------------------------------------------- int screenWidth = 800; int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [audio] example - music playing (streaming)"); InitAudioDevice(); // Initialize audio device PlayMusicStream("resources/audio/guitar_noodling.ogg"); // Play music stream int framesCounter = 0; float timePlayed = 0.0f; //float volume = 1.0; SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- framesCounter++; // Testing music fading from one file to another /* if (framesCounter > 600) // Wait for 10 seconds (600 frames) { volume -= 0.01; // Decrement music volume level // When music volume level equal or lower than 0, // restore volume level and init another music file if (volume <= 0) { volume = 1.0; framesCounter = 0; PlayMusicStream("resources/audio/another_file.ogg"); } SetMusicVolume(volume); } */ if (IsWindowMinimized()) PauseMusicStream(); else ResumeMusicStream(); timePlayed = GetMusicTimePlayed()/GetMusicTimeLength()*100*4; // We scale by 4 to fit 400 pixels UpdateMusicStream(); // Update music buffer with new stream data //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(RAYWHITE); DrawText("MUSIC SHOULD BE PLAYING!", 255, 200, 20, LIGHTGRAY); DrawRectangle(200, 250, 400, 12, LIGHTGRAY); DrawRectangle(200, 250, (int)timePlayed, 12, MAROON); EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- CloseAudioDevice(); // Close audio device (music streaming is automatically stopped) CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; }
// Main message pump //----------------------------------------------------------------------------- int CPUTWindowWin::StartMessageLoop() { // Clear message queue MSG msg; //for(;;) //{ // while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) // { // if (msg.message == WM_DESTROY) // return CPUT_ERROR; // TranslateMessage( &msg ); // DispatchMessage( &msg ); // // } //} // // Message pump // bool fRunning = true; while(fRunning) { // PeekMessage() is a passthru on no events // so it allows us to render while no events are present if( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) { if (msg.message == WM_QUIT) { PostQuitMessage(0); fRunning = false; } TranslateMessage( &msg ); DispatchMessage( &msg ); } else if (IsWindowMinimized()) { Sleep(100); } else { // trigger render and other calls for (const auto &callBack : mLoopEventCallbacks) { callBack(); } } } Destroy(); // // Drain out the rest of the message queue. // while( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } uint32_t numWChars = MultiByteToWideChar(CP_UTF8, 0, mAppTitle.c_str(), -1, NULL, 0); wchar_t* wstr = new wchar_t[numWChars]; MultiByteToWideChar(CP_UTF8, 0, mAppTitle.c_str(), -1, wstr, numWChars); if (UnregisterClass(wstr, mhInstance) == 0) { HandleWin32Error(); } delete[] wstr; // // Set the window handle to NULL to indicate window shutdown is complete // mhWnd = NULL; // return code mAppClosedReturnCode = (int) msg.wParam; return mAppClosedReturnCode; }
// Main message pump //----------------------------------------------------------------------------- int CPUTWindowWin::StartMessageLoop() { // Clear message queue MSG msg; //for(;;) //{ // while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) // { // if (msg.message == WM_DESTROY) // return CPUT_ERROR; // TranslateMessage( &msg ); // DispatchMessage( &msg ); // // } //} // // Message pump // bool fRunning = true; while(fRunning) { // PeekMessage() is a passthru on no events // so it allows us to render while no events are present if( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) { if (msg.message == WM_QUIT) { PostQuitMessage(0); fRunning = false; } TranslateMessage( &msg ); DispatchMessage( &msg ); } else if (IsWindowMinimized()) { Sleep(100); } else { // trigger render and other calls mCPUT->InnerExecutionLoop(); } } // // Drain out the rest of the message queue. // while( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } if (UnregisterClass(mAppTitle.c_str(), mhInst) == 0) { HandleWin32Error(); } // // Set the window handle to NULL to indicate window shutdown is complete // mhWnd = NULL; // return code mAppClosedReturnCode = (int) msg.wParam; return mAppClosedReturnCode; }