/* プレビュ用:初期化関数 */
    private void PreparePreview()
    {
        if (CriAtomPlugin.IsLibraryInitialized() == false)
        {
            CriWareInitializer.InitializeAtom(new CriAtomConfig());
        }
        if (CriAtomPlugin.IsLibraryInitialized() == false)
        {
            return;
        }

        previewPlayer = new CriAtomExPlayer();
        if (previewPlayer == null)
        {
            return;
        }

        if (atomComponent != null)
        {
            CriAtomEx.RegisterAcf(null, Path.Combine(CriWare.streamingAssetsPath, atomComponent.acfFile));
        }
        else
        {
            Debug.LogWarning("[CRIWARE] CriAtom component not found in this scene");
            return;
        }

        isPreviewReady = true;
    }
Пример #2
0
        private void Initialize()
        {
            CriAtomEditor.InitializePluginForEditor();

            if (CriAtomPlugin.IsLibraryInitialized() == false)
            {
                return;
            }

            player = new CriAtomExPlayer();
            if (player == null)
            {
                return;
            }

            player.SetPanType(CriAtomEx.PanType.Pan3d);

            player.UpdateAll();

            isPlayerReady = true;

            CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom);

            if (finalizeSuppressed)
            {
                GC.ReRegisterForFinalize(this);
            }
        }
Пример #3
0
 /* Old APIs */
 public void Stop()
 {
     if (CriAtomPlugin.IsLibraryInitialized() == false)
     {
         return;
     }
     criAtomExPlayback_Stop(this.id);
 }
Пример #4
0
 public void StopWithoutReleaseTime()
 {
     if (CriAtomPlugin.IsLibraryInitialized() == false)
     {
         return;
     }
     criAtomExPlayback_StopWithoutReleaseTime(this.id);
 }
Пример #5
0
 private void TryInitializePlugin()
 {
     if (CriAtomPlugin.IsLibraryInitialized() == false)
     {
         if (previewAcb != null)
         {
             previewAcb  = null;
             lastAcbName = "";
         }
     }
     CriAtomEditor.InitializePluginForEditor();
 }
