SoundManager::SoundPtr SoundManager::Load(const std::string& locator) { std::string file; file = "content/sounds/" + locator; SoundPtr sound = SoundPtr(new sf::SoundBuffer()); if(!sound->LoadFromFile(file)) return SoundPtr(); return sound; }
void Sound::pause() { AutoLocker<ThreadLock> myLocker(_myLock); AC_TRACE << "Sound::pause (" << _myURI << ")"; _myDecoder->pause(); _mySampleSink->pause(); _myLockedSelf = SoundPtr(); }
void Sound::update(double theTimeSlice) { AutoLocker<ThreadLock> myLocker(_myLock); double myBuffersFilledRatio = double(_mySampleSink->getBufferedTime())/ _myTargetBufferedTime; double myTimeToBuffer = double(_mySampleSink->getBufferedTime())+ myBuffersFilledRatio*theTimeSlice+ (1-myBuffersFilledRatio)*_myMaxUpdateTime; _myDecoder->setTime(getCurrentTime()); AC_TRACE << "Sound::update: " << hex << (void*)this << dec << " playing=" << isPlaying() << " decodingComplete=" << _myDecodingComplete; if (_myDecodingComplete && !isPlaying()) { AC_TRACE << "Sound::update: Playback complete"; _myDecodingComplete = false; _myLockedSelf = SoundPtr(); } if (!_myDecodingComplete) { bool myEOF = false; if (_myDecoder->isSyncDecoder()) { while (double(_mySampleSink->getBufferedTime()) < myTimeToBuffer && !myEOF) { myEOF = _myDecoder->decode(); } } else { if (_myDecoder->isEOF()) { myEOF = true; } } if (myEOF) { if (_myCacheItem && !_myCacheItem->isFull()) { _myCacheItem->doneCaching(_myDecoder->getCurFrame()); } if (_mySampleSink->getState() != HWSampleSink::STOPPED) { if (_myCacheItem && _myCacheItem->isFull() && !dynamic_cast<CacheReader *>(_myDecoder)) { AC_TRACE << " ----> Reading from cache."; delete _myDecoder; _myDecoder = new CacheReader(_myCacheItem); _myDecoder->setSampleSink(this); } if (_myIsLooping) { AC_TRACE << "Sound::update: Loop"; _myDecoder->seek(0); update(0.1); } else { AC_TRACE << "Sound::update: DecodingComplete"; _myDecodingComplete = true; _mySampleSink->stop(true); close(); } } } } }
void Sound::stop() { AutoLocker<ThreadLock> myLocker(_myLock); AC_TRACE << "Sound::stop (" << _myURI << ")"; _myDecoder->stop(); _mySampleSink->stop(); if (_myCacheItem) { _myCacheItem->doneCaching(); if (!_myCacheItem->isFull()) { _myCacheItem = SoundCacheItemPtr(); } } close(); _myLockedSelf = SoundPtr(); }
Sound::Sound (string myURI, IAudioDecoder * myDecoder, SoundCacheItemPtr myCacheItem, bool theLoop) : _myURI (myURI), _myDecoder(myDecoder), _myDecodingComplete(false), _myIsLooping(theLoop), _myTargetBufferedTime(1.0), _myMaxUpdateTime(0.2), _myCacheItem(myCacheItem) { AC_DEBUG << "Sound::Sound(" << myURI << ", loop: " << theLoop << ")"; _myLockedSelf = SoundPtr(); _mySampleSink = Pump::get().createSampleSink(myURI); _myDecoder->setSampleSink(this); AutoLocker<ThreadLock> myLocker(_mySoundsAllocatedLock); _myNumSoundsAllocated++; }
PlayerFactory::PlayerFactory( const unsigned char player_id, CameraPtr camera ) { FrameworkPtr fw = Framework::getInstance ( ); DevicePtr device = DevicePtr( new Device ); KeyboardPtr keyboad = KeyboardPtr( new Keyboard ); MousePtr mouse = MousePtr( new Mouse ); ClientPtr client = ClientPtr( new Client ); AppPtr app = AppPtr( new App( player_id ) ); ViewerPtr viewer = ViewerPtr( new Viewer ); DrawerPtr drawer = DrawerPtr( new Drawer( "../Resource" ) ); SoundPtr sound = SoundPtr( new Sound( ) ); if ( !camera ) { camera = PlayerCameraPtr( new PlayerCamera ); } fw->addTask( Device::getTag( ), device ); fw->addTask( Keyboard::getTag( ), keyboad ); fw->addTask( Mouse::getTag( ), mouse ); fw->addTask( Client::getTag( ), client ); fw->addTask( Viewer::getTag( ), viewer ); fw->addTask( Drawer::getTag( ), drawer ); fw->addTask( App::getTag( ), app ); fw->addTask( Camera::getTag( ), camera ); fw->addTask( Sound::getTag( ), sound ); }
void Sound::setSelf(const SoundPtr& mySelf) { _mySelf = mySelf; _myLockedSelf = SoundPtr(); }