// Use this for initialization void Start() { FmodEventSystemHandle handle = new FmodEventSystemHandle(); ReverbSettings.FmodReverbPreset globalReverbSetting = FmodReverb.GLOBAL_REVERB; m_globalReverb = FmodReverb.CreateInstance(typeof(FmodReverb)) as FmodReverb; GameObject obj = GameObject.Instantiate(Resources.Load("FmodReverbZone")) as GameObject; m_globalReverbZone = obj.GetComponent<FmodReverbZone>(); if (m_globalReverbZone == null) { Debug.LogError("Prefab for FmodReverbZone should have component FmodReverbZone !"); } m_globalReverbZone.SetGlobal(true); m_globalReverbZone.name = "Global Reverb"; m_globalReverb.Initialize(globalReverbSetting.Name, globalReverbSetting.Properties); m_globalReverbZone.SetReverb(m_globalReverb); m_globalReverbZone.Priority = 0; m_globalReverbZone.fadeTime = 0; m_currentZone = m_globalReverbZone; StackReverb (m_currentZone); handle.getEventSystem().setReverbImmediate(globalReverbSetting.Properties); handle.Dispose(); m_startProperties = globalReverbSetting.Properties; m_curProperties = globalReverbSetting.Properties; m_endProperties = globalReverbSetting.Properties; }
// Use this for initialization void Start() { FmodEventSystemHandle handle = new FmodEventSystemHandle(); ReverbSettings.FmodReverbPreset globalReverbSetting = FmodReverb.GLOBAL_REVERB; m_globalReverb = FmodReverb.CreateInstance(typeof(FmodReverb)) as FmodReverb; GameObject obj = GameObject.Instantiate(Resources.Load("FmodReverbZone")) as GameObject; m_globalReverbZone = obj.GetComponent <FmodReverbZone>(); if (m_globalReverbZone == null) { Debug.LogError("Prefab for FmodReverbZone should have component FmodReverbZone !"); } m_globalReverbZone.SetGlobal(true); m_globalReverbZone.name = "Global Reverb"; m_globalReverb.Initialize(globalReverbSetting.Name, globalReverbSetting.Properties); m_globalReverbZone.SetReverb(m_globalReverb); m_globalReverbZone.Priority = 0; m_globalReverbZone.fadeTime = 0; m_currentZone = m_globalReverbZone; StackReverb(m_currentZone); handle.getEventSystem().setReverbImmediate(globalReverbSetting.Properties); handle.Dispose(); m_startProperties = globalReverbSetting.Properties; m_curProperties = globalReverbSetting.Properties; m_endProperties = globalReverbSetting.Properties; }
public void unsetReverb(FmodReverbZone reverbZone) { if (m_reverbManager != null) { m_reverbManager.UnstackReverb(reverbZone); } }
protected void CreateReverbZone(FmodReverb srcReverb, Vector3 worldPos, RaycastHit hitInfo) { GameObject obj = GameObject.Instantiate(Resources.Load("FmodReverbZone"), worldPos, Quaternion.identity) as GameObject; FmodReverbZone reverbZone = obj.GetComponent <FmodReverbZone>(); if (reverbZone == null) { Debug.LogError("Prefab for FmodReverbZone should have component FmodReverbZone !"); } else { reverbZone.SetReverb(srcReverb); obj.name = "FmodReverbZone (" + srcReverb.name + ")"; } }
private void _updateReverbStack() { if (m_reverbStack.Count == 0) { return; } m_reverbStack.Sort((x, y) => (int)(y.Priority).CompareTo((int)x.Priority)); FmodReverbZone newCurrentZone = m_reverbStack[0]; if (m_currentZone != newCurrentZone) // we should transition { float fadeInTime = newCurrentZone.fadeTime; // if we are transitionning from a zone back to the global zone, we use the previous fade time // to fade out if (newCurrentZone == m_globalReverbZone && m_currentZone != m_globalReverbZone) { m_globalReverb.Initialize(m_globalReverb.getName(), FmodReverb.GLOBAL_REVERB.Properties); fadeInTime = m_currentZone.fadeTime; } FMOD.REVERB_PROPERTIES targetProps = newCurrentZone.GetReverb().getProperties(); if (fadeInTime <= 0) { FmodEventSystemHandle handle = new FmodEventSystemHandle(); m_isInTransition = false; m_startProperties = m_curProperties; m_endProperties = targetProps; handle.getEventSystem().setReverbImmediate(targetProps); handle.Dispose(); } else { m_isInTransition = true; m_startProperties = m_curProperties; m_endProperties = targetProps; m_curTransitionDuration = fadeInTime; m_curTransitionTime = 0; } m_currentZone = newCurrentZone; } }
public override void OnInspectorGUI() { serializedObject.Update(); if (serializedObject != null && serializedObject.targetObject != null) { FmodReverbZone zone = serializedObject.targetObject as FmodReverbZone; FmodReverb reverb = zone.GetReverb(); SerializedProperty fadeTimeProp = serializedObject.FindProperty("fadeTime"); SerializedProperty priorityProp = serializedObject.FindProperty("m_priority"); bool isGlobal = zone.IsGlobal(); if (reverb != null) { EditorGUILayout.LabelField("Name", reverb.getName() + (isGlobal ? " (global reverb)" : "")); if (isGlobal) { GUI.enabled = false; } EditorGUILayout.Slider(fadeTimeProp, 0, 100, "Fade Time"); EditorGUILayout.Slider(priorityProp, 0, 10000, "Priority"); if (isGlobal) { GUI.enabled = true; } EditorGUILayout.Separator(); EditorGUILayout.PrefixLabel("Parameters"); EditorGUI.indentLevel += 1; GUI.enabled = false; EditorGUILayout.IntSlider("Master level", (int)((float)reverb.Room / 100), -100, 0); EditorGUILayout.IntSlider("Decay Time", (int)(reverb.DecayTime * 1000), 100, 20000); EditorGUILayout.Slider("HF Decay Ratio", reverb.DecayHFRatio, 0.1f, 2); EditorGUILayout.IntSlider("Pre Delay", (int)(reverb.ReflectionsDelay * 1000), 0, 300); EditorGUILayout.IntSlider("Late Delay", (int)(reverb.ReverbDelay * 1000), 0, 100); EditorGUILayout.Slider("Early Reflections", ((float)reverb.Reflections / 100), -100, 10); EditorGUILayout.Slider("Late Reflections", ((float)reverb.Reverb / 100), -100, 20); EditorGUILayout.IntSlider("Diffusion", (int)reverb.Diffusion, 0, 100); EditorGUILayout.IntSlider("Density", (int)reverb.Density, 0, 100); EditorGUILayout.Slider("HF Gain", ((float)reverb.RoomHF / 100), -100, 0); EditorGUILayout.Slider("LF Gain", ((float)reverb.RoomLF / 100), -100, 0); EditorGUILayout.IntSlider("HF Crossover", (int)reverb.HFReference, 20, 20000); EditorGUILayout.IntSlider("LF Crossover", (int)reverb.LFReference, 20, 1000); GUI.enabled = true; EditorGUI.indentLevel -= 1; serializedObject.ApplyModifiedProperties(); } else { EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Name"); EditorGUILayout.HelpBox("No Reverb is set", MessageType.Error); EditorGUILayout.EndHorizontal(); GUI.enabled = false; EditorGUILayout.FloatField("Fade Time", 3); GUI.enabled = true; EditorGUILayout.Separator(); EditorGUILayout.PrefixLabel("Parameters"); GUI.enabled = false; EditorGUI.indentLevel += 1; EditorGUILayout.IntSlider("Master level", 0, -100, 0); EditorGUILayout.IntSlider("Decay Time", 100, 100, 20000); EditorGUILayout.Slider("HF Decay Ratio", 0.1f, 0.1f, 2); EditorGUILayout.IntSlider("Pre Delay", 0, 0, 300); EditorGUILayout.IntSlider("Late Delay", 0, 0, 100); EditorGUILayout.Slider("Early Reflections", -100, -100, 10); EditorGUILayout.Slider("Late Reflections", -100, -100, 20); EditorGUILayout.IntSlider("Diffusion", 0, 0, 100); EditorGUILayout.IntSlider("Density", 0, 0, 100); EditorGUILayout.Slider("HF Gain", -100, -100, 0); EditorGUILayout.Slider("LF Gain", -100, -100, 0); EditorGUILayout.IntSlider("HF Crossover", 20, 20, 20000); EditorGUILayout.IntSlider("LF Crossover", 20, 20, 1000); EditorGUI.indentLevel -= 1; GUI.enabled = true; } } }
public void UnstackReverb(FmodReverbZone zone) { m_reverbStack.Remove(zone); _updateReverbStack(); }
public void StackReverb(FmodReverbZone zone) { m_reverbStack.Add(zone); _updateReverbStack(); }
private void _updateReverbStack() { if (m_reverbStack.Count == 0) { return ; } m_reverbStack.Sort((x, y) => (int)(y.Priority).CompareTo((int)x.Priority)); FmodReverbZone newCurrentZone = m_reverbStack[0]; if (m_currentZone != newCurrentZone) { // we should transition float fadeInTime = newCurrentZone.fadeTime; // if we are transitionning from a zone back to the global zone, we use the previous fade time // to fade out if (newCurrentZone == m_globalReverbZone && m_currentZone != m_globalReverbZone) { m_globalReverb.Initialize(m_globalReverb.getName(), FmodReverb.GLOBAL_REVERB.Properties); fadeInTime = m_currentZone.fadeTime; } FMOD.REVERB_PROPERTIES targetProps = newCurrentZone.GetReverb().getProperties(); if (fadeInTime <= 0) { FmodEventSystemHandle handle = new FmodEventSystemHandle(); m_isInTransition = false; m_startProperties = m_curProperties; m_endProperties = targetProps; handle.getEventSystem().setReverbImmediate(targetProps); handle.Dispose(); } else { m_isInTransition = true; m_startProperties = m_curProperties; m_endProperties = targetProps; m_curTransitionDuration = fadeInTime; m_curTransitionTime = 0; } m_currentZone = newCurrentZone; } }