Пример #6
0
    public static void InitializePluginForEditor()
    {
        if (CriAtomPlugin.IsLibraryInitialized())
        {
            return;
        }

        var criInitCom = FindObjectOfType <CriWareInitializer>();

        if (criInitCom != null)
        {
            if (criInitCom.initializesFileSystem)
            {
                CriFsConfig config = criInitCom.fileSystemConfig;
                CriFsPlugin.SetConfigParameters(
                    config.numberOfLoaders,
                    config.numberOfBinders,
                    config.numberOfInstallers,
                    (config.installBufferSize * 1024),
                    config.maxPath,
                    config.minimizeFileDescriptorUsage,
                    config.enableCrcCheck
                    );
            }
            if (criInitCom.initializesAtom)
            {
                CriAtomConfig config = criInitCom.atomConfig;
                CriAtomPlugin.SetConfigParameters(
                    Mathf.Max(config.maxVirtualVoices, CriAtomPlugin.GetRequiredMaxVirtualVoices(config)),
                    config.maxVoiceLimitGroups,
                    config.maxCategories,
                    config.maxSequenceEventsPerFrame,
                    config.maxBeatSyncCallbacksPerFrame,
                    config.standardVoicePoolConfig.memoryVoices,
                    config.standardVoicePoolConfig.streamingVoices,
                    config.hcaMxVoicePoolConfig.memoryVoices,
                    config.hcaMxVoicePoolConfig.streamingVoices,
                    config.outputSamplingRate,
                    config.asrOutputChannels,
                    config.usesInGamePreview,
                    config.serverFrequency,
                    config.maxParameterBlocks,
                    config.categoriesPerPlayback,
                    config.maxBuses,
                    config.vrMode);

                CriAtomPlugin.SetConfigAdditionalParameters_PC(
                    config.pcBufferingTime
                    );
            }
        }
        CriAtomPlugin.InitializeLibrary();
    }
    private void Awake()
    {
        if (instance != null)
        {
            Destroy(this);
            return;
        }

        if (!CriAtomPlugin.IsLibraryInitialized())
        {
            Debug.LogError("[CRIWARE] Atom library is not initialized. Cannot setup CriAtomExOutputDeviceObserver.");
            Destroy(this);
            return;
        }

        instance = this;

#if CRIWAREPLUGIN_SUPPORT_OUTPUTDEVICE_OBSERVER
#if !UNITY_EDITOR && UNITY_IOS
        bool isStarted = UnsafeNativeMethods.criAtomUnity_StartOutputDeviceObserver_IOS();
        if (!isStarted)
        {
            Debug.LogError("[CRIWARE] CriAtomOutputDeviceObserver cannot start while Atom library is not initialized.");
        }
#elif !UNITY_EDITOR && UNITY_ANDROID
        UnityEngine.AndroidJavaClass  jc       = new UnityEngine.AndroidJavaClass("com.unity3d.player.UnityPlayer");
        UnityEngine.AndroidJavaObject activity = jc.GetStatic <UnityEngine.AndroidJavaObject>("currentActivity");

        if (checker == null)
        {
            checker = new UnityEngine.AndroidJavaObject("com.crimw.crijavaclasses.CriOutputDeviceObserver", activity, this.gameObject.name, "CallbackFromObserver_ANDROID");
        }
        if (checker == null)
        {
            Debug.LogError("[CRIWARE] Cannot load CriOutputDeviceObserver class in library.");
        }
        checker.Call("Start", activity);
        CheckOutputDevice_ANDROID();
#endif
        isConnected = lastIsConnected = IsDeviceConnected;
        deviceType  = lastDeviceType = DeviceType;
        if (_onDeviceConnectionChanged != null)
        {
            _onDeviceConnectionChanged(isConnected, deviceType);
        }
#elif !UNITY_EDITOR
        Debug.Log("[CRIWARE] CriAtomOutputDeviceObserver is not supported on this platform.");
#endif
        if (this.dontDestroyOnLoad)
        {
            GameObject.DontDestroyOnLoad(this.gameObject);
        }
    }
Пример #8
0
 public static bool GetAudioEffectInterfaceList(out List <IntPtr> effect_interface_list)
 {
     if (CriAtomPlugin.IsLibraryInitialized() == true)
     {
         effect_interface_list = null;
         return(false);
     }
     if (effectInterfaceList == null)
     {
         effectInterfaceList = new List <IntPtr>();
     }
     effect_interface_list = effectInterfaceList;
     return(true);
 }
Пример #9
0
 public List <AcbInfo> GetAcbInfoList(bool forceReload, string searchPath)
 {
     if (acbInfoList == null)
     {
         acbInfoList = new List <AcbInfo>();
     }
     if (gotAcbList == false || forceReload)
     {
         if (CriAtomPlugin.IsLibraryInitialized())
         {
             GetAcbInfoListCore(searchPath);
         }
         gotAcbList = true;
     }
     return(acbInfoList);
 }
Пример #10
0
    /**
     * <summary>再生音の停止</summary>
     * <param name='ignoresReleaseTime'>リリース時間を無視するかどうか
     * (false = リリース処理を行う、ture = リリース時間を無視して即座に停止する)</param>
     * <remarks>
     * <para header='説明'>再生音単位で停止処理を行います。<br/>
     * 本関数を使用することで、プレーヤによって再生された音声を、プレーヤ単位ではなく、
     * 個別に停止させることが可能です。<br/></para>
     * <para header='備考'>AtomEx プレーヤによって再生された全ての音声を停止したい場合、
     * 本関数ではなく ::CriAtomExPlayer::Stop 関数をご利用ください。<br/>
     * ( ::CriAtomExPlayer::Stop 関数は、そのプレーヤで再生中の全ての音声を停止します。)<br/></para>
     * <para header='注意'>本関数で再生音の停止を行うと、再生中の音声のステータスは Removed に遷移します。<br/>
     * 停止時にボイスリソースも破棄されるため、一旦 Removed 状態に遷移した再生オブジェクトからは、
     * 以降情報を取得できなくなります。<br/></para>
     * </remarks>
     * <seealso cref='CriAtomExPlayer::Stop'/>
     * <seealso cref='CriAtomExPlayback::GetStatus'/>
     */
    public void Stop(bool ignoresReleaseTime)
    {
        if (CriAtomPlugin.IsLibraryInitialized() == false)
        {
            return;
        }

        if (ignoresReleaseTime == false)
        {
            criAtomExPlayback_Stop(this.id);
        }
        else
        {
            criAtomExPlayback_StopWithoutReleaseTime(this.id);
        }
    }
