[Gcblue-commits] gcb_wx/src/common tcSound.cpp,1.22,1.23
Status: Alpha
Brought to you by:
ddcforge
|
From: Dewitt C. <ddc...@us...> - 2005-02-21 18:27:01
|
Update of /cvsroot/gcblue/gcb_wx/src/common In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22705/src/common Modified Files: tcSound.cpp Log Message: Replaced osgAL with OpenAL++ exclusively due to instability issues. Index: tcSound.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/common/tcSound.cpp,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** tcSound.cpp 18 Feb 2005 17:41:50 -0000 1.22 --- tcSound.cpp 21 Feb 2005 18:26:06 -0000 1.23 *************** *** 1,4 **** ! /* ! ** Copyright (C) 2003 Dewitt Cole (dew...@gl...) ** All rights reserved. --- 1,6 ---- ! /** ! ** @file tcSound.cpp ! */ ! /* Copyright (C) 2003-2005 Dewitt Colclough (de...@tw...) ** All rights reserved. *************** *** 38,41 **** --- 40,45 ---- #endif + using openalpp::Source; + /* With the "Enable minimum rebuild option" compiler error C1055 out of keys occurs ** with this file and several graphics files. The error started occuring after modifications *************** *** 46,139 **** ! /** ! * Based on osgAL example osgal.cpp from ! * http://www.vrlab.umu.se/research/osgAL/osgal.cpp ! */ ! osg::ref_ptr<osgAL::SoundNode> tcSound::CreateSound(const std::string& file) { ! // Create a sample, load a .wav file. ! openalpp::Sample *sample = osgAL::SoundManager::instance()->getSample(file.c_str()); ! ! // Create a named sound state. ! std::string stateName = "state_"; ! stateName += file; ! osgAL::SoundState* sound_state = new osgAL::SoundState(stateName); ! ! // Let the soundstate use the sample we just created ! sound_state->setSample(sample); ! ! // Set its gain (volume) to 0.9 ! sound_state->setGain(0.4f); ! ! // Set its pitch to 1 (normal speed) ! sound_state->setPitch(1); - // Make it play - sound_state->setPlay(true); - // The sound should loop over and over again - sound_state->setLooping(true); - // Allocate a hardware soundsource to this soundstate (priority 10) - // - sound_state->allocateSource(10, false); - - // At 40 the gain will be half of full! - sound_state->setReferenceDistance(10); - sound_state->apply(); ! // Add the soundstate to the sound manager, so we can find it later on if we want to ! osgAL::SoundManager::instance()->addSoundState(sound_state); ! ! // Create a sound node and attach the soundstate to it. ! osg::ref_ptr<osgAL::SoundNode> sound = new osgAL::SoundNode; ! sound->setSoundState(sound_state); ! return sound; ! } ! bool tcSound::GetMusicPause() const ! { ! wxASSERT(oggStreamer); ! return oggStreamer->GetPause(); } - bool tcSound::Init() { ! InitOsgAL(); ! ! effectMap["Explosion"] = osgAL::SoundManager::instance()->getSample("Explosion.wav"); ! effectMap["Implosion"] = osgAL::SoundManager::instance()->getSample("Implosion.wav"); ! effectMap["ShortBeep"] = osgAL::SoundManager::instance()->getSample("ShortBeep.wav"); ! effectMap["MissileLaunch"] = osgAL::SoundManager::instance()->getSample("MissileLaunch.wav"); ! effectMap["TwoBeeps"] = osgAL::SoundManager::instance()->getSample("TwoBeeps.wav"); ! effectMap["consolebeep"] = osgAL::SoundManager::instance()->getSample("consolebeep.wav"); ! effectMap["Beep2"] = osgAL::SoundManager::instance()->getSample("Beep2.wav"); ! effectMap["RejectBeep"] = osgAL::SoundManager::instance()->getSample("RejectBeep.wav"); ! effectMap["Ping"] = osgAL::SoundManager::instance()->getSample("Ping.wav"); ! effectMap["Ping2"] = osgAL::SoundManager::instance()->getSample("Ping2.wav"); ! effectMap["radarping"] = osgAL::SoundManager::instance()->getSample("radarping.wav"); ! effectMap["LowBeep"] = osgAL::SoundManager::instance()->getSample("LowBeep.wav"); ! effectMap["Bloop"] = osgAL::SoundManager::instance()->getSample("Bloop.wav"); ! effectMap["NoisyBeepLow"] = osgAL::SoundManager::instance()->getSample("NoisyBeepLow.wav"); ! effectMap["Thuck"] = osgAL::SoundManager::instance()->getSample("Thuck.wav"); ! effectMap["Explosion2"] = osgAL::SoundManager::instance()->getSample("Explosion2.wav"); ! effectMap["Welcome"] = osgAL::SoundManager::instance()->getSample("Welcome.wav"); ! effectMap["jetlaunch"] = osgAL::SoundManager::instance()->getSample("jetlaunch.wav"); ! effectMap["MutedBeep"] = osgAL::SoundManager::instance()->getSample("MutedBeep.wav"); ! effectMap["intercom"] = osgAL::SoundManager::instance()->getSample("intercom.wav"); ! effectMap["fslide"] = osgAL::SoundManager::instance()->getSample("fslide.wav"); ! effectMap["NavalGun1"] = osgAL::SoundManager::instance()->getSample("NavalGun1.wav"); ! effectMap["helolaunch"] = osgAL::SoundManager::instance()->getSample("helolaunch.wav"); ! effectMap["radar_on"] = osgAL::SoundManager::instance()->getSample("radar_on.wav"); ! effectMap["radar_off"] = osgAL::SoundManager::instance()->getSample("radar_off.wav"); ! effectMap["torpedo_launch"] = osgAL::SoundManager::instance()->getSample("torpedo_launch.wav"); ! effectMap["shishding"] = osgAL::SoundManager::instance()->getSample("shishding.wav"); ! oggStreamer->Init(); SetMusicVolume(0.5f); --- 50,112 ---- ! bool tcSound::GetMusicPause() const { ! //wxASSERT(oggStreamer); ! if (!oggStreamer) return false; ! return oggStreamer->GetPause(); ! } ! /** ! * ! */ ! openalpp::Sample* tcSound::LoadSample(const std::string& file) ! { ! static std::string pathPrefix("sound\\wav\\"); ! std::string filePath = pathPrefix + file; + // Create a sample, load a .wav file. + openalpp::Sample* sample = new openalpp::Sample(filePath); ! return sample; } bool tcSound::Init() { + InitOpenAL(); ! effectMap["Explosion"] = LoadSample("Explosion.wav"); ! effectMap["Implosion"] = LoadSample("Implosion.wav"); ! effectMap["ShortBeep"] = LoadSample("ShortBeep.wav"); ! effectMap["MissileLaunch"] = LoadSample("MissileLaunch.wav"); ! effectMap["TwoBeeps"] = LoadSample("TwoBeeps.wav"); ! effectMap["consolebeep"] = LoadSample("consolebeep.wav"); ! effectMap["Beep2"] = LoadSample("Beep2.wav"); ! effectMap["RejectBeep"] = LoadSample("RejectBeep.wav"); ! effectMap["Ping"] = LoadSample("Ping.wav"); ! effectMap["Ping2"] = LoadSample("Ping2.wav"); ! effectMap["radarping"] = LoadSample("radarping.wav"); ! effectMap["LowBeep"] = LoadSample("LowBeep.wav"); ! effectMap["Bloop"] = LoadSample("Bloop.wav"); ! effectMap["NoisyBeepLow"] = LoadSample("NoisyBeepLow.wav"); ! effectMap["Thuck"] = LoadSample("Thuck.wav"); ! effectMap["Explosion2"] = LoadSample("Explosion2.wav"); ! effectMap["Welcome"] = LoadSample("Welcome.wav"); ! effectMap["jetlaunch"] = LoadSample("jetlaunch.wav"); ! effectMap["MutedBeep"] = LoadSample("MutedBeep.wav"); ! effectMap["intercom"] = LoadSample("intercom.wav"); ! effectMap["fslide"] = LoadSample("fslide.wav"); ! effectMap["NavalGun1"] = LoadSample("NavalGun1.wav"); ! effectMap["helolaunch"] = LoadSample("helolaunch.wav"); ! effectMap["radar_on"] = LoadSample("radar_on.wav"); ! effectMap["radar_off"] = LoadSample("radar_off.wav"); ! effectMap["torpedo_launch"] = LoadSample("torpedo_launch.wav"); ! effectMap["shishding"] = LoadSample("shishding.wav"); ! if (oggStreamer) oggStreamer->Init(); SetMusicVolume(0.5f); *************** *** 142,154 **** } - /** - * @return osgAL::SoundRoot to add to scene graph - */ - osgAL::SoundRoot* tcSound::GetSoundRoot() - { - wxASSERT(soundRoot.valid()); - return soundRoot.get(); - } /** --- 115,119 ---- *************** *** 156,218 **** * startup. */ ! void tcSound::InitOsgAL() { ! osgAL::SoundManager::instance()->init(16); ! osgAL::SoundManager::instance()->getEnvironment()->setDistanceModel(openalpp::InverseDistance); ! osgAL::SoundManager::instance()->getEnvironment()->setDopplerFactor(1); ! ! osgAL::SoundManager::instance()->addFilePath("sound\\wav"); ! ! // Create ONE (only one, otherwise the transformation of the listener and update for SoundManager will be ! // called several times, which is not catastrophic, but unnecessary) ! // SoundRoot that will make sure the listener is updated and ! // to keep the internal state of the SoundManager updated ! // This could also be done manually, this is just a handy way of doing it. ! if (!soundRoot.valid()) ! { ! soundRoot = new osgAL::SoundRoot; ! } ! ! // create SoundState's to use as buffers for (size_t n=0; n<N_EFFECT_BUFFERS; n++) { wxString stateName = wxString::Format("state%d", n); ! osgAL::SoundState* soundState = new osgAL::SoundState(stateName.c_str()); ! ! soundState->setAmbient(true); ! soundState->setGain(0.5f); // Set its gain (volume) ! soundState->setPitch(1); // Set its pitch to 1 (normal speed) ! soundState->setRelative(true); ! soundState->setPosition(osg::Vec3(0,0,0)); ! soundState->setLooping(false); ! soundState->setStopMethod(openalpp::Stopped); ! ! // Allocate a hardware soundsource to this soundstate (priority 10) ! // soundState->allocateSource(10, false); ! ! // Add the soundstate to the sound manager, so we can find it later on if we want to ! osgAL::SoundManager::instance()->addSoundState(soundState); ! ! effectBuffer.push_back(soundState); available.push_back(n); } } - /** - * - */ - void tcSound::SetListenerDirection(const osg::Vec3& dir) - { - osgAL::SoundManager::instance()->setListenerDirection(dir); - } - - /** - * Set the transformation matrix for the listener - */ - void tcSound::SetListenerMatrix(const osg::Matrix& matrix) - { - osgAL::SoundManager::instance()->setListenerMatrix(matrix); - } --- 121,142 ---- * startup. */ ! void tcSound::InitOpenAL() { ! // create Sources's to use as buffers for (size_t n=0; n<N_EFFECT_BUFFERS; n++) { wxString stateName = wxString::Format("state%d", n); ! openalpp::ref_ptr<Source> source = new Source; ! source->stop(); ! source->setAmbient(); ! source->setGain(0.5f); // volume ! source->setLooping(false); ! ! effectBuffer.push_back(source); available.push_back(n); } } *************** *** 249,253 **** { if (!mbInitialized) return; ! std::string musicPath = OGG_PATH; musicPath += song; --- 173,177 ---- { if (!mbInitialized) return; ! if (!oggStreamer) return; std::string musicPath = OGG_PATH; musicPath += song; *************** *** 263,267 **** { if (!mbInitialized) return; ! oggStreamer->Queue(song); } --- 187,191 ---- { if (!mbInitialized) return; ! if (oggStreamer) oggStreamer->Queue(song); } *************** *** 269,272 **** --- 193,197 ---- { if (!mbInitialized) return; + if (!oggStreamer) return; wxArrayString fileList; *************** *** 282,286 **** { if (!mbInitialized) return; ! oggStreamer->Seek(seekTime); } --- 207,211 ---- { if (!mbInitialized) return; ! if (oggStreamer) oggStreamer->Seek(seekTime); } *************** *** 288,292 **** { if (!mbInitialized) return; ! oggStreamer->SetPause(state); } --- 213,217 ---- { if (!mbInitialized) return; ! if (oggStreamer) oggStreamer->SetPause(state); } *************** *** 296,300 **** { if (!mbInitialized) return; ! oggStreamer->SetVolume(vol); } --- 221,225 ---- { if (!mbInitialized) return; ! if (oggStreamer) oggStreamer->SetVolume(vol); } *************** *** 315,319 **** { StopMusic(mnCurrentTrack); ! oggStreamer->Stop(); } } --- 240,244 ---- { StopMusic(mnCurrentTrack); ! if (oggStreamer) oggStreamer->Stop(); } } *************** *** 333,336 **** --- 258,263 ---- { if (!mbInitialized) return; + if (!oggStreamer) return; + if (meMusicState == MS_STOPPED) return; if (!oggStreamer->Update()) *************** *** 418,422 **** for(size_t i=0; i<effectBuffer.size(); i++) { ! if (!effectBuffer[i]->isPlaying()) { ReleaseEffectBuffer(i); --- 345,349 ---- for(size_t i=0; i<effectBuffer.size(); i++) { ! if (effectBuffer[i]->getState() != openalpp::Playing) { ReleaseEffectBuffer(i); *************** *** 451,456 **** wxASSERT(effectBuffer[bufferIdx].valid()); ! effectBuffer[bufferIdx]->setPlay(false); ! if (effectBuffer[bufferIdx]->getSource()) effectBuffer[bufferIdx]->releaseSource(); available.push_back((size_t)bufferIdx); } --- 378,382 ---- wxASSERT(effectBuffer[bufferIdx].valid()); ! effectBuffer[bufferIdx]->stop(); /// previous Sample remains in buffer until reset available.push_back((size_t)bufferIdx); } *************** *** 464,468 **** ReleaseStoppedBuffers(); ! std::map<std::string, openalpp::Sample*>::const_iterator mapIter; mapIter = effectMap.find(effectName); --- 390,394 ---- ReleaseStoppedBuffers(); ! std::map<std::string, openalpp::ref_ptr<openalpp::Sample> >::iterator mapIter; mapIter = effectMap.find(effectName); *************** *** 473,477 **** return; } ! openalpp::Sample* sample = mapIter->second; int nFreeBufferIdx = GetEffectBuffer(); // returns -1 if none available --- 399,403 ---- return; } ! openalpp::Sample* sample = mapIter->second.get(); int nFreeBufferIdx = GetEffectBuffer(); // returns -1 if none available *************** *** 481,491 **** } ! osgAL::SoundState* soundState = effectBuffer[nFreeBufferIdx].get(); ! soundState->setSample(sample); ! if (!soundState->getSource()) ! { ! soundState->allocateSource(10, false); ! } ! soundState->setPlay(true); } --- 407,414 ---- } ! openalpp::Source* source = effectBuffer[nFreeBufferIdx].get(); ! wxASSERT(source); ! source->setSound(sample); ! source->play(); } *************** *** 520,526 **** effectMap.clear(); ! oggStreamer->Release(); ! osgAL::SoundManager::instance()->shutdown(); mbInitialized = false; --- 443,449 ---- effectMap.clear(); ! if (oggStreamer) oggStreamer->Release(); ! //osgAL::SoundManager::instance()->shutdown(); mbInitialized = false; *************** *** 550,554 **** std::cout << "Creating OGG streamer" << std::endl; ! oggStreamer = new tcOggStreamer(); std::cout << "Success - Create OGG streamer" << std::endl; } --- 473,477 ---- std::cout << "Creating OGG streamer" << std::endl; ! oggStreamer = 0;//new tcOggStreamer(); std::cout << "Success - Create OGG streamer" << std::endl; } |