/* プレビュ用:初期化関数 */
    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;
    }
Exemple #2
0
    /* @cond DOXYGEN_IGNORE */
    #region Functions for internal use

    public void Setup()
    {
        if (CriAtom.instance != null && CriAtom.instance != this)
        {
            var obj = CriAtom.instance.gameObject;
            CriAtom.instance.Shutdown();
            CriAtomEx.UnregisterAcf();
            GameObject.Destroy(obj);
        }

        CriAtom.instance = this;

        CriAtomPlugin.InitializeLibrary();

        if (!String.IsNullOrEmpty(this.acfFile))
        {
            string acfPath = Path.Combine(CriWare.Common.streamingAssetsPath, this.acfFile);
            CriAtomEx.RegisterAcf(null, acfPath);
        }

        if (!String.IsNullOrEmpty(dspBusSetting))
        {
            AttachDspBusSetting(dspBusSetting);
        }

        foreach (var cueSheet in this.cueSheets)
        {
            cueSheet.acb = this.LoadAcbFile(null, cueSheet.acbFile, cueSheet.awbFile);
        }

        if (this.dontDestroyOnLoad)
        {
            GameObject.DontDestroyOnLoad(this.gameObject);
        }
    }
        private void Start()
        {
            CriSoundUtility
            .LoadAcfFile(generalSettings.AcfFile)
            .Subscribe(x => {
                // initialize
                if (generalSettings.Environment == Environment.Cri)
                {
                    bgmPlayer   = new CriSingleSoundPlayer(this);
                    sePlayer    = new CriMultiSoundPlayer(this);
                    voicePlayer = new CriMultiSoundPlayer(this);
                    Live        = new CriLiveSoundPlayer(this, liveSettings);
                }
                else
                {
                    bgmPlayer   = new UnityBgmPlayer(unitySoundController);
                    sePlayer    = new UnitySePlayer(unitySoundController);
                    voicePlayer = new UnityVoicePlayer(unitySoundController);
                    Live        = new UnityLiveSoundPlayer(this, unitySoundController, liveSettings);
                }

                CriAtomEx.RegisterAcf(x);

                // add cue sheet
                bgmPlayer.AddCueSheet(bgmSettings.CueSheet);
                sePlayer.AddCueSheet(seSettings.CueSheet);
                voicePlayer.AddCueSheet(voiceSettings.CueSheet);

                Initialized = true;
            })
            .AddTo(this);
        }
Exemple #4
0
    /* @cond DOXYGEN_IGNORE */
    #region Functions for internal use

    private void Setup()
    {
        CriAtom.instance = this;

        CriAtomPlugin.InitializeLibrary();

        if (!String.IsNullOrEmpty(this.acfFile))
        {
            string acfPath = Path.Combine(CriWare.streamingAssetsPath, this.acfFile);
            CriAtomEx.RegisterAcf(null, acfPath);
        }

        if (!String.IsNullOrEmpty(dspBusSetting))
        {
            AttachDspBusSetting(dspBusSetting);
        }

        foreach (var cueSheet in this.cueSheets)
        {
            cueSheet.acb = this.LoadAcbFile(null, cueSheet.acbFile, cueSheet.awbFile);
        }

        if (this.dontDestroyOnLoad)
        {
            GameObject.DontDestroyOnLoad(this.gameObject);
        }
    }
 // Token: 0x060159CC RID: 88524 RVA: 0x00580644 File Offset: 0x0057E844
 public void CriRegisterAcf(string acfFullPath)
 {
     if (CriWare.IsStreamingAssetsPath(acfFullPath))
     {
         CriAtomEx.RegisterAcf(null, Path.Combine(CriWare.streamingAssetsPath, acfFullPath));
     }
     else
     {
         CriAtomEx.RegisterAcf(null, acfFullPath);
     }
 }
Exemple #6
0
    /* @endcond */

    #region Functions

    /**
     * <summary>DSPバス設定のアタッチ</summary>
     * <param name='settingName'>DSPバス設定の名前</param>
     * <remarks>
     * <para header='説明'>DSPバス設定からDSPバスを構築してサウンドレンダラにアタッチします。<br/>
     * 現在設定中のDSPバス設定を切り替える場合は、一度デタッチしてから再アタッチしてください。
     * <br/></para>
     * <para header='注意'>本関数は完了復帰型の関数です。<br/>
     * 本関数を実行すると、しばらくの間Atomライブラリのサーバ処理がブロックされます。<br/>
     * 音声再生中に本関数を実行すると、音途切れ等の不具合が発生する可能性があるため、
     * 本関数の呼び出しはシーンの切り替わり等、負荷変動を許容できるタイミングで行ってください。<br/></para>
     * </remarks>
     * <seealso cref='CriAtom::DetachDspBusSetting'/>
     */
    public static void AttachDspBusSetting(string settingName)
    {
        CriAtom.instance.dspBusSetting = settingName;
        if (!String.IsNullOrEmpty(settingName))
        {
            CriAtomEx.AttachDspBusSetting(settingName);
        }
        else
        {
            CriAtomEx.DetachDspBusSetting();
        }
    }
Exemple #7
0
 void OnCollisionEnter(Collision other)
 {
     if (other.gameObject.tag.Equals("kabe"))
     {
         CriAtomEx.SetGameVariable("myHit", 1f);
         //Debug.Log("kabe hit");
         CAS_Player.Play();
     }
     if (other.gameObject.tag.Equals("Cube"))
     {
         CriAtomEx.SetGameVariable("myHit", 0f);
         //Debug.Log("cube hit");
         CAS_Player.Play();
     }
     //Debug.Log("いちちクリエイター");
 }
Exemple #8
0
    public static CriWare.Common.CpuUsage GetCpuUsage()
    {
        float currentTimeSinceStartup = Time.realtimeSinceStartup;

        if (currentTimeSinceStartup - timeSinceStartup > 1.0f)
        {
            CriAtomEx.PerformanceInfo info;
            CriAtomEx.GetPerformanceInfo(out info);

            cpuUsage.last    = info.lastServerTime * 100.0f / info.averageServerInterval;
            cpuUsage.average = info.averageServerTime * 100.0f / info.averageServerInterval;
            cpuUsage.peak    = info.maxServerTime * 100.0f / info.averageServerInterval;

            CriAtomEx.ResetPerformanceMonitor();
            timeSinceStartup = currentTimeSinceStartup;
        }
        return(cpuUsage);
    }
Exemple #9
0
 void Awake()
 {
     if (CriAtom.instance != null && CriAtom.instance != this)
     {
         if (CriAtom.instance.acfFile != this.acfFile)
         {
             var obj = CriAtom.instance.gameObject;
             CriAtom.instance.Shutdown();
             CriAtomEx.UnregisterAcf();
             GameObject.Destroy(obj);
             return;
         }
         if (CriAtom.instance.dspBusSetting != this.dspBusSetting)
         {
             CriAtom.AttachDspBusSetting(this.dspBusSetting);
         }
         CriAtom.instance.MargeCueSheet(this.cueSheets, this.dontRemoveExistsCueSheet);
         GameObject.Destroy(this.gameObject);
     }
 }