Пример #11
0
    /**
     * <summary>サウンドオブジェクトの作成</summary>
     * <param name='enableVoiceLimitScope'>ボイスリミットスコープを有効化するか</param>
     * <param name='enableCategoryCueLimitScope'>カテゴリキューリミットスコープを有効化するか</param>
     * <returns>サウンドオブジェクト</returns>
     * <remarks>
     * <para header='説明'>サウンドオブジェクトを作成します。<br/>
     * enableVoiceLimitScope に true を指定すると、このサウンドオブジェクトに
     * 関連付けられたExプレーヤから再生した音声の発音数について、このサウンド
     * オブジェクト内でのみカウントし、ボイスリミットグループによる発音数制御を
     * 行います。<br/>
     * enableCategoryCueLimit に true を指定すると、このサウンドオブジェクトに
     * 関連付けられたExプレーヤから再生したキューのカテゴリ再生数について、この
     * サウンドオブジェクト内でのみカウントし、再生数制御を行います。<br/></para>
     * </remarks>
     * <seealso cref='CriAtomExSoundObject::Dispose'/>
     */
    public CriAtomExSoundObject(bool enableVoiceLimitScope, bool enableCategoryCueLimitScope)
    {
        if (!CriAtomPlugin.IsLibraryInitialized())
        {
            throw new Exception("CriAtomPlugin is not initialized.");
        }

        Config config;

        config.enableVoiceLimitScope       = enableVoiceLimitScope;
        config.enableCategoryCueLimitScope = enableCategoryCueLimitScope;

        this.handle = criAtomExSoundObject_Create(ref config, IntPtr.Zero, 0);

        CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom);
    }
Пример #12
0
    public CriAtomExTween(ParameterType parameterType, UInt32 targetId)
    {
        /*  Initialize Library  */
        if (!CriAtomPlugin.IsLibraryInitialized())
        {
            throw new Exception("CriAtomPlugin is not initialized.");
        }
        /* aplly config */
        Config config = new Config();

        config.parameterType      = parameterType;
        config.target.parameterId = (CriAtomEx.Parameter)targetId;
        /* create instance */
        handle = criAtomExTween_Create(ref config, IntPtr.Zero, 0);

        CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom);
    }
Пример #13
0
    public static void InitializeLibrary()
    {
        /* 初期化カウンタの更新 */
        CriAtomPlugin.initializationCount++;
        if (CriAtomPlugin.initializationCount != 1)
        {
            return;
        }

        /* シーン実行前に初期化済みの場合は終了させる */
        if (CriAtomPlugin.IsLibraryInitialized() == true)
        {
            CriAtomPlugin.FinalizeLibrary();
            CriAtomPlugin.initializationCount = 1;
        }

        /* 初期化パラメータが設定済みかどうかを確認 */
        if (CriAtomPlugin.isConfigured == false)
        {
            Debug.Log("[CRIWARE] Atom initialization parameters are not configured. "
                      + "Initializes Atom by default parameters.");
        }

        /* 依存ライブラリの初期化 */
        CriFsPlugin.InitializeLibrary();

        /* ライブラリの初期化 */
        CriAtomPlugin.criAtomUnity_Initialize();


        /* CriAtomServerのインスタンスを生成 */
                #if UNITY_EDITOR
        /* ゲームプレビュー時のみ生成する */
        if (UnityEngine.Application.isPlaying)
        {
            CriAtomServer.CreateInstance();
        }
                #else
        CriAtomServer.CreateInstance();
                #endif

        /* CriAtomListenerが存在しない場合のためのダミーリスナーを生成 */
        CriAtomListener.CreateDummyNativeListener();
    }
