HRESULT CBSoundMgr::InitLoop() { if(!m_SoundAvailable) return S_OK; BASS_Update(500); return S_OK; }
int main(int argc, char *argv[]) { int ret = 0; try { // initialize directx IDirect3D9 *d3d = Direct3DCreate9(D3D_SDK_VERSION); if (!d3d) throw std::string("This application requires DirectX 9"); // create a window HWND hwnd = CreateWindowEx(0, "static", "GNU Rocket Example", WS_POPUP | WS_VISIBLE, 0, 0, width, height, 0, 0, GetModuleHandle(0), 0); // create the device IDirect3DDevice9 *device = NULL; static D3DPRESENT_PARAMETERS present_parameters = {width, height, D3DFMT_X8R8G8B8, 3, D3DMULTISAMPLE_NONE, 0, D3DSWAPEFFECT_DISCARD, 0, WINDOWED, 1, D3DFMT_D24S8, 0, WINDOWED ? 0 : D3DPRESENT_RATE_DEFAULT, 0 }; if (FAILED(d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &present_parameters, &device))) throw std::string("Failed to create device"); // init BASS int soundDevice = 1; if (!BASS_Init(soundDevice, 44100, 0, hwnd, 0)) throw std::string("Failed to init bass"); // load tune HSTREAM stream = BASS_StreamCreateFile(false, "tune.ogg", 0, 0, BASS_MP3_SETPOS | (!soundDevice ? BASS_STREAM_DECODE : 0)); if (!stream) throw std::string("Failed to open tune"); // let's just assume 150 BPM (this holds true for the included tune) float bpm = 150.0f; // setup timer and construct sync-device BassTimer timer(stream, bpm, 8); std::auto_ptr<sync::Device> syncDevice = std::auto_ptr<sync::Device>( sync::createDevice("sync", timer)); if (!syncDevice.get()) throw std::string("Failed to connect to host?"); // get tracks sync::Track &clearRTrack = syncDevice->getTrack("clear.r"); sync::Track &clearGTrack = syncDevice->getTrack("clear.g"); sync::Track &clearBTrack = syncDevice->getTrack("clear.b"); sync::Track &camRotTrack = syncDevice->getTrack("cam.rot"); sync::Track &camDistTrack = syncDevice->getTrack("cam.dist"); LPD3DXMESH cubeMesh = NULL; if (FAILED(D3DXCreateBox(device, 1.0f, 1.0f, 1.0f, &cubeMesh, NULL))) return -1; // let's roll! BASS_Start(); timer.play(); bool done = false; while (!done) { float row = float(timer.getRow()); if (!syncDevice->update(row)) done = true; // setup clear color D3DXCOLOR clearColor(clearRTrack.getValue(row), clearGTrack.getValue(row), clearBTrack.getValue(row), 0.0); // paint the window device->BeginScene(); device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, clearColor, 1.0f, 0); /* D3DXMATRIX world; device->SetTransform(D3DTS_WORLD, &world); */ float rot = camRotTrack.getValue(row); float dist = camDistTrack.getValue(row); D3DXVECTOR3 eye(sin(rot) * dist, 0, cos(rot) * dist); D3DXVECTOR3 at(0, 0, 0); D3DXVECTOR3 up(0, 1, 0); D3DXMATRIX view; D3DXMatrixLookAtLH(&view, &(eye + at), &at, &up); device->SetTransform(D3DTS_WORLD, &view); D3DXMATRIX proj; D3DXMatrixPerspectiveFovLH(&proj, D3DXToRadian(60), 4.0f / 3, 0.1f, 1000.f); device->SetTransform(D3DTS_PROJECTION, &proj); cubeMesh->DrawSubset(0); device->EndScene(); device->Present(0, 0, 0, 0); BASS_Update(0); // decrease the chance of missing vsync MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); if (WM_QUIT == msg.message) done = true; if ((WM_KEYDOWN == msg.message) && (VK_ESCAPE == LOWORD(msg.wParam))) done = true; } } BASS_StreamFree(stream); BASS_Free(); device->Release(); d3d->Release(); DestroyWindow(hwnd); } catch (const std::exception &e) { #ifdef _CONSOLE fprintf(stderr, "*** error: %s\n", e.what()); #else MessageBox(NULL, e.what(), NULL, MB_OK | MB_ICONERROR | MB_SETFOREGROUND); #endif ret = -1; } catch (const std::string &str) { #ifdef _CONSOLE fprintf(stderr, "*** error: %s\n", str.c_str()); #else MessageBox(NULL, e.what(), NULL, MB_OK | MB_ICONERROR | MB_SETFOREGROUND); #endif ret = -1; } return ret; }
/************************************************************************* * Main entrypoint for debug build *************************************************************************/ int WINAPI WinMain(HINSTANCE instance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; g_hInstance = GetModuleHandle(0); OutputDebugString("Starting...\n"); if (!WindowOpen()) { OutputDebugString("Failed to open window\n"); WindowClose(); return 0; } if (FAILED(InitDevice())) { CleanupDevice(); return 0; } IntroInit(); InitSound(); while (!g_done) { g_currentFrame++; g_lastTime = g_currentTime; g_currentPos = BASS_ChannelGetPosition(g_stream, BASS_POS_BYTE); g_currentTime = BASS_ChannelBytes2Seconds(g_stream, g_currentPos); if (g_pause) { Sleep(100); } while (PeekMessage(&msg,0,0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) { g_done = true; } TranslateMessage(&msg); DispatchMessage(&msg); if (WM_KEYDOWN == msg.message && VK_SPACE == LOWORD(msg.wParam)) { if (!g_pause) { BASS_ChannelPause(g_stream); g_pause = true; } else { BASS_ChannelPlay(g_stream, false); g_pause = false; } } if (WM_KEYDOWN == msg.message && VK_LEFT == LOWORD(msg.wParam)) { if (g_pause) { BASS_ChannelSetPosition(g_stream, g_currentPos-44100, BASS_POS_BYTE); } else { BASS_ChannelSetPosition(g_stream, g_currentPos-44100*4, BASS_POS_BYTE); } } if (WM_KEYDOWN == msg.message && VK_RIGHT == LOWORD(msg.wParam)) { if (g_pause) { BASS_ChannelSetPosition(g_stream, g_currentPos+44100, BASS_POS_BYTE); } else { BASS_ChannelSetPosition(g_stream, g_currentPos+44100*4, BASS_POS_BYTE); } } if (WM_KEYDOWN == msg.message && VK_DOWN == LOWORD(msg.wParam)) { BASS_ChannelSetPosition(g_stream, g_currentPos-44100*20, BASS_POS_BYTE); } if (WM_KEYDOWN == msg.message && VK_UP == LOWORD(msg.wParam)) { BASS_ChannelSetPosition(g_stream, g_currentPos+44100*20, BASS_POS_BYTE); } if (WM_KEYDOWN == msg.message && VK_F1 == LOWORD(msg.wParam)) { g_repeatStart = g_currentPos; g_repeatEnd = LONG_MAX; } if (WM_KEYDOWN == msg.message && VK_F2 == LOWORD(msg.wParam)) { g_repeatEnd = g_currentPos; } if (WM_KEYDOWN == msg.message && VK_RETURN == LOWORD(msg.wParam)) { g_repeatStart = 0; g_repeatEnd = LONG_MAX; } } IntroLoop((long)(g_currentTime*44100.0)); UpdateTitle(); if (g_currentPos > g_repeatEnd) { BASS_ChannelSetPosition(g_stream, g_repeatStart, BASS_POS_BYTE); } BASS_Update(0); } BASS_StreamFree(g_stream); BASS_Free(); WindowClose(); return 0; }
int main(int argc, char *argv[]) { #ifndef SYNC_PLAYER bool should_save = false; // whether to save tracks when done. // don't save unless we actually connect. #endif HSTREAM stream; const struct sync_track *clear_r, *clear_g, *clear_b; const struct sync_track *cam_rot, *cam_dist; setup_sdl(); /* init BASS */ if (!BASS_Init(-1, 44100, 0, 0, 0)) die("failed to init bass"); stream = BASS_StreamCreateFile(false, "tune.ogg", 0, 0, BASS_STREAM_PRESCAN); if (!stream) die("failed to open tune"); sync_device *rocket = sync_create_device("sync"); if (!rocket) die("out of memory?"); #ifndef SYNC_PLAYER if (sync_connect(rocket, "localhost", SYNC_DEFAULT_PORT)) die("failed to connect to host"); #endif /* get tracks */ clear_r = sync_get_track(rocket, "clear.r"); clear_g = sync_get_track(rocket, "clear.g"); clear_b = sync_get_track(rocket, "clear.b"); cam_rot = sync_get_track(rocket, "cam.rot"), cam_dist = sync_get_track(rocket, "cam.dist"); /* let's roll! */ BASS_Start(); BASS_ChannelPlay(stream, false); bool done = false; while (!done) { double row = bass_get_row(stream); #ifndef SYNC_PLAYER if (sync_update(rocket, (int)floor(row), &bass_cb, (void *)&stream)) { if (sync_connect(rocket, "localhost", SYNC_DEFAULT_PORT) == 0) should_save = true; } #endif /* draw */ glClearColor(float(sync_get_val(clear_r, row)), float(sync_get_val(clear_g, row)), float(sync_get_val(clear_b, row)), 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); float rot = float(sync_get_val(cam_rot, row)); float dist = float(sync_get_val(cam_dist, row)); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0f, 4.0f / 3, 0.1f, 100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glPushMatrix(); gluLookAt(sin(rot) * dist, 0, cos(rot) * dist, 0, 0, 0, 0, 1, 0); glEnable(GL_DEPTH_TEST); draw_cube(); glPopMatrix(); SDL_GL_SwapBuffers(); BASS_Update(0); /* decrease the chance of missing vsync */ SDL_Event e; while (SDL_PollEvent(&e)) { if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) done = true; } } #ifndef SYNC_PLAYER if(should_save) //don't clobber if user just ran it then hit Esc sync_save_tracks(rocket); #endif sync_destroy_device(rocket); BASS_StreamFree(stream); BASS_Free(); SDL_Quit(); return 0; }