Sound* SoundManager::Create(const String& pSoundFileName, Bool pIs3DSound) { // Ask the sound subsystem to create a sound for us. Sound* sound = Cast<Sound>(SoundSubsystem::Instance()->Create(Sound::StaticClass())); std::map<String, SoundData*>::iterator itFind = mLoadedSounds.find(pSoundFileName); if(itFind != mLoadedSounds.end()) { itFind->second->AddRef(); sound->Create(itFind->second, pIs3DSound); } else { ResourceImporter* importer = ResourceManager::Instance()->GetImporterForFile(pSoundFileName, SoundData::StaticClass()); GD_ASSERT(importer); SoundData* soundData = Cast<SoundData>(importer->Import(pSoundFileName)); mLoadedSounds[pSoundFileName] = soundData; sound->Create(soundData, pIs3DSound); sound->AddRef(); } sound->Init(); return sound; }