Пример #14
0
    public static void FinalizeLibrary()
    {
        /* 初期化カウンタの更新 */
        CriAtomPlugin.initializationCount--;
        if (CriAtomPlugin.initializationCount < 0)
        {
            CriAtomPlugin.initializationCount = 0;
            if (CriAtomPlugin.IsLibraryInitialized() == false)
            {
                return;
            }
        }
        if (CriAtomPlugin.initializationCount != 0)
        {
            return;
        }

        /* CriAtomListenerが存在しない場合のためのダミーリスナーを破棄 */
        CriAtomListener.DestroyDummyNativeListener();

        /* CriAtomServerのインスタンスを破棄 */
        CriAtomServer.DestroyInstance();

        /* 未破棄のDisposableを破棄 */
        CriDisposableObjectManager.CallOnModuleFinalization(CriDisposableObjectManager.ModuleType.Atom);

        /* ユーザエフェクトインタフェースのリストをクリア */
        if (effectInterfaceList != null)
        {
            effectInterfaceList.Clear();
            effectInterfaceList = null;
        }

        /* ライブラリの終了 */
        CriAtomPlugin.criAtomUnity_Finalize();

        /* 依存ライブラリの終了 */
        CriFsPlugin.FinalizeLibrary();
    }
Пример #15
0
 public override void OnPlayableCreate(Playable playable)
 {
     base.OnPlayableCreate(playable);
     m_Guid = Guid.NewGuid();
     if (IsEditor)
     {
         if (CriAtomPlugin.IsLibraryInitialized() == false)
         {
             CriWareInitializer criInitializer = GameObject.FindObjectOfType <CriWareInitializer>();
             if (criInitializer != null)
             {
                 CriWareInitializer.InitializeAtom(criInitializer.atomConfig);
             }
             else
             {
                 CriWareInitializer.InitializeAtom(new CriAtomConfig());
                 Debug.Log("[CRIWARE] Timeline / Atom: Can't find CriWareInitializer component; Using default parameters in edit mode.");
             }
         }
     }
     m_lastDirectorTime = 0;
 }
Пример #16
0
    /**
     * <summary>プラグインの初期化(手動初期化用)</summary>
     * \par 説明:
     * プラグインの初期化を行います。<br/>
     * デフォルトでは本関数はAwake関数内で自動的に呼び出されるので、アプリケーションが直接呼び出す必要はありません。<br/>
     * <br/>
     * 初期化パラメタをスクリプトから動的に変更して初期化を行いたい場合、本関数を使用してください。<br/>
     * \par 注意:
     * 本関数を使用する場合は、 自動初期化を無効にするため、 ::CriWareInitializer::dontInitializeOnAwake プロパティをインスペクタ上でチェックしてください。<br/>
     * また、本関数を呼び出すタイミングは全てのプラグインAPIよりも前に呼び出す必要があります。Script Execution Orderが高いスクリプト上で行ってください。
     *
     */
    public void Initialize()
    {
        /* 初期化カウンタの更新 */
        initializationCount++;
        if (initializationCount != 1)
        {
            /* CriWareInitializer自身による多重初期化は許可しない */
            GameObject.Destroy(this);
            return;
        }

        /* 非実行時にライブラリ機能を使用していた場合は一度終了処理を行う */
        if ((CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == true && CriManaPlugin.IsLibraryInitialized() == true) ||
            (CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == true && CriManaPlugin.IsLibraryInitialized() == false) ||
            (CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == false && CriManaPlugin.IsLibraryInitialized() == false))
        {
            /* CRI Manaライブラリの終了 */
            if (initializesMana)
            {
                CriManaPlugin.FinalizeLibrary();
            }

            /* CRI Atomライブラリの終了 */
            if (initializesAtom)
            {
                /* EstimatorがStop状態になるまでFinalize */
                while (CriAtomExLatencyEstimator.GetCurrentInfo().status != CriAtomExLatencyEstimator.Status.Stop)
                {
                    CriAtomExLatencyEstimator.FinalizeModule();
                }

                /* 終了処理の実行 */
                CriAtomPlugin.FinalizeLibrary();
            }

            /* CRI File Systemライブラリの終了 */
            if (initializesFileSystem)
            {
                CriFsPlugin.FinalizeLibrary();
            }
        }

        /* CRI File Systemライブラリの初期化 */
        if (initializesFileSystem)
        {
            InitializeFileSystem(fileSystemConfig);
        }

        /* CRI Atomライブラリの初期化 */
        if (initializesAtom)
        {
            InitializeAtom(atomConfig);
        }

        /* シーンチェンジ後もオブジェクトを維持するかどうかの設定 */
        if (dontDestroyOnLoad)
        {
            DontDestroyOnLoad(transform.gameObject);
            DontDestroyOnLoad(CriWare.managerObject);
        }
    }