Exemple #10
0
    private IEnumerator RegisterAcfAsync(string acfFile, string dspBusSetting)
    {
        #if UNITY_EDITOR
        string acfPath = "file://" + CriWare.Common.streamingAssetsPath + "/" + acfFile;
        #else
        string acfPath = CriWare.Common.streamingAssetsPath + "/" + acfFile;
        #endif
        using (var req = new WWW(acfPath)) {
            yield return(req);

            this.acfData = req.bytes;
        }
        CriAtomEx.RegisterAcf(this.acfData);

        if (!String.IsNullOrEmpty(dspBusSetting))
        {
            AttachDspBusSetting(dspBusSetting);
        }
        this.acfIsLoading = false;
    }
	/**
	 * <summary>ポーズ解除</summary>
	 * <param name="mode">ポーズ解除対象</param>
	 * \par 説明:
	 * 一時停止状態の解除を行います。<br/>
	 * <br/>
	 * 引数(mode)に PausedPlayback を指定して本関数を実行すると、
	 * ユーザが ::CriAtomExPlayer::Pause 関数(または ::CriAtomExPlayback::Pause 
	 * 関数)で一時停止状態になった音声の再生が再開されます。<br/>
	 * 引数(mode)に PreparedPlayback を指定して本関数を実行すると、
	 * ユーザが ::CriAtomExPlayer::Prepare 関数で再生準備を指示した音声の再生が開始されます。<br/>
	 * \par 備考:
	 * ::CriAtomExPlayer::Pause 関数でポーズ状態のプレーヤに対して ::CriAtomExPlayer::Prepare
	 * 関数で再生準備を行った場合、その音声は PausedPlayback 指定のポーズ解除処理と、 
	 * PreparedPlayback 指定のポーズ解除処理の両方が行われるまで、再生が開始されません。<br/>
	 * <br/>
	 * ::CriAtomExPlayer::Pause 関数か ::CriAtomExPlayer::Prepare 関数かに関係なく、
	 * 常に再生を開始したい場合には、引数(mode)に AllPlayback を指定して本関数を実行してください。<br/>
	 * \attention
	 * 本関数を実行すると、プレーヤで再生している"全ての"音声に対してポーズ解除
	 * の処理が行われます。<br/>
	 * 再生中の個々の音声に対し、個別にポーズ解除の処理を行う場合には、
	 * ::CriAtomExPlayback::Resume 関数をご利用ください。
	 * \sa CriAtomExPlayer::Pause, CriAtomExPlayback::Resume
	 */
	public void Resume(CriAtomEx.ResumeMode mode)
	{
		criAtomExPlayer_Resume(this.handle, mode);
	}
	private static extern bool criAtomExPlayback_GetFormatInfo(
		uint id, out CriAtomEx.FormatInfo info);
	/**
	 * <summary>再生音のフォーマット情報の取得</summary>
	 * <param name="info">フォーマット情報</param>
	 * <returns>情報が取得できたかどうか( true = 取得できた、 false = 取得できなかった)</returns>
	 * \par 説明:
	 * ::CriAtomExPlayer::Start 関数で再生された音声のフォーマット情報を取得します。<br/>
	 * <br/>
	 * フォーマット情報が取得できた場合、本関数は true を返します。<br/>
	 * 指定したボイスが既に消去されている場合等には、本関数は false を返します。<br/>
	 * \par 備考:
	 * 複数の音声データを含むキューを再生した場合、最初に見つかった音声
	 * データの情報が返されます。<br/>
	 * \attention
	 * 本関数は、音声再生中のみフォーマット情報を取得可能です。<br/>
	 * 再生準備中や再生終了後、発音数制御によりボイスが消去された場合には、
	 * フォーマット情報の取得に失敗します。<br/>
	 * \sa CriAtomExPlayer::Start, CriAtomExPlayer::GetStatus
	 */
	public bool GetFormatInfo(out CriAtomEx.FormatInfo info)
	{
		return criAtomExPlayback_GetFormatInfo(this.id, out info);
	}
	private static extern void criAtomExPlayer_SetSoundRendererType(IntPtr player, CriAtomEx.SoundRendererType type);
	private static extern void criAtomExPlayer_SetBiquadFilterParameters(
		IntPtr player, CriAtomEx.BiquadFilterType type, float frequency, float gain, float q);
	private static extern int criAtomExPlayer_GetParameterSint32(IntPtr player, CriAtomEx.Parameter id);
 private void OnDestroy()
 {
     CriAtomEx.UnregisterAcf();
 }
Exemple #18
0
 /**
  * <summary>センドレベルの設定</summary>
  * <param name="ch">チャンネル番号</param>
  * <param name="spk">スピーカーID</param>
  * <param name="level">センドレベル値(0.0f~1.0f)</param>
  * \par 説明:
  * センドレベルを指定します。<br>
  * センドレベルは、音声データの各チャンネルの音声を、どのスピーカーから
  * どの程度の音量で出力するかを指定するための仕組みです。<br>
  * 本関数でセンドレベルを設定後、 ::CriAtomExPlayer::Start 関数により再生開始すると、
  * 設定されたセンドレベルで再生されます。<br>
  * また設定後、 ::CriAtomExPlayer::Update 関数、 ::CriAtomExPlayer::UpdateAll 関数を呼び出すことにより、
  * すでに再生された音声のセンドレベルを更新することができます。<br>
  * <br>
  * 第2引数のチャンネル番号は"音声データのチャンネル番号"を指定します。<br>
  * 第3引数のスピーカーIDには、指定したチャンネル番号のデータをどのスピーカーから
  * 出力するかを指定し、第4引数では送信時のレベル(ボリューム)を指定します。<br>
  * 例えば、音声データのチャンネル0番のデータをライトスピーカーから
  * フルボリューム(1.0f)で出力したい場合、指定は以下のようになります。
  * \code
  * player.SetSendLevel(0, CriAtomEx.Speaker.FrontRight, 1.0f);
  * \endcode
  * <br>
  * センドレベル値の範囲や扱いは、ボリュームと同等です。 ::CriAtomExPlayer::SetVolume 関数を参照してください。<br>
  * <br>
  * \par 例:
  * \code
  * CriSint32 ch = 0;	// channel number 0
  * CriAtomEx.Speaker spk = CriAtomEx.Speaker.FrontCenter;
  * CriFloat32 level = 1.0f;
  * // Set send level(ch0 to center)
  * player.SetSendLevel(ch, spk, level);
  * // Start playback
  * CriAtomExPlayback playback = player.Start();
  *                :
  * // Change send level
  * level = 0.7f;
  * player.SetSendLevel(ch, spk, level);
  * player.Update(playback);
  * \endcode
  * \par 備考:
  * センドレベルの設定には「自動設定」「手動設定」の2通りが存在します。<br>
  * AtomExプレーヤを作成した直後や、 ::CriAtomExPlayer::ResetParameters 関数で
  * パラメータをクリアした場合、センドレベルの設定は「自動設定」となります。<br>
  * これに対し、本関数を実行した場合、パンの設定は「手動設定」となります。<br>
  * <br>
  * 「自動設定」の場合、AtomExプレーヤは以下のように音声をルーティングします。<br>
  * <br>
  * 【モノラル音声を再生する場合】<br>
  * チャンネル0の音声を左右のスピーカーから約0.7f(-3dB)のボリュームで出力します。<br>
  * <br>
  * 【ステレオ音声を再生する場合】<br>
  * チャンネル0の音声をレフトスピーカーから、
  * チャンネル1の音声をライトスピーカーから出力します。<br>
  * <br>
  * 【4ch音声を再生する場合】<br>
  * チャンネル0の音声をレフトスピーカーから、チャンネル1の音声をライトスピーカーから、
  * チャンネル2の音声をレフトサラウンドスピーカーから、
  * チャンネル3の音声をライトサラウンドスピーカーからでそれぞれ出力します。<br>
  * <br>
  * 【5.1ch音声を再生する場合】<br>
  * チャンネル0の音声をレフトスピーカーから、チャンネル1の音声をライトスピーカーから、
  * チャンネル2の音声をセンタースピーカーから、チャンネル3の音声をLFEから、
  * チャンネル4の音声をレフトサラウンドスピーカーから、
  * チャンネル5の音声をライトサラウンドスピーカーからそれぞれ出力します。<br>
  * <br>
  * これに対し、本関数を用いて「手動設定」を行った場合、音声データのチャンネル数に
  * 関係なく、指定されたルーティングで音声が出力されます。<br>
  * パンの設定をクリアし、ルーティングを「自動設定」の状態に戻したい場合は、
  * ::CriAtomExPlayer::ResetParameters 関数を実行してください。<br>
  * <br>
  * 本パラメータはデータ側には設定できないため、常に本関数の設定値が適用されます。<br>
  * \attention
  * センドレベルを設定していないチャンネルについては、音声が出力されません。<br>
  * 例えば、再生する音声データがステレオにもかかわらず、どちらか一方のチャンネルに対して
  * しかセンドレベルが設定されていない場合、センドレベルを設定していないチャンネルの音声
  * はミュートされます。<br>
  * センドレベルをコントロールする際には、必ず出力を行いたい全てのチャンネルについてセンド
  * レベルの設定を行ってください。<br>
  * \sa CriAtomExPlayer::Start, CriAtomExPlayer::Update, CriAtomExPlayer::UpdateAll, CriAtomExPlayer::SetVolume
  */
 public void SetSendLevel(int channel, CriAtomEx.Speaker id, float level)
 {
     criAtomExPlayer_SetSendLevel(this.handle, channel, id, level);
 }
