void * SoundManager::playSoundOnce(const char * soundId, const bool isMusic, const bool update)
{
    if (0 == strcmp(soundId, "")) return nullptr;
    
#ifdef FMOD_ACTIVE
    FMOD::Studio::ID sndID = {0};
    ERRCHECK(_system->lookupID(soundId, &sndID));
    FMOD::Studio::EventDescription* sndDescription = NULL;
    ERRCHECK(_system->getEventByID(&sndID, &sndDescription) );
    
    bool isOneShot;
    sndDescription->isOneshot(&isOneShot);
    if (!isOneShot)
    {
        CCLOG("ATTENZIONE: Il suono non è fire and forget");
    }
    
    FMOD::Studio::EventInstance* instance = NULL;
    ERRCHECK(sndDescription->createInstance(&instance));
    
    this->setVolumeForSound(instance, isMusic);
    
    ERRCHECK(instance->start());
    ERRCHECK(instance->release());
    if (update)
    {
        ERRCHECK(_system->update());
    }
    
    return instance;
#else
    return nullptr;
#endif
}
/** Get tags to show in content view */
void UFMODEvent::GetAssetRegistryTags(TArray<FAssetRegistryTag>& OutTags) const
{
	Super::GetAssetRegistryTags(OutTags);
	FMOD::Studio::EventDescription* EventDesc = IFMODStudioModule::Get().GetEventDescription(this, EFMODSystemContext::Auditioning);
	
	bool bOneshot = false;
	bool bStream = false;
	bool b3D = false;
	if (EventDesc)
	{
		EventDesc->isOneshot(&bOneshot);
		EventDesc->isStream(&bStream);
		EventDesc->is3D(&b3D);
	}

	OutTags.Add(UObject::FAssetRegistryTag("Oneshot", bOneshot ? TEXT("True") : TEXT("False"), UObject::FAssetRegistryTag::TT_Alphabetical));
	OutTags.Add(UObject::FAssetRegistryTag("Streaming", bStream ? TEXT("True") : TEXT("False"), UObject::FAssetRegistryTag::TT_Alphabetical));
	OutTags.Add(UObject::FAssetRegistryTag("3D", b3D ? TEXT("True") : TEXT("False"), UObject::FAssetRegistryTag::TT_Alphabetical));
}