サンプルのディレクトリ
- /cri/pc/samples/criatomex/user_effect_plugin
サンプルで使用しているデータ
- /cri/common/smpdata/criatomex/
- ForUserEffectPlugin.acf
- ForUserEffectPlugin.acb
サンプルの解説
- ユーザー定義のエフェクトをADXに取り込み、エフェクトをかけて再生するサンプルです。
本サンプルでは、予めビルド済みのユーザー定義エフェクトのライブラリを使用しますが、
ユーザー定義のエフェクトは新しく CRI ADX Audio Effect Plugin SDK で作成することができます。
- 本サンプルで使用するユーザー定義エフェクトライブラリは、以下のディレクトリに配置してあります。
- x86アーキテクチャ向けライブラリ
- /cri/pc/libs/x86/Expansion/effect_plugin/cri_simple_delay_pcx86.lib
- /cri/pc/libs/x86/Expansion/effect_plugin/cri_simple_delay_pcx86D.lib
- x64アーキテクチャ向けライブラリ
- /cri/pc/libs/x64/Expansion/effect_plugin/cri_simple_delay_pcx64.lib
- /cri/pc/libs/x64/Expansion/effect_plugin/cri_simple_delay_pcx64D.lib
- ユーザー定義エフェクトをADXに組み込む手順は以下の通りです。
組み込み手順の詳細については、CRI ADX Audio Effect Plugin SDK 同梱のマニュアルをご参照下さい。
- CRI ADX Audio Effect Plugin SDK でランタイムライブラリとツール向けプラグインを作成する
- ツール向けプラグインをAtomCraftに取り込み、ユーザー定義エフェクトを含んだACFをビルドする
- ランタイムライブラリとアプリケーションをリンクした状態で、ユーザー定義エフェクトインターフェースをライブラリに登録する
- criAtomExAsr_RegisterEffectInterface 関数を実行すると、ユーザー定義エフェクトインターフェースをAtomライブラリに登録します。
#include "simple_delay.h"
main
{
:
:
criAtomEx_criAtomEx_RegisterAcfFile(NULL, acf_file, NULL, 0);
:
}
CriBool criAtomExAsr_RegisterEffectInterface(CriAtomExAsrAfxInterfaceWithVersionPtr afx_interface)
ユーザ定義エフェクトインターフェースの登録
CriBool criAtomEx_Initialize(const CriAtomExConfig *config, void *work, CriSint32 work_size)
ライブラリの初期化
- 注意
- criAtomExAsr_RegisterEffectInterface, criAtomExAsr_UnregisterEffectInterface 関数を呼び出すタイミングには注意が必要です。
以下に注意点を列挙します。
- criAtomExAsr_RegisterEffectInterface 関数は必ずDSPバス設定をアタッチする( criAtomEx_AttachDspBusSetting 関数を実行する )前に呼び出す
ユーザー定義エフェクトを含んだDSPバス設定をアタッチする為には、DSPバス設定に含まれるエフェクトのインターフェースを全て登録して下さい。
必要なエフェクトインターフェースが不足している場合は、エラーコールバックが返り、DSPバス設定のアタッチに失敗します。
- criAtomExAsr_UnregisterEffectInterface 関数はDSPバス設定がデタッチされた状態で呼び出す
一度登録を行ったエフェクトインターフェースは、ライブラリを終了するか、::criAtomExAsr_UnregisterEffectInterface 関数を呼び出すまでAtomライブラリから 参照され続けます。
音声の再生中等、信号処理を行っている途中でインターフェースの登録を解除するとアクセス違反例外が発生する可能性があります。
その為、エフェクトインターフェースの登録解除はDSPバス設定がデタッチされている状態の時に実行して下さい。
- ライブラリ終了( criAtomEx_Finalize 関数の実行)時に、全てのエフェクトインターフェースの登録は解除される
ライブラリの再初期化を行った際には、必要なエフェクトインターフェースを再登録する必要があります。