Exemple #19
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;
        }

        /* CRI File Systemライブラリの初期化 */
        if (initializesFileSystem)
        {
            CriFsPlugin.SetConfigParameters(
                fileSystemConfig.numberOfLoaders,
                fileSystemConfig.numberOfBinders,
                fileSystemConfig.numberOfInstallers,
                (fileSystemConfig.installBufferSize * 1024),
                fileSystemConfig.maxPath,
                fileSystemConfig.minimizeFileDescriptorUsage
                );
            {
                /* Ver.2.03.03 以前は 0 がデフォルト値だったことの互換性維持のための処理 */
                if (fileSystemConfig.androidDeviceReadBitrate == 0)
                {
                    fileSystemConfig.androidDeviceReadBitrate = CriFsConfig.defaultAndroidDeviceReadBitrate;
                }
            }
            CriFsPlugin.SetConfigAdditionalParameters_ANDROID(fileSystemConfig.androidDeviceReadBitrate);
            CriFsPlugin.InitializeLibrary();
            if (fileSystemConfig.userAgentString.Length != 0)
            {
                CriFsUtility.SetUserAgentString(fileSystemConfig.userAgentString);
            }
        }

        /* CRI Atomライブラリの初期化 */
        if (initializesAtom)
        {
            /* 初期化処理の実行 */
            CriAtomPlugin.SetConfigParameters(
                (int)Math.Max(atomConfig.maxVirtualVoices, CriAtomPlugin.GetRequiredMaxVirtualVoices(atomConfig)),
                atomConfig.standardVoicePoolConfig.memoryVoices,
                atomConfig.standardVoicePoolConfig.streamingVoices,
                atomConfig.hcaMxVoicePoolConfig.memoryVoices,
                atomConfig.hcaMxVoicePoolConfig.streamingVoices,
                atomConfig.outputSamplingRate,
                atomConfig.usesInGamePreview,
                atomConfig.serverFrequency);

            CriAtomPlugin.SetConfigAdditionalParameters_IOS(
                (uint)Math.Max(atomConfig.iosBufferingTime, 16),
                atomConfig.iosOverrideIPodMusic
                );

            {
                /* Ver.2.03.03 以前は 0 がデフォルト値だったことの互換性維持のための処理 */
                if (atomConfig.androidBufferingTime == 0)
                {
                    atomConfig.androidBufferingTime = (int)(4 * 1000.0 / atomConfig.serverFrequency);
                }
                if (atomConfig.androidStartBufferingTime == 0)
                {
                    atomConfig.androidStartBufferingTime = (int)(3 * 1000.0 / atomConfig.serverFrequency);
                }
            }
            CriAtomPlugin.SetConfigAdditionalParameters_ANDROID(
                atomConfig.androidLowLatencyStandardVoicePoolConfig.memoryVoices,
                atomConfig.androidLowLatencyStandardVoicePoolConfig.streamingVoices,
                atomConfig.androidBufferingTime,
                atomConfig.androidStartBufferingTime);

            CriAtomPlugin.InitializeLibrary();

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

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

                CriAtomEx.RegisterAcf(null, acfPath);
            }
        }

        /* CRI Manaライブラリの初期化 */
        if (initializesMana)
        {
            CriManaPlugin.SetConfigParameters(manaConfig.graphicsMultiThreaded, manaConfig.numberOfDecoders, manaConfig.numberOfMaxEntries);
            CriManaPlugin.InitializeLibrary();
        }

        /* シーンチェンジ後もオブジェクトを維持するかどうかの設定 */
        if (dontDestroyOnLoad)
        {
            DontDestroyOnLoad(transform.gameObject);
            DontDestroyOnLoad(CriWare.managerObject);
        }
    }
	/**
	 * <summary>キューでコントロール可能なAISAC Controlの取得(キューID指定)</summary>
	 * <param name="cueId">キューID</param>
	 * <param name="index">AISAC Controlインデックス</param>
	 * <param name="info">AISAC Control情報</param>
	 * <returns>取得に成功したかどうか(成功:true、失敗:false)</returns>
	 * \par 説明:
	 * キューIDとAISAC Controlインデックスを指定して、AISAC Control情報を取得します。<br/>
	 * 指定したIDのキューが存在しない場合は、falseが返ります。<br/>
	 * \sa CriAtomExAcb::GetNumUsableAisacControls
	 */
	public bool GetUsableAisacControl(int cueId, int index, out CriAtomEx.AisacControlInfo info)
	{
		using (var mem = new CriStructMemory<CriAtomEx.AisacControlInfo>()) {
			bool result = criAtomExAcb_GetUsableAisacControlById(this.handle, cueId, (ushort)index, mem.ptr);
			info = new CriAtomEx.AisacControlInfo(mem.bytes, 0);
			return result;
		}
	}
	/**
	 * <summary>音声波形情報の取得(キューID指定)</summary>
	 * <param name="cueId">キューID</param>
	 * <param name="info>音声波形情報</param>
	 * <returns>取得に成功したかどうか(成功:true、失敗:false)</returns>
	 * \par 説明:
	 * キューIDを指定して、そのキューで再生される音声波形の情報を取得します。<br/>
	 * そのキューで再生される音声波形が複数ある場合、
	 * 初めのトラックで初めに再生される音声波形の情報が取得されます。
	 * 指定したIDのキューが存在しない場合、falseが返ります。<br/>
	 */
	public bool GetWaveFormInfo(int cueId, out CriAtomEx.WaveformInfo info)
	{
		using (var mem = new CriStructMemory<CriAtomEx.WaveformInfo>()) {
			bool result = criAtomExAcb_GetWaveformInfoById(this.handle, cueId, mem.ptr);
			info = new CriAtomEx.WaveformInfo(mem.bytes, 0);
			return result;
		}
	}
	/**
	 * <summary>キュー情報の取得(キューインデックス指定)</summary>
	 * <param name="index">キューインデックス</param>
	 * <param name="info">キュー情報</param>
	 * <returns>取得に成功したかどうか(成功:true、失敗:false)</returns>
	 * \par 説明:
	 * キューインデックスを指定して、キュー情報を取得します。<br/>
	 * 指定したインデックスのキューが存在しない場合、falseが返ります。<br/>
	 * \sa criAtomExAcb_GetCueInfoById, criAtomExAcb_GetCueInfoByIndex
	 */
	public bool GetCueInfoByIndex(int index, out CriAtomEx.CueInfo info)
	{
		using (var mem = new CriStructMemory<CriAtomEx.CueInfo>()) {
			bool result = criAtomExAcb_GetCueInfoByIndex(this.handle, index, mem.ptr);
			info = new CriAtomEx.CueInfo(mem.bytes, 0);
			return result;
		}
	}
	/**
	 * <summary>キュー情報の取得(キュー名指定)</summary>
	 * <param name="cueName">キュー名</param>
	 * <param name="info">キュー情報</param>
	 * <returns>取得に成功したかどうか(成功:true、失敗:false)</returns>
	 * \par 説明:
	 * キュー名を指定して、キュー情報を取得します。<br/>
	 * 指定した名前のキューが存在しない場合、falseが返ります。<br/>
	 * \sa criAtomExAcb_GetCueInfoById, criAtomExAcb_GetCueInfoByIndex
	 */
	public bool GetCueInfo(string cueName, out CriAtomEx.CueInfo info)
	{
		using (var mem = new CriStructMemory<CriAtomEx.CueInfo>()) {
			bool result = criAtomExAcb_GetCueInfoByName(this.handle, cueName, mem.ptr);
			info = new CriAtomEx.CueInfo(mem.bytes, 0);
			return result;
		}
	}