Пример #17
0
    public static bool InitializeAtom(CriAtomConfig config)
    {
        /* CRI Atomライブラリの初期化 */
        if (CriAtomPlugin.IsLibraryInitialized() == false)
        {
            /* 初期化処理の実行 */
            CriAtomPlugin.SetConfigParameters(
                (int)Math.Max(config.maxVirtualVoices, CriAtomPlugin.GetRequiredMaxVirtualVoices(config)),
                config.maxVoiceLimitGroups,
                config.maxCategories,
                config.maxSequenceEventsPerFrame,
                config.maxBeatSyncCallbacksPerFrame,
                config.standardVoicePoolConfig.memoryVoices,
                config.standardVoicePoolConfig.streamingVoices,
                config.hcaMxVoicePoolConfig.memoryVoices,
                config.hcaMxVoicePoolConfig.streamingVoices,
                config.outputSamplingRate,
                config.asrOutputChannels,
                config.usesInGamePreview,
                config.serverFrequency,
                config.maxParameterBlocks,
                config.categoriesPerPlayback,
                config.maxBuses,
                config.vrMode);

            CriAtomPlugin.SetConfigAdditionalParameters_PC(
                config.pcBufferingTime
                );


            CriAtomPlugin.SetConfigAdditionalParameters_IOS(
                (uint)Math.Max(config.iosBufferingTime, 16),
                config.iosOverrideIPodMusic
                );
            /* Android 固有の初期化パラメータを登録 */
            {
                /* Ver.2.03.03 以前は 0 がデフォルト値だったことの互換性維持のための処理 */
                if (config.androidBufferingTime == 0)
                {
                    config.androidBufferingTime = (int)(4 * 1000.0 / config.serverFrequency);
                }
                if (config.androidStartBufferingTime == 0)
                {
                    config.androidStartBufferingTime = (int)(3 * 1000.0 / config.serverFrequency);
                }
#if !UNITY_EDITOR && UNITY_ANDROID
                CriAtomEx.androidDefaultSoundRendererType = config.androidForceToUseAsrForDefaultPlayback ?
                                                            CriAtomEx.SoundRendererType.Asr : CriAtomEx.SoundRendererType.Default;
#endif
                CriAtomPlugin.SetConfigAdditionalParameters_ANDROID(
                    config.androidLowLatencyStandardVoicePoolConfig.memoryVoices,
                    config.androidLowLatencyStandardVoicePoolConfig.streamingVoices,
                    config.androidBufferingTime,
                    config.androidStartBufferingTime,
                    config.androidUsesAndroidFastMixer,
                    config.androidUsesAAudio);
            }

            CriAtomPlugin.InitializeLibrary();

            if (config.useRandomSeedWithTime == true)
            {
                /* 時刻を乱数種に設定 */
                CriAtomEx.SetRandomSeed((uint)System.DateTime.Now.Ticks);
            }

            /* ACFファイル指定時は登録 */
            if (config.acfFileName.Length != 0)
            {
                        #if UNITY_WEBGL
                Debug.LogError("In WebGL, ACF File path should be set to CriAtom Component.");
                        #else
                string acfPath = config.acfFileName;
                if (CriWare.Common.IsStreamingAssetsPath(acfPath))
                {
                    acfPath = Path.Combine(CriWare.Common.streamingAssetsPath, acfPath);
                }

                CriAtomEx.RegisterAcf(null, acfPath);
                        #endif
            }
            CriAtomServer.KeepPlayingSoundOnPause = config.keepPlayingSoundOnPause;
            return(true);
        }
        else
        {
            return(false);
        }
    }
