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;
}