/** * <summary>Wave ボイスプールの作成</summary> * <param name="numVoices">ボイス数</param> * <param name="maxChannels">最大チャンネル数</param> * <param name="maxSamplingRate">最大サンプリングレート</param> * <param name="streamingFlag">ストリーミング再生フラグ</param> * <param name="identifier">ボイスプール識別子</param> * <returns>Wave ボイスプール</returns> * 本関数を実行することで、Wave 再生が可能なボイスがプールされます。<br> * AtomEx プレーヤで Wave データ(もしくは Wave データを含むキュー)の再生を行うと、 * AtomEx プレーヤは作成された Wave ボイスプールからボイスを取得し、再生を行います。<br> * 再生終了後は、必ず、Dispose 関数でオブジェクトを破棄してください。<br> * 特定の CriAtomExPlayer に対して、作成したボイスプールからボイスを取得するように明示的に設定したい場合は、 * identifier としてデフォルトの 0 以外の値を指定して作成し、 CriAtomExPlayer::SetVoicePoolIdentifier 関数を * 呼び出してください。 * \sa CriAtomExPlayer::SetVoicePoolIdentifier */ public CriAtomExWaveVoicePool(int numVoices, int maxChannels, int maxSamplingRate, bool streamingFlag, uint identifier = 0) { this._identifier = identifier; this._identifier = identifier; this._numVoices = numVoices; this._maxChannels = maxChannels; this._maxSamplingRate = maxSamplingRate; VoicePoolConfig config = new VoicePoolConfig(); config.identifier = identifier; config.numVoices = numVoices; config.playerConfig.maxChannels = maxChannels; config.playerConfig.maxSamplingRate = maxSamplingRate; config.playerConfig.streamingFlag = streamingFlag; config.playerConfig.soundRendererType = (int)CriAtomEx.SoundRendererType.Asr; config.playerConfig.decodeLatency = 0; this._handle = criAtomExVoicePool_AllocateWaveVoicePool(ref config, IntPtr.Zero, 0); if (this._handle == IntPtr.Zero) { throw new Exception("CriAtomExWaveVoicePool() failed."); } CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom); }
/** * <summary>3Dリージョンオブジェクトの作成</summary> * <remarks> * <para header='説明'>3Dリージョンオブジェクトを作成します。<br/></para> * <para header='注意'>本関数を実行する前に、ライブラリを初期化しておく必要があります。<br/></para> * </remarks> */ public CriAtomEx3dRegion() { Config config = new Config(); this.handle = UnsafeNativeMethods.criAtomEx3dRegion_Create(ref config, IntPtr.Zero, 0); CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom); }
/** * <summary>3Dリスナーの作成</summary> * <remarks> * <para header='説明'>3Dリスナーオブジェクトを作成します。<br/></para> * <para header='注意'>本関数を実行する前に、ライブラリを初期化しておく必要があります。<br/></para> * </remarks> */ public CriAtomEx3dListener() { Config config = new Config(); this.handle = criAtomEx3dListener_Create(ref config, IntPtr.Zero, 0); CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom); }
public static void FinalizeLibrary() { /* 初期化カウンタの更新 */ CriFsPlugin.initializationCount--; if (CriFsPlugin.initializationCount < 0) { CriFsPlugin.initializationCount = 0; if (CriFsPlugin.IsLibraryInitialized() == false) { return; } } if (CriFsPlugin.initializationCount != 0) { return; } /* パラメータを初期値に戻す */ installBufferSize = defaultInstallBufferSize; /* 未破棄のDisposableを破棄 */ CriDisposableObjectManager.CallOnModuleFinalization(CriDisposableObjectManager.ModuleType.Fs); /* ライブラリの終了 */ CriFsPlugin.criFsUnity_Finalize(); }
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); } }
/** * <summary>3D音源オブジェクトの作成</summary> * <param name='enableVoicePriorityDecay'>距離によるボイスプライオリティ減衰を有効にする</param> * <param name='randomPositionListMaxLength'>3D音源における位置のランダム化に関する座標リストの要素数の最大値</param> * <remarks> * <para header='説明'>3D音源オブジェクト作成用コンフィグに基づいて、3D音源オブジェクトを作成します。<br/></para> * <para header='注意'>本関数を実行する前に、ライブラリを初期化しておく必要があります。<br/></para> * </remarks> */ public CriAtomEx3dSource(bool enableVoicePriorityDecay = false, uint randomPositionListMaxLength = 0) { Config config = new Config(enableVoicePriorityDecay, randomPositionListMaxLength); this.handle = criAtomEx3dSource_Create(ref config, IntPtr.Zero, 0); CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom); this.currentRandomPositionListMaxLength = randomPositionListMaxLength; }
internal CriAtomExAcb(IntPtr handle, GCHandle?dataHandle) { this.handle = handle; if (dataHandle.HasValue) { this.dataHandle = dataHandle.Value; } CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom); }
private CriAtomExAcbLoader(IntPtr handle, GCHandle?dataHandle) { this.handle = handle; if (dataHandle.HasValue) { this.gch = dataHandle.Value; } CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom); }
/** * <summary>AtomExTweenの破棄</summary> * <remarks> * <para header='注意'>AtomExTweenをアタッチしたAtomExPlayerが音声を再生している状態で本関数を実行すると、<br/> * 破棄済みのAtomExTweenへの参照が発生します。 <br/> * 必ずAtomExPlayerからデタッチした後に本関数を実行してください。</para> * </remarks> */ public override void Dispose() { CriDisposableObjectManager.Unregister(this); /* destroy instance */ criAtomExTween_Destroy(handle); handle = IntPtr.Zero; GC.SuppressFinalize(this); }
/** * <summary>ボイスプールの破棄</summary> * ボイスプールオブジェクトの破棄を行います。<br> * 作成したオブジェクトを本APIで破棄しない場合、リソースリークが発生しますので必ず破棄してください。 */ public override void Dispose() { CriDisposableObjectManager.Unregister(this); if (this._handle != IntPtr.Zero) { CriAtomExVoicePool.criAtomExVoicePool_Free(this._handle); } GC.SuppressFinalize(this); }
/** * <summary>サウンドオブジェクトの破棄</summary> * <remarks> * <para header='説明'>サウンドオブジェクトを破棄します。<br/> * 本関数を実行した時点で、サウンドオブジェクト作成時にDLL内で確保された * リソースが全て解放されます。<br/></para> * </remarks> * <seealso cref='CriAtomExSoundObject::CriAtomExSoundObject'/> */ public override void Dispose() { CriDisposableObjectManager.Unregister(this); if (this.handle != IntPtr.Zero) { criAtomExSoundObject_Destroy(this.handle); this.handle = IntPtr.Zero; } GC.SuppressFinalize(this); }
private CriAtomExMic(IntPtr handle) { #if CRIWAREPLUGIN_SUPPORT_MIC this.handle = handle; int numChannels = this.GetNumChannels(); this.bufferPointers = new IntPtr[numChannels]; CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.AtomMic); #endif }
/** * <summary>AuxInの作成</summary> * <param name='config'>AuxIn作成用コンフィグ構造体</param> * <returns>AtomAuxInハンドル</returns> * <remarks> * <para header='説明'>音声入力用のAuxInを作成します。<br/> * AuxInはADX2の外部の音声データをADX2のDSPバスに流すことができます。<br/> * <br/> * 音声の再生を開始するには::CriAtomExAuxIn::Start 関数を実行します。<br/> * 入力する音声は ::CriAtomExAuxIn::SetInputReadStream に指定するコールバック関数を * 経由してAuxInに渡します。<br/></para> * <para header='注意'>本関数は完了復帰型の関数です。実行にかかる時間は、プラットフォームによって異なります。<br/> * マイクの作成/破棄は、シーンの切り替わり等、負荷変動を許容できる * タイミングで行うようお願いいたします。<br/></para> * </remarks> * <seealso cref='CriAtomExAuxIn::Destroy'/> */ public CriAtomExAuxIn(Config?config = null) { #if CRIWAREPLUGIN_SUPPORT_AUXIN CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom); Config internalConfig = (config.HasValue) ? config.Value : Config.Default; this.handle = criAtomAuxIn_Create(ref internalConfig, IntPtr.Zero, 0); #else Debug.LogError("[CRIWARE] CriAtomExAuxIn does not support this platform."); #endif }
private void dispose() { CriDisposableObjectManager.Unregister(this); if (player != null) { player.Dispose(); player = null; } this.isPlayerReady = false; }
internal CriAtomExAcb(IntPtr handle, byte[] data) { this.handle = handle; if (data != null) { this.data = data; this.dataHandle = GCHandle.Alloc(this.data, GCHandleType.Pinned); } CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom); }
public static bool Unregister(CriDisposable disposable) { int index = CriDisposableObjectManager.SearchForDisposable(disposable); if (index >= 0) { CriDisposableObjectManager.refList.RemoveAt(index); return(true); } return(false); }
/** * <summary>AuxInの破棄</summary> * <remarks> * <para header='説明'>AuxInを破棄します。<br/></para> * <para header='注意'>本関数は完了復帰型の関数です。実行にかかる時間は、プラットフォームによって異なります。<br/> * マイクの作成/破棄は、シーンの切り替わり等、負荷変動を許容できる * タイミングで行うようお願いいたします。<br/></para> * </remarks> * <seealso cref='CriAtomExAuxIn::CriAtomExAuxIn'/> */ public override void Dispose() { #if CRIWAREPLUGIN_SUPPORT_AUXIN if (this.handle != IntPtr.Zero) { criAtomAuxIn_Destroy(this.handle); this.handle = IntPtr.Zero; } GC.SuppressFinalize(this); CriDisposableObjectManager.Unregister(this); #endif }
private void Dispose(bool disposing) { #if CRIWAREPLUGIN_SUPPORT_MIC CriDisposableObjectManager.Unregister(this); if (this.handle != IntPtr.Zero) { criAtomMic_Destroy(this.handle); this.handle = IntPtr.Zero; } #endif }
/** * <summary>CriAtomMic モジュールの終了</summary> * \par 説明: * CriAtomMic モジュールを終了します。<br/> * \sa CriAtomExMic::InitializeModule */ public static void FinalizeModule() { #if CRIWAREPLUGIN_SUPPORT_MIC if (!isInitialized) { Debug.LogError(errorNotInitialized); return; } CriDisposableObjectManager.CallOnModuleFinalization(CriDisposableObjectManager.ModuleType.AtomMic); criAtomMicUnity_Finalize(); isInitialized = false; #endif }
/** * <summary>ASRラックの破棄</summary> * \par 説明: * ASRラックを破棄します。 * */ public override void Dispose() { #if CRIWARE_SUPPORT_ASR CriDisposableObjectManager.Unregister(this); if (this._rackId != -1) { criAtomExAsrRack_Destroy(this._rackId); this._rackId = -1; } #endif GC.SuppressFinalize(this); }
private void Dispose(bool disposing) { CriDisposableObjectManager.Unregister(this); if (this.handle != IntPtr.Zero) { criAtomExAcbLoader_Destroy(this.handle); this.handle = IntPtr.Zero; } if (disposing && this.gch.HasValue && this.gch.Value.IsAllocated) { this.gch.Value.Free(); } }
private void Dispose(bool disposing) { CriDisposableObjectManager.Unregister(this); if (this.handle != IntPtr.Zero) { criAtomEx3dListener_Destroy(this.handle); this.handle = IntPtr.Zero; } if (disposing) { GC.SuppressFinalize(this); } }
private void Dispose(bool disposing) { CriDisposableObjectManager.Unregister(this); if (this.handle != IntPtr.Zero) { UnsafeNativeMethods.criAtomEx3dRegion_Destroy(this.handle); this.handle = IntPtr.Zero; } if (disposing) { GC.SuppressFinalize(this); } }
private void Dispose(bool disposing) { CriDisposableObjectManager.Unregister(this); if (this.handle != IntPtr.Zero) { criAtomExAcbLoader_Destroy(this.handle); this.handle = IntPtr.Zero; } if (disposing) { this.data = null; } }
private void Dispose(bool disposing) { CriDisposableObjectManager.Unregister(this); if (this.isAvailable) { criAtomExAcb_Release(this.handle); this.handle = IntPtr.Zero; } if (disposing && this.dataHandle.IsAllocated) { this.dataHandle.Free(); } }
/** * <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); }
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); }
public static void Register(CriDisposable disposable, ModuleType type) { if (CriDisposableObjectManager.SearchForDisposable(disposable) >= 0) { UnityEngine.Debug.LogWarning("[CRIWARE] Internal: Duplicated object GUID"); return; } #if CRIWARE_DISPOSABLEOBJECTMANAGER_USE_WEAKREF /* Keep weak reference until object finalized */ var weakRef = new WeakReference(disposable, true); CriDisposableObjectManager.refList.Add(new ObjectRef(disposable.guid, weakRef, type)); #else /* Keep reference directly */ CriDisposableObjectManager.refList.Add(new ObjectRef(disposable.guid, disposable, type)); #endif }
/** * <summary>ASRラックの作成</summary> * <param name="config">コンフィグ構造体</param> * <param name="platformConfig">プラットフォーム固有パラメータ構造体</param> * <returns>ASRラック</returns> * \par 説明: * ASRラックを作成します。<br> * 本関数で作成したASRラックは、必ず Dispose 関数で破棄してください。 * */ public CriAtomExAsrRack(Config config, PlatformConfig platformConfig) { #if CRIWARE_SUPPORT_ASR this._rackId = criAtomUnityAsrRack_Create(ref config, ref platformConfig); if (config.context != IntPtr.Zero) { Marshal.FreeHGlobal(config.context); } if (this._rackId == -1) { throw new Exception("CriAtomExAsrRack() failed."); } CriDisposableObjectManager.Register(this, CriDisposableObjectManager.ModuleType.Atom); #else this._rackId = -1; #endif }
protected void Dispose(bool disposing) { CriDisposableObjectManager.Unregister(this); if (this.handle != IntPtr.Zero) { /* アタッチ済みのプレーヤがあればデタッチ */ this.DetachExPlayer(); this.DetachDspBus(); /* ネイティブリソースの破棄 */ criAtomExOutputAnalyzer_Destroy(this.handle); this.handle = IntPtr.Zero; } if (disposing) { GC.SuppressFinalize(this); } }