Пример #18
0
    /**
     * <summary>プラグインの初期化(手動初期化用)</summary>
     * <remarks>
     * <para header='説明'>プラグインの初期化を行います。<br/>
     * デフォルトでは本関数はAwake関数内で自動的に呼び出されるので、アプリケーションが直接呼び出す必要はありません。<br/>
     * <br/>
     * 初期化パラメタをスクリプトから動的に変更して初期化を行いたい場合、本関数を使用してください。<br/></para>
     * <para header='注意'>本関数を使用する場合は、 自動初期化を無効にするため、
     * ::CriWareInitializer::dontInitializeOnAwake プロパティをインスペクタ上でチェックしてください。<br/>
     * また、本関数を呼び出すタイミングは全てのプラグインAPIよりも前である必要があります。
     * Script Execution Orderが高いスクリプト上で行ってください。</para>
     * </remarks>
     *
     */
    public void Initialize()
    {
        /* 初期化カウンタの更新 */
        initializationCount++;
        if (initializationCount != 1)
        {
            /* CriWareInitializer自身による多重初期化は許可しない */
            GameObject.Destroy(this);
            return;
        }

        /* 非実行時にライブラリ機能を使用していた場合は一度終了処理を行う */
        if ((CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == true && CriManaPlugin.IsLibraryInitialized() == true) ||
            (CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == true && CriManaPlugin.IsLibraryInitialized() == false) ||
            (CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == false && CriManaPlugin.IsLibraryInitialized() == false))
        {
#if UNITY_EDITOR || (!UNITY_PS3)
            /* CRI Manaライブラリの終了 */
            if (initializesMana)
            {
                CriManaPlugin.FinalizeLibrary();
            }
#endif

            /* CRI Atomライブラリの終了 */
            if (initializesAtom)
            {
                /* EstimatorがStop状態になるまでFinalize */
                while (CriAtomExLatencyEstimator.GetCurrentInfo().status != CriAtomExLatencyEstimator.Status.Stop)
                {
                    CriAtomExLatencyEstimator.FinalizeModule();
                }

                /* 終了処理の実行 */
                CriAtomPlugin.FinalizeLibrary();
            }

            /* CRI File Systemライブラリの終了 */
            if (initializesFileSystem)
            {
                CriFsPlugin.FinalizeLibrary();
            }
        }

        /* CRI File Systemライブラリの初期化 */
        if (initializesFileSystem)
        {
            InitializeFileSystem(fileSystemConfig);
        }


        /* CRI Atomライブラリの初期化 */
        if (initializesAtom)
        {
            switch (atomConfig.inGamePreviewMode)
            {
            case CriAtomConfig.InGamePreviewSwitchMode.Disable:
                atomConfig.usesInGamePreview = false;
                break;

            case CriAtomConfig.InGamePreviewSwitchMode.Enable:
                atomConfig.usesInGamePreview = true;
                break;

            case CriAtomConfig.InGamePreviewSwitchMode.FollowBuildSetting:
                atomConfig.usesInGamePreview = UnityEngine.Debug.isDebugBuild;
                break;

            default:
                /* 既に設定されたフラグに従う */
                break;
            }
            InitializeAtom(atomConfig);
        }


        /* シーンチェンジ後もオブジェクトを維持するかどうかの設定 */
        if (dontDestroyOnLoad)
        {
            DontDestroyOnLoad(transform.gameObject);
            DontDestroyOnLoad(CriWare.Common.managerObject);
        }
    }
