void OnDestroy() { if (!isQuitting) { HandleGameEvent(EmitterGameEvent.ObjectDestroy); if (instance.isValid()) { RuntimeManager.DetachInstanceFromGameObject(instance); if (eventDescription.isValid() && isOneshot) { instance.release(); instance.clearHandle(); } } if (Preload) { eventDescription.unloadSampleData(); } } }
public static void PreviewEvent(EditorEventRef eventRef, Dictionary <string, float> previewParamValues) { bool load = true; if (previewEventDesc.isValid()) { Guid guid; previewEventDesc.getID(out guid); if (guid == eventRef.Guid) { load = false; } else { PreviewStop(); } } if (load) { masterBanks.Clear(); foreach (EditorBankRef masterBankRef in EventManager.MasterBanks) { FMOD.Studio.Bank masterBank; CheckResult(System.loadBankFile(masterBankRef.Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out masterBank)); masterBanks.Add(masterBank); } if (!EventManager.MasterBanks.Exists(x => eventRef.Banks.Contains(x))) { CheckResult(System.loadBankFile(eventRef.Banks[0].Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out previewBank)); } else { previewBank.clearHandle(); } CheckResult(System.getEventByID(eventRef.Guid, out previewEventDesc)); CheckResult(previewEventDesc.createInstance(out previewEventInstance)); } foreach (EditorParamRef param in eventRef.Parameters) { FMOD.Studio.PARAMETER_DESCRIPTION paramDesc; CheckResult(previewEventDesc.getParameterDescriptionByName(param.Name, out paramDesc)); param.ID = paramDesc.id; PreviewUpdateParameter(param.ID, previewParamValues[param.Name]); } CheckResult(previewEventInstance.start()); previewState = PreviewState.Playing; }
void Lookup() { eventDescription = RuntimeManager.GetEventDescription(EventReference); if (eventDescription.isValid()) { for (int i = 0; i < Params.Length; i++) { FMOD.Studio.PARAMETER_DESCRIPTION param; eventDescription.getParameterDescriptionByName(Params[i].Name, out param); Params[i].ID = param.id; } } }
public static void PreviewEvent(EditorEventRef eventRef) { bool load = true; if (previewEventDesc.isValid()) { Guid guid; previewEventDesc.getID(out guid); if (guid == eventRef.Guid) { load = false; } else { PreviewStop(); } } if (load) { masterBanks.Clear(); foreach (EditorBankRef masterBankRef in EventManager.MasterBanks) { FMOD.Studio.Bank masterBank; CheckResult(System.loadBankFile(masterBankRef.Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out masterBank)); masterBanks.Add(masterBank); } if (!EventManager.MasterBanks.Exists(x => eventRef.Banks.Contains(x))) { CheckResult(System.loadBankFile(eventRef.Banks[0].Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out previewBank)); } else { previewBank.clearHandle(); } CheckResult(System.getEventByID(eventRef.Guid, out previewEventDesc)); CheckResult(previewEventDesc.createInstance(out previewEventInstance)); } CheckResult(previewEventInstance.start()); previewState = PreviewState.Playing; }
void Awake() { for (int i = 0; i < Emitters.Length; i++) { var emitterRef = Emitters[i]; if (emitterRef.Target != null && !string.IsNullOrEmpty(emitterRef.Target.Event)) { FMOD.Studio.EventDescription eventDesc = FMODUnity.RuntimeManager.GetEventDescription(emitterRef.Target.Event); if (eventDesc.isValid()) { for (int j = 0; j < Emitters[i].Params.Length; j++) { FMOD.Studio.PARAMETER_DESCRIPTION param; eventDesc.getParameterDescriptionByName(emitterRef.Params[j].Name, out param); emitterRef.Params[j].ID = param.id; } } } } }
public static FMOD.Studio.EventDescription GetEventDescription(Guid guid) { FMOD.Studio.EventDescription eventDesc = null; if (Instance.cachedDescriptions.ContainsKey(guid) && Instance.cachedDescriptions[guid].isValid()) { eventDesc = Instance.cachedDescriptions[guid]; } else { var result = Instance.studioSystem.getEventByID(guid, out eventDesc); if (result != FMOD.RESULT.OK) { throw new EventNotFoundException(guid); } if (eventDesc != null && eventDesc.isValid()) { Instance.cachedDescriptions[guid] = eventDesc; } } return(eventDesc); }
public bool Initialize(VoiceoverManager manager) { if (manager == null) { return(false); } else { voiceoverManager = manager; } if (!string.IsNullOrEmpty(masterVoiceoverEvent)) { eventDescription = FMODUnity.RuntimeManager.GetEventDescription(masterVoiceoverEvent); if (eventDescription.isValid()) { eventDescription.is3D(out is3D); eventDescription.getMaximumDistance(out maxDistance); } else { Debug.LogError("The master voiceover event is invalid for '" + speaker.ToString() + "'."); return(false); } } else { Debug.LogError("The master voiceover event is missing for '" + speaker.ToString() + "'."); return(false); } voiceoverCallback = new FMOD.Studio.EVENT_CALLBACK(VoiceEventCallback); initializationSuccesfull = true; return(true); }
public void Play() { if (TriggerOnce && hasTriggered) { return; } if (string.IsNullOrEmpty(Event)) { return; } if (!eventDescription.isValid()) { Lookup(); } bool isOneshot = false; if (!Event.StartsWith("snapshot", StringComparison.CurrentCultureIgnoreCase)) { eventDescription.isOneshot(out isOneshot); } bool is3D; eventDescription.is3D(out is3D); if (!instance.isValid()) { instance.clearHandle(); } // Let previous oneshot instances play out if (isOneshot && instance.isValid()) { instance.release(); instance.clearHandle(); } if (!instance.isValid()) { eventDescription.createInstance(out instance); // Only want to update if we need to set 3D attributes if (is3D) { var rigidBody = GetComponent <Rigidbody>(); var rigidBody2D = GetComponent <Rigidbody2D>(); var transform = GetComponent <Transform>(); if (rigidBody) { instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody); } else { instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody2D)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody2D); } } } foreach (var param in Params) { instance.setParameterByID(param.ID, param.Value); } if (is3D && OverrideAttenuation) { instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MINIMUM_DISTANCE, OverrideMinDistance); instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MAXIMUM_DISTANCE, OverrideMaxDistance); } instance.start(); hasTriggered = true; }
public void Play(string audioFile) { if (String.IsNullOrEmpty(audioFile)) { return; } if (TriggerOnce && hasTriggered) { return; } if (String.IsNullOrEmpty(Event)) { return; } if (!eventDescription.isValid()) { Lookup(); } bool isOneshot = false; if (!Event.StartsWith("snapshot", StringComparison.CurrentCultureIgnoreCase)) { eventDescription.isSnapshot(out isOneshot); } bool is3D = false; eventDescription.is3D(out is3D); if (!instance.isValid()) { instance.clearHandle(); } if (isOneshot && instance.isValid()) { instance.release(); instance.clearHandle(); } if (!instance.isValid()) { eventDescription.createInstance(out instance); if (is3D) { var rigidBody = GetComponent <Rigidbody>(); var rigidBody2D = GetComponent <Rigidbody2D>(); var transform = GetComponent <Transform>(); if (rigidBody) { instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody); } else { instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody2D)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody2D); } } } foreach (var param in Params) { instance.setParameterValue(param.Name, param.Value); } if (is3D && OverrideAttenuation) { instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MINIMUM_DISTANCE, OverrideMinDistance); instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MAXIMUM_DISTANCE, OverrideMaxDistance); } ExtensionsManager.PlayProgrammerSound(audioFile, this.instance); hasTriggered = true; }