// // GUI for BakedReverb // public void BakedReverbGUI() { PhononGUI.SectionHeader("Baked Reverb Settings"); PhononListener bakedReverb = serializedObject.targetObject as PhononListener; GUI.enabled = !bakedReverb.phononBaker.IsBakeActive(); EditorGUILayout.PropertyField(serializedObject.FindProperty("useAllProbeBoxes")); if (!serializedObject.FindProperty("useAllProbeBoxes").boolValue) { EditorGUILayout.PropertyField(serializedObject.FindProperty("probeBoxes"), true); } EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(" "); if (GUILayout.Button("Bake Reverb")) { Debug.Log("START: Baking reverb effect."); bakedReverb.BeginBake(); } EditorGUILayout.EndHorizontal(); GUI.enabled = true; DisplayProgressBarAndCancel(); if (bakedReverb.phononBaker.GetBakeStatus() == BakeStatus.Complete) { bakedReverb.EndBake(); Repaint(); EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene()); Debug.Log("COMPLETED: Baking reverb effect."); } }
void DisplayProgressBarAndCancel() { PhononListener bakedReverb = serializedObject.targetObject as PhononListener; bakedReverb.phononBaker.DrawProgressBar(); Repaint(); }
public bool BakedReverbGUI(PhononManager phononManager) { PhononListener bakedReverb = GameObject.FindObjectOfType <PhononListener>(); if (bakedReverb == null || !bakedReverb.enableReverb || bakedReverb.reverbSimulationType != ReverbSimulationType.BakedReverb) { return(false); } PhononGUI.SectionHeader("Bake Reverb"); GUI.enabled = !PhononBaker.IsBakeActive() && !EditorApplication.isPlayingOrWillChangePlaymode; EditorGUILayout.BeginHorizontal(); bakedReverb.UpdateBakedDataStatistics(); bool previousValues = bakedReverb.bakeToggle; bool newValue = GUILayout.Toggle(bakedReverb.bakeToggle, " reverb"); if (previousValues != newValue) { Undo.RecordObject(bakedReverb, "Toggled reverb in Phonon Manager"); bakedReverb.bakeToggle = newValue; } EditorGUILayout.LabelField((bakedReverb.bakedDataSize / 1000.0f).ToString("0.0") + " KB"); EditorGUILayout.EndHorizontal(); GUI.enabled = true; return(true); }
public void SelectForBakeEffect(bool select) { PhononSource[] bakedSources = GameObject.FindObjectsOfType <PhononSource>(); foreach (PhononSource bakedSource in bakedSources) { if (bakedSource.enableReflections && bakedSource.uniqueIdentifier.Length != 0 && bakedSource.sourceSimulationType == SourceSimulationType.BakedStaticSource) { bakedSource.bakeToggle = select; } } BakedStaticListenerNode[] bakedStaticNodes = GameObject.FindObjectsOfType <BakedStaticListenerNode>(); foreach (BakedStaticListenerNode bakedStaticNode in bakedStaticNodes) { if (bakedStaticNode.uniqueIdentifier.Length != 0) { bakedStaticNode.bakeToggle = select; } } PhononListener bakedReverb = GameObject.FindObjectOfType <PhononListener>(); if (!(bakedReverb == null || !bakedReverb.enableReverb || bakedReverb.reverbSimulationType != ReverbSimulationType.BakedReverb)) { bakedReverb.bakeToggle = select; } }
// // Draws the inspector. // public override void OnInspectorGUI() { serializedObject.Update(); PhononGUI.SectionHeader("Mixer Settings"); EditorGUILayout.PropertyField(serializedObject.FindProperty("acceleratedMixing")); if (!serializedObject.FindProperty("acceleratedMixing").boolValue) { PhononGUI.SectionHeader("Reverb Settings"); EditorGUILayout.PropertyField(serializedObject.FindProperty("enableReverb")); if (serializedObject.FindProperty("enableReverb").boolValue) { EditorGUILayout.PropertyField(serializedObject.FindProperty("reverbSimulationType")); EditorGUILayout.PropertyField(serializedObject.FindProperty("dryMixFraction")); EditorGUILayout.PropertyField(serializedObject.FindProperty("reverbMixFraction")); PhononListener phononListener = serializedObject.targetObject as PhononListener; if (phononListener.reverbSimulationType == ReverbSimulationType.BakedReverb) { BakedReverbGUI(); } } } PhononGUI.SectionHeader("Rendering Settings"); EditorGUILayout.PropertyField(serializedObject.FindProperty("indirectBinauralEnabled")); if (serializedObject.FindProperty("acceleratedMixing").boolValue&& serializedObject.FindProperty("indirectBinauralEnabled").boolValue) { EditorGUILayout.HelpBox("The binaural settings on Phonon Source will be ignored.", MessageType.Info); } serializedObject.ApplyModifiedProperties(); }
void DisplayProgressBarAndCancel(PhononListener phononReverb, PhononManager phononManager) { if (phononManager.currentlyBakingObject == null) { return; } phononReverb.phononBaker.DrawProgressBar(); Repaint(); }
public void BakedReverbStatsGUI() { PhononListener bakedReverb = serializedObject.targetObject as PhononListener; GUI.enabled = !bakedReverb.phononBaker.IsBakeActive(); bakedReverb.UpdateBakedDataStatistics(); for (int i = 0; i < bakedReverb.bakedProbeNames.Count; ++i) { EditorGUILayout.LabelField(bakedReverb.bakedProbeNames[i], (bakedReverb.bakedProbeDataSizes[i] / 1000.0f).ToString("0.0") + " KB"); } EditorGUILayout.LabelField("Total Size", (bakedReverb.bakedDataSize / 1000.0f).ToString("0.0") + " KB"); GUI.enabled = true; }
public void FrameUpdate(bool sourceUpdate, SourceSimulationType sourceSimulationType, ReverbSimulationType reverbSimulationType, PhononStaticListener phononStaticListener, PhononListener phononListener) { if (sourceUpdate && sourceSimulationType == SourceSimulationType.BakedStaticListener && phononStaticListener != null && phononStaticListener.currentStaticListenerNode != null) { UpdateEffectName(phononStaticListener.currentStaticListenerNode.GetUniqueIdentifier()); } if (phononListener && phononListener.acceleratedMixing) { fourierMixingEnabled = true; } else { fourierMixingEnabled = false; } }
public bool BakedReverbGUI(PhononManager phononManager) { PhononListener bakedReverb = GameObject.FindObjectOfType <PhononListener>(); if (bakedReverb == null || !bakedReverb.enableReverb || bakedReverb.reverbSimulationType != ReverbSimulationType.BakedReverb) { return(false); } PhononGUI.SectionHeader("Bake Reverb"); GUI.enabled = !bakedReverb.phononBaker.IsBakeActive(); EditorGUILayout.BeginHorizontal(); bakedReverb.UpdateBakedDataStatistics(); EditorGUILayout.LabelField("__reverb__", (bakedReverb.bakedDataSize / 1000.0f).ToString("0.0") + " KB"); if (GUILayout.Button("Bake Reverb", GUILayout.Width(200.0f))) { Debug.Log("START: Baking reverb effect."); phononManager.currentlyBakingObject = bakedReverb; bakedReverb.BeginBake(); } EditorGUILayout.EndHorizontal(); GUI.enabled = true; DisplayProgressBarAndCancel(bakedReverb, phononManager); if (bakedReverb.phononBaker.GetBakeStatus() == BakeStatus.Complete) { bakedReverb.EndBake(); phononManager.currentlyBakingObject = null; EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene()); Debug.Log("COMPLETED: Baking reverb effect."); } return(true); }
// // GUI for BakedReverb // public void BakedReverbGUI() { PhononGUI.SectionHeader("Baked Reverb Settings"); PhononListener bakedReverb = serializedObject.targetObject as PhononListener; GUI.enabled = !PhononBaker.IsBakeActive() && !EditorApplication.isPlayingOrWillChangePlaymode; EditorGUILayout.PropertyField(serializedObject.FindProperty("useAllProbeBoxes")); if (!serializedObject.FindProperty("useAllProbeBoxes").boolValue) { EditorGUILayout.PropertyField(serializedObject.FindProperty("probeBoxes"), true); } EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(" "); if (GUILayout.Button("Bake Reverb")) { bakedReverb.BeginBake(); } EditorGUILayout.EndHorizontal(); GUI.enabled = true; DisplayProgressBarAndCancel(); }
public float[] AudioFrameUpdate(float[] data, int channels, Vector3 sourcePosition, Vector3 listenerPosition, Vector3 listenerAhead, Vector3 listenerUp, bool enableReflections, float indirectMixFraction, bool indirectBinauralEnabled, PhononListener phononListener) { #if !UNITY_ANDROID AudioBuffer inputBuffer; inputBuffer.audioFormat = inputFormat; inputBuffer.numSamples = data.Length / channels; inputBuffer.deInterleavedBuffer = null; inputBuffer.interleavedBuffer = data; AudioBuffer outputBuffer; outputBuffer.audioFormat = outputFormat; outputBuffer.numSamples = data.Length / channels; outputBuffer.deInterleavedBuffer = null; outputBuffer.interleavedBuffer = data; // Input data is sent (where it is copied) for indirect propagation effect processing. // This data must be sent before applying any other effect to the input audio. if (enableReflections && (wetData != null) && (wetDataMarshal != null) && (wetAmbisonicsDataMarshal != null) && (propagationAmbisonicsEffect != IntPtr.Zero)) { for (int i = 0; i < data.Length; ++i) { wetData[i] = data[i] * indirectMixFraction; } AudioBuffer propagationInputBuffer; propagationInputBuffer.audioFormat = inputFormat; propagationInputBuffer.numSamples = wetData.Length / channels; propagationInputBuffer.deInterleavedBuffer = null; propagationInputBuffer.interleavedBuffer = wetData; PhononCore.iplSetDryAudioForConvolutionEffect(propagationAmbisonicsEffect, sourcePosition, propagationInputBuffer); if (fourierMixingEnabled) { phononListener.processMixedAudio = true; return(null); } AudioBuffer wetAmbisonicsBuffer; wetAmbisonicsBuffer.audioFormat = ambisonicsFormat; wetAmbisonicsBuffer.numSamples = data.Length / channels; wetAmbisonicsBuffer.deInterleavedBuffer = wetAmbisonicsDataMarshal; wetAmbisonicsBuffer.interleavedBuffer = null; PhononCore.iplGetWetAudioForConvolutionEffect(propagationAmbisonicsEffect, listenerPosition, listenerAhead, listenerUp, wetAmbisonicsBuffer); AudioBuffer wetBufferMarshal; wetBufferMarshal.audioFormat = outputFormat; wetBufferMarshal.audioFormat.channelOrder = ChannelOrder.Deinterleaved; // Set format to deinterleave. wetBufferMarshal.numSamples = data.Length / channels; wetBufferMarshal.deInterleavedBuffer = wetDataMarshal; wetBufferMarshal.interleavedBuffer = null; if ((outputFormat.channelLayout == ChannelLayout.Stereo) && indirectBinauralEnabled) { PhononCore.iplApplyAmbisonicsBinauralEffect(propagationBinauralEffect, wetAmbisonicsBuffer, wetBufferMarshal); } else { PhononCore.iplApplyAmbisonicsPanningEffect(propagationPanningEffect, wetAmbisonicsBuffer, wetBufferMarshal); } AudioBuffer wetBuffer; wetBuffer.audioFormat = outputFormat; wetBuffer.numSamples = data.Length / channels; wetBuffer.deInterleavedBuffer = null; wetBuffer.interleavedBuffer = wetData; PhononCore.iplInterleaveAudioBuffer(wetBufferMarshal, wetBuffer); return(wetData); } #endif return(null); }
public void BakeSelected() { List <GameObject> gameObjects = new List <GameObject>(); List <BakingMode> bakingModes = new List <BakingMode>(); List <string> identifers = new List <string>(); List <Sphere> influenceSpheres = new List <Sphere>(); List <ProbeBox[]> probeBoxes = new List <ProbeBox[]>(); PhononSource[] bakedSources = GameObject.FindObjectsOfType <PhononSource>(); foreach (PhononSource bakedSource in bakedSources) { if (bakedSource.enableReflections && bakedSource.uniqueIdentifier.Length != 0 && bakedSource.sourceSimulationType == SourceSimulationType.BakedStaticSource && bakedSource.bakeToggle) { gameObjects.Add(bakedSource.gameObject); bakingModes.Add(BakingMode.StaticSource); identifers.Add(bakedSource.uniqueIdentifier); Sphere bakeSphere; Vector3 sphereCenter = Common.ConvertVector(bakedSource.transform.position); bakeSphere.centerx = sphereCenter.x; bakeSphere.centery = sphereCenter.y; bakeSphere.centerz = sphereCenter.z; bakeSphere.radius = bakedSource.bakingRadius; influenceSpheres.Add(bakeSphere); if (bakedSource.useAllProbeBoxes) { probeBoxes.Add(FindObjectsOfType <ProbeBox>() as ProbeBox[]); } else { probeBoxes.Add(bakedSource.probeBoxes); } } } BakedStaticListenerNode[] bakedStaticNodes = GameObject.FindObjectsOfType <BakedStaticListenerNode>(); foreach (BakedStaticListenerNode bakedStaticNode in bakedStaticNodes) { if (bakedStaticNode.uniqueIdentifier.Length != 0 && bakedStaticNode.bakeToggle) { gameObjects.Add(bakedStaticNode.gameObject); bakingModes.Add(BakingMode.StaticListener); identifers.Add(bakedStaticNode.uniqueIdentifier); Sphere bakeSphere; Vector3 sphereCenter = Common.ConvertVector(bakedStaticNode.transform.position); bakeSphere.centerx = sphereCenter.x; bakeSphere.centery = sphereCenter.y; bakeSphere.centerz = sphereCenter.z; bakeSphere.radius = bakedStaticNode.bakingRadius; influenceSpheres.Add(bakeSphere); if (bakedStaticNode.useAllProbeBoxes) { probeBoxes.Add(FindObjectsOfType <ProbeBox>() as ProbeBox[]); } else { probeBoxes.Add(bakedStaticNode.probeBoxes); } } } PhononListener bakedReverb = GameObject.FindObjectOfType <PhononListener>(); if (!(bakedReverb == null || !bakedReverb.enableReverb || bakedReverb.reverbSimulationType != ReverbSimulationType.BakedReverb) && bakedReverb.bakeToggle) { gameObjects.Add(bakedReverb.gameObject); bakingModes.Add(BakingMode.Reverb); identifers.Add("__reverb__"); influenceSpheres.Add(new Sphere()); if (bakedReverb.useAllProbeBoxes) { probeBoxes.Add(FindObjectsOfType <ProbeBox>() as ProbeBox[]); } else { probeBoxes.Add(bakedReverb.probeBoxes); } } if (gameObjects.Count > 0) { PhononManager phononManager = serializedObject.targetObject as PhononManager; phononManager.phononBaker.BeginBake(gameObjects.ToArray(), bakingModes.ToArray(), identifers.ToArray(), influenceSpheres.ToArray(), probeBoxes.ToArray()); } else { Debug.LogWarning("No game object selected for baking."); } }