Exemple #24
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;
        }

        /* CRI File Systemライブラリの初期化 */
        if (initializesFileSystem)
        {
            CriFsPlugin.SetConfigParameters(
                fileSystemConfig.numberOfLoaders,
                fileSystemConfig.numberOfBinders,
                fileSystemConfig.numberOfInstallers,
                (fileSystemConfig.installBufferSize * 1024),
                fileSystemConfig.maxPath,
                fileSystemConfig.minimizeFileDescriptorUsage
                );
            {
                /* Ver.2.03.03 以前は 0 がデフォルト値だったことの互換性維持のための処理 */
                if (fileSystemConfig.androidDeviceReadBitrate == 0)
                {
                    fileSystemConfig.androidDeviceReadBitrate = CriFsConfig.defaultAndroidDeviceReadBitrate;
                }
            }
            CriFsPlugin.SetConfigAdditionalParameters_ANDROID(fileSystemConfig.androidDeviceReadBitrate);
            CriFsPlugin.InitializeLibrary();
            if (fileSystemConfig.userAgentString.Length != 0)
            {
                CriFsUtility.SetUserAgentString(fileSystemConfig.userAgentString);
            }
        }

        /* CRI Atomライブラリの初期化 */
        if (initializesAtom)
        {
            /* 初期化処理の実行 */
            CriAtomPlugin.SetConfigParameters(
                (int)Math.Max(atomConfig.maxVirtualVoices, CriAtomPlugin.GetRequiredMaxVirtualVoices(atomConfig)),
                atomConfig.maxVoiceLimitGroups,
                atomConfig.maxCategories,
                atomConfig.standardVoicePoolConfig.memoryVoices,
                atomConfig.standardVoicePoolConfig.streamingVoices,
                atomConfig.hcaMxVoicePoolConfig.memoryVoices,
                atomConfig.hcaMxVoicePoolConfig.streamingVoices,
                atomConfig.outputSamplingRate,
                atomConfig.asrOutputChannels,
                atomConfig.usesInGamePreview,
                atomConfig.serverFrequency,
                atomConfig.maxParameterBlocks,
                atomConfig.categoriesPerPlayback,
                atomConfig.maxBuses,
                atomConfig.vrMode);

            CriAtomPlugin.SetConfigAdditionalParameters_PC(
                atomConfig.pcBufferingTime
                );

            CriAtomPlugin.SetConfigAdditionalParameters_IOS(
                (uint)Math.Max(atomConfig.iosBufferingTime, 16),
                atomConfig.iosOverrideIPodMusic
                );
            /* Android 固有の初期化パラメータを登録 */
            {
                /* Ver.2.03.03 以前は 0 がデフォルト値だったことの互換性維持のための処理 */
                if (atomConfig.androidBufferingTime == 0)
                {
                    atomConfig.androidBufferingTime = (int)(4 * 1000.0 / atomConfig.serverFrequency);
                }
                if (atomConfig.androidStartBufferingTime == 0)
                {
                    atomConfig.androidStartBufferingTime = (int)(3 * 1000.0 / atomConfig.serverFrequency);
                }
                IntPtr android_context = IntPtr.Zero;
#if !UNITY_EDITOR && UNITY_ANDROID
                if (atomConfig.androidUsesAndroidFastMixer)
                {
                    AndroidJavaClass  jc       = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                    AndroidJavaObject activity = jc.GetStatic <AndroidJavaObject>("currentActivity");
                    android_context = activity.GetRawObject();
                }
#endif
                CriAtomPlugin.SetConfigAdditionalParameters_ANDROID(
                    atomConfig.androidLowLatencyStandardVoicePoolConfig.memoryVoices,
                    atomConfig.androidLowLatencyStandardVoicePoolConfig.streamingVoices,
                    atomConfig.androidBufferingTime,
                    atomConfig.androidStartBufferingTime,
                    android_context);
            }
            CriAtomPlugin.SetConfigAdditionalParameters_VITA(
                atomConfig.vitaAtrac9VoicePoolConfig.memoryVoices,
                atomConfig.vitaAtrac9VoicePoolConfig.streamingVoices,
                (initializesMana) ? manaConfig.numberOfDecoders : 0);
            {
                /* VR Mode が有効なときも useAudio3D を True にする */
                atomConfig.ps4Audio3dConfig.useAudio3D |= atomConfig.vrMode;
                CriAtomPlugin.SetConfigAdditionalParameters_PS4(
                    atomConfig.ps4Atrac9VoicePoolConfig.memoryVoices,
                    atomConfig.ps4Atrac9VoicePoolConfig.streamingVoices,
                    atomConfig.ps4Audio3dConfig.useAudio3D,
                    atomConfig.ps4Audio3dConfig.voicePoolConfig.memoryVoices,
                    atomConfig.ps4Audio3dConfig.voicePoolConfig.streamingVoices);
            }
            CriAtomPlugin.SetConfigAdditionalParameters_WEBGL(
                atomConfig.webglWebAudioVoicePoolConfig.voices);

            CriAtomPlugin.InitializeLibrary();

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

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

                CriAtomEx.RegisterAcf(null, acfPath);
            }
        }

