Beispiel #1
0
        /// <summary>
        /// Loads an FMOD Bank from the given asset.
        /// </summary>
        public static Bank IngestBank(ModAsset asset)
        {
            Logger.Log(LogLevel.Verbose, "Audio.IngestBank", asset.PathVirtual);
            ingestedModBankPaths.Add(asset.PathVirtual);

            Bank bank;

            if (patch_Banks.ModCache.TryGetValue(asset, out bank))
            {
                return(bank);
            }

            RESULT loadResult;

            if (CoreModule.Settings.UnpackFMODBanks)
            {
                loadResult = system.loadBankFile(asset.GetCachedPath(), LOAD_BANK_FLAGS.NORMAL, out bank);
            }
            else
            {
                IntPtr handle;
                modBankAssets[handle = (IntPtr)(++modBankHandleLast)] = asset;
                BANK_INFO info = new BANK_INFO()
                {
                    size = patch_Banks.SizeOfBankInfo,

                    userdata       = handle,
                    userdatalength = 0,

                    opencallback  = ModBankOpen,
                    closecallback = ModBankClose,
                    readcallback  = ModBankRead,
                    seekcallback  = ModBankSeek
                };

                loadResult = system.loadBankCustom(info, LOAD_BANK_FLAGS.NORMAL, out bank);
            }

            if (loadResult == RESULT.ERR_EVENT_ALREADY_LOADED)
            {
                Logger.Log(LogLevel.Warn, "Audio.IngestBank", $"Cannot load {asset.PathVirtual} due to conflicting events!");
                return(null);
            }

            loadResult.CheckFMOD();

            if (Everest.Content.TryGet <AssetTypeGUIDs>(asset.PathVirtual + ".guids", out ModAsset assetGUIDs))
            {
                IngestGUIDs(assetGUIDs);
            }

            patch_Banks.ModCache[asset] = bank;

            bank.getID(out Guid id);
            cachedBankPaths[id] = $"bank:/mods/{asset.PathVirtual.Substring("Audio/".Length)}";
            return(bank);
        }
Beispiel #2
0
        public static Bank IngestBank(ModAsset asset)
        {
            Logger.Log(LogLevel.Verbose, "Audio.IngestBank", asset.PathVirtual);

            Bank bank;

            if (patch_Banks.ModCache.TryGetValue(asset, out bank))
            {
                return(bank);
            }

            if (CoreModule.Settings.UnpackFMODBanks)
            {
                system.loadBankFile(asset.GetCachedPath(), LOAD_BANK_FLAGS.NORMAL, out bank).CheckFMOD();
            }
            else
            {
                IntPtr handle;
                modBankAssets[handle = (IntPtr)(++modBankHandleLast)] = asset;
                BANK_INFO info = new BANK_INFO()
                {
                    size = patch_Banks.SizeOfBankInfo,

                    userdata       = handle,
                    userdatalength = 0,

                    opencallback  = ModBankOpen,
                    closecallback = ModBankClose,
                    readcallback  = ModBankRead,
                    seekcallback  = ModBankSeek
                };

                system.loadBankCustom(info, LOAD_BANK_FLAGS.NORMAL, out bank).CheckFMOD();
            }

            ModAsset assetGUIDs;

            if (Everest.Content.TryGet <AssetTypeGUIDs>(asset.PathVirtual + ".guids", out assetGUIDs))
            {
                IngestGUIDs(assetGUIDs);
            }

            patch_Banks.ModCache[asset] = bank;
            return(bank);
        }
Beispiel #3
0
 private static extern RESULT FMOD_Studio_System_LoadBankCustom(IntPtr studiosystem, ref BANK_INFO info, LOAD_BANK_FLAGS flags, out IntPtr bank);
Beispiel #4
0
            public RESULT loadBankCustom(BANK_INFO info, LOAD_BANK_FLAGS flags, out Bank bank)
            {
                bank = null;

                IntPtr newPtr = new IntPtr();
                RESULT result = FMOD_Studio_System_LoadBankCustom(rawPtr, ref info, flags, out newPtr);
                if (result != RESULT.OK)
                {
                return result;
                }

                bank = new Bank(newPtr);
                return result;
            }