コード例 #1
0
ファイル: Baker.cs プロジェクト: 8ude/AudioSpatialization
        public void BakeEffectThread()
        {
            BakingSettings bakeSettings;

            bakeSettings.bakeConvolution = bakeConvolution ? Bool.True : Bool.False;
            bakeSettings.bakeParametric  = bakeParameteric ? Bool.True : Bool.False;

#if UNITY_EDITOR
            totalObjects          = duringBakeObjects.Length;
            objectBakingCurrently = 0;
#endif

            for (int i = 0; i < duringBakeObjects.Length; ++i)
            {
                bakingGameObjectName = "reverb";

                if (duringBakeIdentifiers[i].type == BakedDataType.StaticListener)
                {
                    bakingGameObjectName = duringBakeObjectNames[i];
                }
                else if (duringBakeIdentifiers[i].type == BakedDataType.StaticSource)
                {
                    bakingGameObjectName = duringBakeObjectNames[i];
                }

                Debug.Log("START: Baking effect for " + bakingGameObjectName + ".");
                ++objectBakingCurrently;

#if UNITY_EDITOR
                totalProbeBoxes = duringBakeProbeBoxes[i].Length;
#endif

                probeBoxBakingCurrently = 0;
                var atLeastOneProbeBoxHasProbes = false;
                foreach (SteamAudioProbeBox probeBox in duringBakeProbeBoxes[i])
                {
                    if (cancelBake)
                    {
                        return;
                    }

                    if (probeBox == null)
                    {
                        Debug.LogError("Probe Box specified in list of Probe Boxes to bake is null.");
                        continue;
                    }

                    var probeBoxData = probeBox.LoadData();
                    if (probeBoxData == null || probeBoxData.Length == 0)
                    {
                        Debug.LogError("Skipping probe box, because probes have not been generated for it.");
                        probeBoxBakingCurrently++;
                        continue;
                    }

                    atLeastOneProbeBoxHasProbes = true;

                    var context = steamAudioManager.GameEngineState().Context();

                    IntPtr probeBoxPtr = IntPtr.Zero;
                    try
                    {
                        PhononCore.iplLoadProbeBox(context, probeBoxData, probeBoxData.Length, ref probeBoxPtr);
                        probeBoxBakingCurrently++;
                    }
                    catch (Exception e)
                    {
                        Debug.LogError(e.Message);
                    }

                    var environment = steamAudioManager.GameEngineState().Environment().GetEnvironment();

                    if (duringBakeIdentifiers[i].type == BakedDataType.Reverb)
                    {
                        PhononCore.iplBakeReverb(environment, probeBoxPtr, bakeSettings, bakeCallback);
                    }
                    else if (duringBakeIdentifiers[i].type == BakedDataType.StaticListener)
                    {
                        PhononCore.iplBakeStaticListener(environment, probeBoxPtr, duringBakeSpheres[i],
                                                         duringBakeIdentifiers[i], bakeSettings, bakeCallback);
                    }
                    else if (duringBakeIdentifiers[i].type == BakedDataType.StaticSource)
                    {
                        PhononCore.iplBakePropagation(environment, probeBoxPtr, duringBakeSpheres[i],
                                                      duringBakeIdentifiers[i], bakeSettings, bakeCallback);
                    }

                    if (cancelBake)
                    {
                        PhononCore.iplDestroyProbeBox(ref probeBoxPtr);
                        Debug.Log("CANCELLED: Baking.");
                        return;
                    }

                    int probeBoxSize = PhononCore.iplSaveProbeBox(probeBoxPtr, null);
                    probeBoxData = new byte[probeBoxSize];
                    PhononCore.iplSaveProbeBox(probeBoxPtr, probeBoxData);
                    probeBox.SaveData(probeBoxData);

                    int probeBoxEffectSize = PhononCore.iplGetBakedDataSizeByIdentifier(probeBoxPtr, duringBakeIdentifiers[i]);
                    probeBox.AddOrUpdateLayer(duringBakeIdentifiers[i], duringBakeNames[i], probeBoxEffectSize);

                    PhononCore.iplDestroyProbeBox(ref probeBoxPtr);
                }

                if (duringBakeProbeBoxes[i].Length == 0)
                {
                    Debug.LogError("Probe Box component not attached or no probe boxes selected for "
                                   + bakingGameObjectName);
                }
                else if (atLeastOneProbeBoxHasProbes)
                {
                    Debug.Log("COMPLETED: Baking effect for " + bakingGameObjectName + ".");
                }
            }

            bakeStatus = BakeStatus.Complete;
        }