#if UNITY_EDITOR || (!UNITY_PS3)
        /* CRI Manaライブラリの初期化 */
        if (initializesMana)
        {
            CriManaPlugin.SetConfigParameters(manaConfig.graphicsMultiThreaded, manaConfig.numberOfDecoders, manaConfig.numberOfMaxEntries);
            CriManaPlugin.SetConfigAdditonalParameters_ANDROID(true);
#if UNITY_PSP2
            CriWareVITA.EnableManaH264Playback(manaConfig.vitaH264PlaybackConfig.useH264Playback);
            CriWareVITA.SetManaH264DecoderMaxSize(manaConfig.vitaH264PlaybackConfig.maxWidth,
                                                  manaConfig.vitaH264PlaybackConfig.maxHeight);
            CriWareVITA.EnableManaH264DecoderGetDisplayMemoryFromUnityTexture(manaConfig.vitaH264PlaybackConfig.getMemoryFromTexture);
#endif
            CriManaPlugin.InitializeLibrary();
        }
#endif

        /*JP< CRI Ware Decrypterの設定 */
        if (useDecrypter)
        {
            ulong  decryptionKey      = (decrypterConfig.key.Length == 0) ? 0 : Convert.ToUInt64(decrypterConfig.key);
            string authenticationPath = decrypterConfig.authenticationFile;
            if (CriWare.IsStreamingAssetsPath(authenticationPath))
            {
                authenticationPath = Path.Combine(CriWare.streamingAssetsPath, authenticationPath);
            }
#if !UNITY_EDITOR && UNITY_WEBGL
            CriWare.criWareUnity_SetDecryptionKey_EMSCRIPTEN(
                decryptionKey
                );
#else
            CriWare.criWareUnity_SetDecryptionKey(
                decryptionKey,
                authenticationPath,
                decrypterConfig.enableAtomDecryption,
                decrypterConfig.enableManaDecryption
                );
#endif
        }
        else
        {
#if !UNITY_EDITOR && UNITY_WEBGL
            CriWare.criWareUnity_SetDecryptionKey_EMSCRIPTEN(0);
#else
            CriWare.criWareUnity_SetDecryptionKey(0, "", false, false);
#endif
        }

        /* シーンチェンジ後もオブジェクトを維持するかどうかの設定 */
        if (dontDestroyOnLoad)
        {
            DontDestroyOnLoad(transform.gameObject);
            DontDestroyOnLoad(CriWare.managerObject);
        }
    }
Exemple #25
0
 private static extern void criAtomExPlayer_SetSendLevel(IntPtr player, int channel, CriAtomEx.Speaker id, float level);
    /**
     * <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;
        }

        /* CRI File Systemライブラリの初期化 */
        if (initializesFileSystem)
        {
            CriFsPlugin.SetConfigParameters(
                fileSystemConfig.numberOfLoaders,
                fileSystemConfig.numberOfBinders,
                fileSystemConfig.numberOfInstallers,
                (fileSystemConfig.installBufferSize * 1024),
                fileSystemConfig.maxPath,
                fileSystemConfig.minimizeFileDescriptorUsage
                );
            {
                /* Ver.2.03.03 以前は 0 がデフォルト値だったことの互換性維持のための処理 */
                if (fileSystemConfig.androidDeviceReadBitrate == 0)
                {
                    fileSystemConfig.androidDeviceReadBitrate = CriFsConfig.defaultAndroidDeviceReadBitrate;
                }
            }
            CriFsPlugin.SetConfigAdditionalParameters_ANDROID(fileSystemConfig.androidDeviceReadBitrate);
            CriFsPlugin.InitializeLibrary();
            if (fileSystemConfig.userAgentString.Length != 0)
            {
                CriFsUtility.SetUserAgentString(fileSystemConfig.userAgentString);
            }
        }

        /* CRI Atomライブラリの初期化 */
        if (initializesAtom)
        {
            /* 初期化処理の実行 */
            CriAtomPlugin.SetConfigParameters(
                (int)Math.Max(atomConfig.maxVirtualVoices, CriAtomPlugin.GetRequiredMaxVirtualVoices(atomConfig)),
                atomConfig.maxVoiceLimitGroups,
                atomConfig.maxCategories,
                atomConfig.standardVoicePoolConfig.memoryVoices,
                atomConfig.standardVoicePoolConfig.streamingVoices,
                atomConfig.hcaMxVoicePoolConfig.memoryVoices,
                atomConfig.hcaMxVoicePoolConfig.streamingVoices,
                atomConfig.outputSamplingRate,
                atomConfig.asrOutputChannels,
                atomConfig.usesInGamePreview,
                atomConfig.serverFrequency,
                atomConfig.maxParameterBlocks,
                atomConfig.categoriesPerPlayback,
                atomConfig.maxBuses,
                false);

            CriAtomPlugin.SetConfigAdditionalParameters_PC(
                atomConfig.pcBufferingTime
                );

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

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

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

                CriAtomEx.RegisterAcf(null, acfPath);
            }
        }

        /* CRI Manaライブラリの初期化 */
        if (initializesMana)
        {
            CriManaPlugin.SetConfigParameters(manaConfig.graphicsMultiThreaded, manaConfig.numberOfDecoders, manaConfig.numberOfMaxEntries);
            CriManaPlugin.InitializeLibrary();
        }

        /* シーンチェンジ後もオブジェクトを維持するかどうかの設定 */
        if (dontDestroyOnLoad)
        {
            DontDestroyOnLoad(transform.gameObject);
            DontDestroyOnLoad(CriWare.managerObject);
        }
    }
