// Initialize WIN32 & OpenSG and set up the scene int main(int argc, char **argv) { std::cout << "\n\nKEY COMMANDS:" << std::endl << "space Play/Pause the playing sounds" << std::endl << "1 Play Pop Sound" << std::endl << "2 Play Click Sound" << std::endl << "CTRL-Q Exit\n\n" << std::endl; // OSG init osgInit(argc,argv); { // Set up Window WindowEventProducerRecPtr TutorialWindow = createNativeWindow(); TutorialWindow->initWindow(); // Create the SimpleSceneManager helper SimpleSceneManager sceneManager; TutorialWindow->setDisplayCallback(boost::bind(display, &sceneManager)); TutorialWindow->setReshapeCallback(boost::bind(reshape, _1, &sceneManager)); // Tell the Manager what to manage sceneManager.setWindow(TutorialWindow); //Attach to events TutorialWindow->connectMousePressed(boost::bind(mousePressed, _1, &sceneManager)); TutorialWindow->connectMouseReleased(boost::bind(mouseReleased, _1, &sceneManager)); TutorialWindow->connectMouseMoved(boost::bind(mouseMoved, _1, &sceneManager)); TutorialWindow->connectMouseDragged(boost::bind(mouseDragged, _1, &sceneManager)); TutorialWindow->connectMouseWheelMoved(boost::bind(mouseWheelMoved, _1, &sceneManager)); // create the scene NodeUnrecPtr scene = makeTorus(1.0, 2.0, 16, 16); //Initialize the Sound Manager SoundManager::the()->attachUpdateProducer(TutorialWindow); SoundManager::the()->setCamera(sceneManager.getCamera()); //Create Pop Sound SoundRecPtr ZapSound = SoundManager::the()->createSound(); ZapSound->setFile(BoostPath("./Data/zap.wav")); ZapSound->setVolume(1.0); ZapSound->setStreaming(false); ZapSound->setLooping(1); //Attach Sound Events ZapSound->connectSoundPlayed (boost::bind(handleSoundPlayed, _1)); ZapSound->connectSoundStopped (boost::bind(handleSoundStopped, _1)); ZapSound->connectSoundPaused (boost::bind(handleSoundPaused, _1)); ZapSound->connectSoundUnpaused(boost::bind(handleSoundUnpaused, _1)); ZapSound->connectSoundLooped (boost::bind(handleSoundLooped, _1)); //Create Click Sound SoundRecPtr ClickSound = SoundManager::the()->createSound(); ClickSound->setFile(BoostPath("./Data/click.wav")); ClickSound->setVolume(1.0); ClickSound->setStreaming(false); ClickSound->setLooping(0); //Attach Sound Events ClickSound->connectSoundPlayed (boost::bind(handleSoundPlayed, _1)); ClickSound->connectSoundStopped (boost::bind(handleSoundStopped, _1)); ClickSound->connectSoundPaused (boost::bind(handleSoundPaused, _1)); ClickSound->connectSoundUnpaused(boost::bind(handleSoundUnpaused, _1)); ClickSound->connectSoundLooped (boost::bind(handleSoundLooped, _1)); TutorialWindow->connectKeyTyped(boost::bind(&KeyTypedHandler::keyTyped, _1, ZapSound.get(), ClickSound.get())); // tell the manager what to manage sceneManager.setRoot (scene); // show the whole scene sceneManager.showAll(); Vec2f WinSize(TutorialWindow->getDesktopSize() * 0.85f); Pnt2f WinPos((TutorialWindow->getDesktopSize() - WinSize) *0.5); TutorialWindow->openWindow(WinPos, WinSize, "01 DefaultSound Window"); //Enter main loop TutorialWindow->mainLoop(); } osgExit(); return 0; }
// Initialize WIN32 & OpenSG and set up the scene int main(int argc, char **argv) { // OSG init osgInit(argc,argv); { // Set up Window WindowEventProducerRecPtr TutorialWindow = createNativeWindow(); TutorialWindow->initWindow(); // Create the SimpleSceneManager helper SimpleSceneManager sceneManager; TutorialWindow->setDisplayCallback(boost::bind(display, &sceneManager)); TutorialWindow->setReshapeCallback(boost::bind(reshape, _1, &sceneManager)); // Tell the Manager what to manage sceneManager.setWindow(TutorialWindow); //Attach to events TutorialWindow->connectMousePressed(boost::bind(mousePressed, _1, &sceneManager)); TutorialWindow->connectMouseReleased(boost::bind(mouseReleased, _1, &sceneManager)); TutorialWindow->connectMouseDragged(boost::bind(mouseDragged, _1, &sceneManager)); TutorialWindow->connectMouseWheelMoved(boost::bind(mouseWheelMoved, _1, &sceneManager)); //Sound Emitter Node SoundEmitterRecPtr TheEmitter = SoundEmitter::create(); TheEmitter->attachUpdateProducer(TutorialWindow); NodeUnrecPtr TheEmitterNode = Node::create(); TheEmitterNode->setCore(TheEmitter); //Sphere Transformation Node Matrix Translate; Translate.setTranslate(0.0,0.0,-5.0); Matrix Rotation; Rotation.setRotate(Quaternion(Vec3f(0.0,1.0,0.0), 0.0)); Matrix Total(Translate); Total.mult(Rotation); TransformRecPtr TheSphereTransform = Transform::create(); TheSphereTransform->setMatrix(Total); NodeUnrecPtr SphereTransformNode = Node::create(); SphereTransformNode->setCore(TheSphereTransform); SphereTransformNode->addChild(makeSphere(2, 1.0)); SphereTransformNode->addChild(TheEmitterNode); // create the scene NodeUnrecPtr scene = Node::create(); scene->setCore(Group::create()); scene->addChild(SphereTransformNode); // tell the manager what to manage sceneManager.setRoot (scene); CameraUnrecPtr TheCamera = sceneManager.getCamera(); TheCamera->setNear(0.1); TheCamera->setFar(100.0); //Initialize the Sound Manager SoundManager::the()->attachUpdateProducer(TutorialWindow); SoundManager::the()->setCamera(sceneManager.getCamera()); SoundRecPtr PopSound = SoundManager::the()->createSound(); PopSound->setFile(BoostPath("./Data/pop.wav")); PopSound->setVolume(1.0); PopSound->setStreaming(false); PopSound->setLooping(-1); PopSound->setEnable3D(true); PopSound->connectSoundPlayed (boost::bind(handleSoundPlayed, _1)); PopSound->connectSoundStopped (boost::bind(handleSoundStopped, _1)); PopSound->connectSoundPaused (boost::bind(handleSoundPaused, _1)); PopSound->connectSoundUnpaused(boost::bind(handleSoundUnpaused, _1)); PopSound->connectSoundLooped (boost::bind(handleSoundLooped, _1)); //Attach this sound to the emitter node TheEmitter->setSound(PopSound); TutorialWindow->connectKeyTyped(boost::bind(keyTyped, _1, TheEmitter.get())); TutorialWindow->connectUpdate(boost::bind(handleUpdate, _1, TheSphereTransform.get())); //Create the Documentation SimpleScreenDoc TheSimpleScreenDoc(&sceneManager, TutorialWindow); Vec2f WinSize(TutorialWindow->getDesktopSize() * 0.85f); Pnt2f WinPos((TutorialWindow->getDesktopSize() - WinSize) *0.5); TutorialWindow->openWindow(WinPos, WinSize, "02 Sound3D Window"); //Enter main loop TutorialWindow->mainLoop(); } osgExit(); return 0; }