Exemplo n.º 1
0
        //
        // 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();
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 6
0
        void DisplayProgressBarAndCancel(PhononListener phononReverb, PhononManager phononManager)
        {
            if (phononManager.currentlyBakingObject == null)
            {
                return;
            }

            phononReverb.phononBaker.DrawProgressBar();
            Repaint();
        }
Exemplo n.º 7
0
        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;
        }
Exemplo n.º 8
0
        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;
            }
        }
Exemplo n.º 9
0
        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();
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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.");
            }
        }