Exemple #27
0
        //----- method -----

        public void Initialize(string decryptKey)
        {
            #if ENABLE_CRIWARE
            // CRIの管理GameObject名にリネーム.
            gameObject.transform.name = CriWareManageObjectName;

            // CriAtomServer → CriAtomの順で初期化しないとCriAtomにCriAtomServerを生成されてしまう.
            CriAtomServer.CreateInstance();

            if (Initializer == null)
            {
                // Acfを管理する為自動初期化を無効化.
                var source            = initializerPrefab.Source;
                var initializerSource = UnityUtility.GetComponent <CriWareInitializer>(source);
                initializerSource.dontInitializeOnAwake = true;

                // 生成.
                Initializer = initializerPrefab.Instantiate <CriWareInitializer>();
                Initializer.transform.name = "Initializer";

                //========================================================
                // ライブラリ初期化(この処理完了後にCRIが有効化される).
                //========================================================

                // 手動管理する為無効化.
                Initializer.dontDestroyOnLoad = false;

                // 認証キー.
                Initializer.decrypterConfig.key = decryptKey;

                // ファイルハンドルの使用数を節約する為、ファイルアクセスが行われるタイミングでのみハンドルを利用するよう変更.
                // ※ 逐次オープンとなるためファイルアクセスの性能は低下する.
                Initializer.fileSystemConfig.numberOfBinders             = 65535;
                Initializer.fileSystemConfig.minimizeFileDescriptorUsage = true;

                // 同時インストール可能数を設定.
                Initializer.fileSystemConfig.numberOfInstallers = 65535;

                // 初期化実行.
                Initializer.Initialize();
            }

            if (ErrorHandler == null)
            {
                var errorHandlerObject = UnityUtility.CreateEmptyGameObject(gameObject, "ErrorHandler");

                UnityUtility.SetActive(errorHandlerObject, false);

                // Awakeが実行されないように非アクティブでAddComponent.
                ErrorHandler = errorHandlerObject.AddComponent <CriWareErrorHandler>();
                ErrorHandler.dontDestroyOnLoad = false;

                UnityUtility.SetActive(errorHandlerObject, true);
            }

            if (!CriWareInitializer.IsInitialized())
            {
                Initializer.Initialize();
            }

            // CriFsServerはライブラリの初期化後に生成.
            CriFsServer.CreateInstance();

            // CriAtomはライブラリの初期化後に生成.
            var criAtom = gameObject.AddComponent <CriAtom>();

            // CriAtomのSetupが隠蔽されているので手動で初期化する.
            criAtom.acfFile = Initializer.atomConfig.acfFileName;

            if (!string.IsNullOrEmpty(criAtom.acfFile))
            {
                var acfPath = PathUtility.Combine(global::CriWare.streamingAssetsPath, criAtom.acfFile);

                acfPath += CriAssetDefinition.AcfExtension;

                CriAtomEx.RegisterAcf(null, acfPath);
            }
            #endif
        }