Пример #19
0
    public static bool InitializeAtom(CriAtomConfig config)
    {
        /* CRI Atomライブラリの初期化 */
        if (CriAtomPlugin.IsLibraryInitialized() == false)
        {
            /* 初期化処理の実行 */
            CriAtomPlugin.SetConfigParameters(
                (int)Math.Max(config.maxVirtualVoices, CriAtomPlugin.GetRequiredMaxVirtualVoices(config)),
                config.maxVoiceLimitGroups,
                config.maxCategories,
                config.maxSequenceEventsPerFrame,
                config.maxBeatSyncCallbacksPerFrame,
                config.standardVoicePoolConfig.memoryVoices,
                config.standardVoicePoolConfig.streamingVoices,
                config.hcaMxVoicePoolConfig.memoryVoices,
                config.hcaMxVoicePoolConfig.streamingVoices,
                config.outputSamplingRate,
                config.asrOutputChannels,
                config.usesInGamePreview,
                config.serverFrequency,
                config.maxParameterBlocks,
                config.categoriesPerPlayback,
                config.maxBuses,
                config.vrMode);

            CriAtomPlugin.SetConfigAdditionalParameters_PC(
                config.pcBufferingTime
                );

            CriAtomPlugin.SetConfigAdditionalParameters_IOS(
                (uint)Math.Max(config.iosBufferingTime, 16),
                config.iosOverrideIPodMusic
                );
            /* Android 固有の初期化パラメータを登録 */
            {
                /* Ver.2.03.03 以前は 0 がデフォルト値だったことの互換性維持のための処理 */
                if (config.androidBufferingTime == 0)
                {
                    config.androidBufferingTime = (int)(4 * 1000.0 / config.serverFrequency);
                }
                if (config.androidStartBufferingTime == 0)
                {
                    config.androidStartBufferingTime = (int)(3 * 1000.0 / config.serverFrequency);
                }
                IntPtr android_context = IntPtr.Zero;
#if !UNITY_EDITOR && UNITY_ANDROID
                if (config.androidUsesAndroidFastMixer)
                {
                    AndroidJavaClass  jc       = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                    AndroidJavaObject activity = jc.GetStatic <AndroidJavaObject>("currentActivity");
                    android_context = activity.GetRawObject();
                }
                CriAtomEx.androidDefaultSoundRendererType = config.androidForceToUseAsrForDefaultPlayback ?
                                                            CriAtomEx.SoundRendererType.Asr : CriAtomEx.SoundRendererType.Default;
#endif
                CriAtomPlugin.SetConfigAdditionalParameters_ANDROID(
                    config.androidLowLatencyStandardVoicePoolConfig.memoryVoices,
                    config.androidLowLatencyStandardVoicePoolConfig.streamingVoices,
                    config.androidBufferingTime,
                    config.androidStartBufferingTime,
                    android_context);
            }

            CriAtomPlugin.InitializeLibrary();

            if (config.useRandomSeedWithTime == true)
            {
                /* 時刻を乱数種に設定 */
                CriAtomEx.SetRandomSeed((uint)System.DateTime.Now.Ticks);
            }

            /* ACFファイル指定時は登録 */
            if (config.acfFileName.Length != 0)
            {
                string acfPath = config.acfFileName;
                if (CriWare.IsStreamingAssetsPath(acfPath))
                {
                    acfPath = Path.Combine(CriWare.streamingAssetsPath, acfPath);
                }

                CriAtomEx.RegisterAcf(null, acfPath);
            }
            return(true);
        }
        else
        {
            return(false);
        }
    }