Exemple #28
0
        //----- method -----

        public void Initialize(string cryptoKey)
        {
            #if ENABLE_CRIWARE_SOFDEC
            if (!CriManaPlugin.IsLibraryInitialized())
            {
                // VP9初期化.

                if (CriManaVp9.SupportCurrentPlatform())
                {
                    CriManaVp9.SetupVp9Decoder();
                }
            }
            #endif

            #if ENABLE_CRIWARE_ADX || ENABLE_CRIWARE_SOFDEC
            // CRIの管理GameObject名にリネーム.
            gameObject.transform.name = CriWareManageObjectName;

            // CriAtomServer → CriAtomの順で初期化しないとCriAtomにCriAtomServerを生成されてしまう.
            CriAtomServer.CreateInstance();

            if (Initializer == null)
            {
                // Acfを管理する為自動初期化を無効化.
                var source            = initializerPrefab.Source;
                var initializerSource = UnityUtility.GetComponent <CriWareInitializer>(source);
                initializerSource.dontInitializeOnAwake = true;

                // 生成.
                Initializer = initializerPrefab.Instantiate <CriWareInitializer>();
                Initializer.transform.name = "Initializer";

                //========================================================
                // ライブラリ初期化(この処理完了後にCRIが有効化される).
                //========================================================

                // 手動管理する為無効化.
                Initializer.dontDestroyOnLoad = false;

                if (!string.IsNullOrEmpty(cryptoKey))
                {
                    // ※ ADX2-LEは自動で暗号化処理が掛かるのでdecrypterConfig自体が存在しない.

                    #if !ENABLE_CRIWARE_ADX_LE
                    // 認証キー.
                    Initializer.decrypterConfig.key = cryptoKey;
                    #endif
                }

                // インゲームプレビュー無効化.
                if (!Debug.isDebugBuild)
                {
                    Initializer.atomConfig.usesInGamePreview = false;
                }

                // ファイルハンドルの使用数を節約する為、ファイルアクセスが行われるタイミングでのみハンドルを利用するよう変更.
                // ※ 逐次オープンとなるためファイルアクセスの性能は低下する.
                Initializer.fileSystemConfig.numberOfBinders             = 65535;
                Initializer.fileSystemConfig.minimizeFileDescriptorUsage = true;

                // 同時インストール可能数を設定.
                Initializer.fileSystemConfig.numberOfInstallers = 65535;

                // 初期化実行.
                Initializer.Initialize();
            }

            if (ErrorHandler == null)
            {
                var errorHandlerObject = UnityUtility.CreateEmptyGameObject(gameObject, "ErrorHandler");

                UnityUtility.SetActive(errorHandlerObject, false);

                // Awakeが実行されないように非アクティブでAddComponent.
                ErrorHandler = errorHandlerObject.AddComponent <CriWareErrorHandler>();
                ErrorHandler.dontDestroyOnLoad = false;

                UnityUtility.SetActive(errorHandlerObject, true);
            }

            #if ENABLE_CRIWARE_FILESYSTEM
            // CriFsServerはライブラリの初期化後に生成.
            CriFsServer.CreateInstance();
            #endif

            // CriAtomはライブラリの初期化後に生成.
            var criAtom = gameObject.AddComponent <CriAtom>();

            // CriAtomのSetupが隠蔽されているので手動で初期化する.
            criAtom.acfFile = Initializer.atomConfig.acfFileName;

            if (!string.IsNullOrEmpty(criAtom.acfFile))
            {
                var acfPath = PathUtility.Combine(Common.streamingAssetsPath, criAtom.acfFile);

                acfPath += CriAssetDefinition.AcfExtension;

                CriAtomEx.RegisterAcf(null, acfPath);
            }
            #endif
        }
	/**
	 * <summary>パンタイプの設定</summary>
	 * <param name="panType">パンタイプ</param>
	 * \par 説明:
	 * パンタイプを指定します。<br/>
	 * 本関数でパンタイプを設定後、 ::CriAtomExPlayer::Start 関数により再生開始すると、設定されたパンタイプで再生されます。<br/>
	 * また設定後、 ::CriAtomExPlayer::Update 関数、 ::CriAtomExPlayer::UpdateAll 関数を呼び出すことにより、
	 * すでに再生された音声のパンタイプを更新することができます。<br/>
	 * \par 備考:
	 * キュー再生時に本関数を呼び出すと、データ側に設定されているパンタイプ設定を<b>上書き</b>します(データ側の設定値は無視されます)。<br/>
	 * 通常はデータ側でパンタイプが設定されているため、本関数を呼び出す必要はありません。<br/>
	 * ACBファイルを使用せずに音声を再生する場合に、3Dポジショニング処理を有効にするためには、本関数で Pos3d を設定してください。
	 * <br/>
	 * \sa CriAtomExPlayer::Start, CriAtomExPlayer::Update, CriAtomExPlayer::UpdateAll, CriAtomEx.PanType
	 */
	public void SetPanType(CriAtomEx.PanType panType)
	{
		criAtomExPlayer_SetPanType(this.handle, panType);
	}
	private static extern void criAtomExPlayer_SetPanType(IntPtr player, CriAtomEx.PanType panType);
	/**
	 * <summary>バイクアッドフィルタのパラメータの設定</summary>
	 * <param name="type">フィルタタイプ</param>
	 * <param name="frequency">正規化周波数(0.0f~1.0f)</param>
	 * <param name="gain">ゲイン(デシベル値)</param>
	 * <param name="q">Q値</param>
	 * \par 説明:
	 * バイクアッドフィルタの各種パラメータを指定します。<br/>
	 * 本関数でパラメータを設定後、 ::CriAtomExPlayer::Start 関数により再生開始すると、
	 * 設定されたパラメータでバイクアッドフィルタが動作します。<br/>
	 * また設定後、 ::CriAtomExPlayer::Update 関数、 ::CriAtomExPlayer::UpdateAll 関数を呼び出すことにより、
	 * すでに再生された音声に対してバイクアッドフィルタのパラメータを更新することができます。<br/>
	 * <br/>
	 * 正規化周波数は、対数軸上の24Hz~24000Hzを、0.0f~1.0fに正規化した値です。<br/>
	 * ゲインはデシベルで指定します。<br/>
	 * ゲインはフィルタタイプが以下の場合のみ有効です。<br/>
	 * - LowShelf	:ローシェルフフィルタ
	 * - HighShelf	:ハイシェルフフィルタ
	 * - Peaking	:ピーキングフフィルタ
	 * .
	 * \par 例:
	 * \code
	 * 	:
	 * // プレーヤの作成
	 * CriAtomExPlayer player = new CriAtomExPlayer();
	 * 	:
	 * // フィルタのパラメータを設定
	 * CriAtomEx.BiquadFilterType type = CriAtomEx.BiquadFilterType.LowPass;
	 * float frequency = 0.5f;
	 * float gain = 1.0f;
	 * float q = 3.0f;
	 * player.SetBiquadFilterParameters(type, frequency, gain, q);
	 * 
	 * // 再生の開始
	 * CriAtomExPlayback playback = player.Start();
	 * 	:
	 * // パラメータの変更
	 * // 注意)この時点では再生中の音声のパラメータは変更されない。
	 * frequency = 0.7f;
	 * player.SetBiquadFilterParameters(type, frequency, gain, q);
	 * 
	 * // プレーヤに設定されたパラメータを再生中の音声にも反映
	 * player.Update(playback);
	 * 	:
	 * \endcode
	 * \par 備考:
	 * - type<br/>
	 * 	データに設定された値を上書きします。
	 * - frequency<br/>
	 * 	データに設定された値に加算されます。
	 * - gain<br/>
	 * 	データに設定された値に乗算されます。
	 * - q<br/>
	 *	データに設定された値に加算されます。
	 * .
	 * <br/>
	 * 実際に適用される正規化カットオフ周波数が1.0fを超える値になった場合、値は1.0fにクリップされます。<br/>
	 * 同様に、実際に適用される正規化カットオフ周波数が0.0f未満の値になった場合も、値は0.0fにクリップされます。<br/>
	 * \attention
	 * HCA-MX用にエンコードされた音声データには、バイクアッドフィルタが適用されません。<br/>
	 * バイクアッドフィルタを使用したい音声は、ADXやHCA等、他のコーデックでエンコードしてください。<br/>
	 * \sa CriAtomExPlayer::Start, CriAtomExPlayer::Update, CriAtomExPlayer::UpdateAll
	 */
	public void SetBiquadFilterParameters(
		CriAtomEx.BiquadFilterType type, float frequency, float gain, float q)
	{
		criAtomExPlayer_SetBiquadFilterParameters(this.handle, type, frequency, gain, q);
	}
	private static extern void criAtomExPlayer_SetVoiceControlMethod(
		IntPtr player, CriAtomEx.VoiceControlMethod method);
	/**
	 * <summary>ボイス制御方法の指定</summary>
	 * <param name="method">ボイス制御方法</param>
	 * \par 説明:
	 * AtomExプレーヤにボイス制御方法を設定します。<br/>
	 * 本関数でボイス制御方法をセット後、 ::CriAtomExPlayer::Start 関数で音声を再生すると、
	 * 当該プレーヤで再生する波形データには、本関数で指定した制御方式が適用されます。<br/>
	 * 関数実行前のデフォルト設定値は後着優先( PreferLast )です。<br/>
	 * \par 備考:
	 * AtomExプレーヤが波形データを再生しようとした際、
	 * 当該波形データが所属するボイスリミットグループの発音数が上限に達していた場合や、
	 * ボイスプール内のボイスが全て使用中であった場合、
	 * ボイスプライオリティによる発音制御が行われます。<br/>
	 * <br/>
	 * 本関数でセットされたボイス制御方式は、発音制御の際、
	 * 再生しようとした波形データのプライオリティと、
	 * 再生中の波形データのプライオリティが同プライオリティであった場合に考慮されます。<br/>
	 * (ボイスプライオリティによる発音制御の詳細は ::CriAtomExPlayer::SetVoicePriority 
	 * 関数の説明をご参照ください。)<br/>
	 * \par 既知の不具合:
	 * 現状、本関数でボイス制御方法を指定した場合でも、
	 * キュー再生時にはオーサリングツール上でセットしたボイス制御方法が優先して適用されます。<br/>
	 * \sa CriAtomExPlayer::Start, CriAtomExPlayer::SetVoicePriority, CriAtomEx.VoiceControlMethod
	 */
	public void SetVoiceControlMethod(CriAtomEx.VoiceControlMethod method)
	{
		criAtomExPlayer_SetVoiceControlMethod(this.handle, method);
	}
	/**
	 * <summary>再生音のポーズ解除</summary>
	 * <param name="mode">ポーズ解除対象</param>
	 * \par 説明:
	 * 再生音単位で一時停止状態の解除を行います。<br/>
	 * 引数(mode)に PausedPlayback を指定して本関数を実行すると、
	 * ユーザが ::CriAtomExPlayer::Pause 関数(または ::CriAtomExPlayback::Pause 
	 * 関数)で一時停止状態になった音声の再生が再開されます。<br/>
	 * 引数(mode)に PreparedPlayback を指定して本関数を実行すると、
	 * ユーザが ::CriAtomExPlayer::Prepare 関数で再生準備を指示した音声の再生が開始されます。<br/>
	 * \par 備考:
	 * ::CriAtomExPlayer::Pause 関数でポーズ状態のプレーヤに対して ::CriAtomExPlayer::Prepare
	 * 関数で再生準備を行った場合、その音声は PausedPlayback 指定のポーズ解除処理と、
	 * PreparedPlayback 指定のポーズ解除処理の両方が行われるまで、再生が開始されません。<br/>
	 * <br/>
	 * ::CriAtomExPlayer::Pause 関数か ::CriAtomExPlayer::Prepare 関数かに関係なく、
	 * 常に再生を開始したい場合には、引数(mode)に AllPlayback を指定して本関数を実行してください。<br/>
	 * \sa CriAtomExPlayback::IsPaused, CriAtomExPlayer::Resume, CriAtomExPlayer::Pause
	 */
	public void Resume(CriAtomEx.ResumeMode mode)
	{
		criAtomExPlayback_Resume(this.id, mode);
	}
    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);
        }
    }
	private static extern void criAtomExPlayback_Resume(uint id, CriAtomEx.ResumeMode mode);
	/**
	 * <summary>パラメータの取得(符号付き整数)</summary>
	 * <param name="id">パラメータID</param>
	 * <returns>パラメータ設定値</returns>
	 * \par 説明:
	 * AtomExプレーヤに設定されている各種パラメータの値を取得します。<br/>
	 * 値は符号付き整数で取得されます。
	 * \sa CriAtomEx.Parameter, CriAtomExPlayer::GetParameterFloat32, CriAtomExPlayer::GetParameterUint32
	 */
	public int GetParameterSint32(CriAtomEx.Parameter id)
	{
		return criAtomExPlayer_GetParameterSint32(this.handle, id);
	}
	/**
	 * <summary>フォーマットの指定</summary>
	 * <param name="format">フォーマット</param>
	 * \par 説明:
	 * AtomExプレーヤで再生する音声のフォーマットを指定します。<br/>
	 * ::CriAtomExPlayer::Start 関数で音声を再生した際、AtomExプレーヤは本関数で
	 * 指定されたフォーマットのデータを再生可能なボイスを、ボイスプールから取得します。<br/>
	 * 関数実行前のデフォルト設定値はADXフォーマットです。<br/>
	 * \par 備考:
	 * 本関数は、ACBファイルを使用せずに音声を再生する場合にのみセットする必要があります。<br/>
	 * キューを再生する場合、フォーマットはキューシートから自動で取得されるため、
	 * 別途本関数を実行する必要はありません。<br/>
	 */
	public void SetFormat(CriAtomEx.Format format)
	{
		criAtomExPlayer_SetFormat(this.handle, format);
	}
	/**
	 * <summary>出力サウンドレンダラタイプの設定</summary>
	 * <param name="type">出力先のサウンドレンダラタイプ</param>
	 * \par 説明:
	 * AtomExプレーヤの再生に使用するサウンドレンダラの種別を設定します。<br/>
	 * 本設定を行ってから再生を開始すると、設定されたサウンドレンダラタイプで作成されたボイス
	 * プールから再生可能なボイスを取得します。<br/>
	 * サウンドレンダラタイプの設定はキューの再生単位で設定可能です。<br/>
	 * \sa CriAtomEx.SoundRendererType
	 */
	public void SetSoundRendererType(CriAtomEx.SoundRendererType type)
	{
		criAtomExPlayer_SetSoundRendererType(this.handle, type);
	}
Exemple #40
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);
        }
    }
	private static extern void criAtomExPlayer_Resume(IntPtr player, CriAtomEx.ResumeMode mode);
Exemple #42
0
        public CriAtomExAcb GetAcb(string cueSheetName)
        {
            if (string.IsNullOrEmpty(cueSheetName))
            {
                Debug.LogWarning("[CRIWARE] Timeline Previewer: cuesheet name is vacant");
                return(null);
            }

            this.atom = (CriAtom)UnityEngine.Object.FindObjectOfType(typeof(CriAtom));
            if (this.atom == null)
            {
                Debug.LogWarning("[CRIWARE] Timeline Previewer: CriAtom not set in the scene");
                return(null);
            }

            if (lastAcfFile != this.atom.acfFile)
            {
                CriAtomEx.UnregisterAcf();
                CriAtomEx.RegisterAcf(null, Path.Combine(CriWare.Common.streamingAssetsPath, atom.acfFile));
                lastAcfFile = this.atom.acfFile;
            }

            if (this.acbTable.ContainsKey(cueSheetName))
            {
                return(acbTable[cueSheetName]);
            }
            else
            {
                CriAtomExAcb acb = null;
                foreach (var cuesheet in atom.cueSheets)
                {
                    if (cuesheet.name == cueSheetName)
                    {
                        string acbPath = (string.IsNullOrEmpty(cuesheet.acbFile)) ? null : Path.Combine(CriWare.Common.streamingAssetsPath, cuesheet.acbFile);
                        string awbPath = (string.IsNullOrEmpty(cuesheet.awbFile)) ? null : Path.Combine(CriWare.Common.streamingAssetsPath, cuesheet.awbFile);
                        acb = CriAtomExAcb.LoadAcbFile(null, acbPath, awbPath);
                        if (acb != null)
                        {
                            try {
                                acbTable.Add(cueSheetName, acb);
                            } catch (Exception e) {
                                if (e is ArgumentException)
                                {
                                    /* impossible */
                                    Debug.LogWarning("[CRIWARE] Timeline Previewer: ACB already existing.");
                                }
                                else
                                {
                                    Debug.LogWarning("[CRIWARE] Timeline Previewer: ACB Dictionary exception: " + e.Message);
                                }
                            }
                        }
                        else
                        {
                            Debug.LogWarning("[CRIWARE] Timeline Previewer: Failed loading ACB/AWB file.");
                        }
                    }
                }
                return(acb);
            }
        }
	private static extern void criAtomExPlayer_SetFormat(IntPtr player, CriAtomEx.Format format);
Exemple #44
0
 /**
  * <summary>DSPバス設定のデタッチ</summary>
  * <remarks>
  * <para header='説明'>DSPバス設定をデタッチします。<br/>
  * <br/></para>
  * <para header='注意'>本関数は完了復帰型の関数です。<br/>
  * 本関数を実行すると、しばらくの間Atomライブラリのサーバ処理がブロックされます。<br/>
  * 音声再生中に本関数を実行すると、音途切れ等の不具合が発生する可能性があるため、
  * 本関数の呼び出しはシーンの切り替わり等、負荷変動を許容できるタイミングで行ってください。<br/></para>
  * </remarks>
  * <seealso cref='CriAtom::DetachDspBusSetting'/>
  */
 public static void DetachDspBusSetting()
 {
     CriAtom.instance.dspBusSetting = "";
     CriAtomEx.DetachDspBusSetting();
 }
	private static extern float criAtomExPlayer_GetParameterFloat32(IntPtr player, CriAtomEx.Parameter id);
	/**
	 * <summary>パラメータの取得(浮動小数点数)</summary>
	 * <param name="id">パラメータID</param>
	 * <returns>パラメータ設定値</returns>
	 * \par 説明:
	 * AtomExプレーヤに設定されている各種パラメータの値を取得します。<br/>
	 * 値は浮動小数点数で取得されます。
	 * \sa CriAtomEx.Parameter, CriAtomExPlayer::GetParameterUint32, CriAtomExPlayer::GetParameterSint32
	 */
	public float GetParameterFloat32(CriAtomEx.Parameter id)
	{
		return criAtomExPlayer_GetParameterFloat32(this.handle, id);
	}
Exemple #47
0
 public static void SetGameVariable(string variableName, float value)
 {
     CriAtomEx.SetGameVariable(variableName, value);
 }