CRI ADX  Last Updated: 2024-03-21 14:32 p
フィルタコールバック

サンプルのディレクトリ

/cri/pc/samples/criatomex/filter_callback

サンプルで使用しているデータ

/cri/common/smpdata/criatomex/
  • SampleProject.acf
  • AtomCueSheet.avb
  • AtomCueSheet.awb

サンプルの解説

フィルタコールバック機能とは、AtomExプレーヤーに対しコールバック関数を指定することにより、デコード後のPCMデータをアプリケーション側で加工することができる機能です。
フィルタコールバック機能を使用することで、音声波形の音圧やピークを計測したり、独自エフェクトをかけることができます。
フィルタコールバック機能の使用手順は以下のとおりです。
  1. criAtomExPlayer_Create 関数で AtomEx プレーヤーを作成する。
  2. criAtomExPlayer_SetFilterCallback 関数を使用し、 AtomEx プレーヤーにフィルタコールバック関数を登録する。
  3. criAtomExPlayer_SetCueId 関数等で、再生する音声データを指定する。
  4. criAtomExPlayer_Start 関数で再生を開始する。
  5. フィルタコールバック関数が実行され、デコード後のPCMデータが引数に渡されます。
以下、フィルタコールバック内でデコード後PCMデータの振幅を1/2に加工するサンプルを示します。
:
player = criAtomExPlayer_Create(NULL, NULL, 0);
/* フィルタコールバック関数をセット */
criAtomExPlayer_SetFilterCallback(player, user_filter_callback_func, NULL);
/* キューをセットして再生開始 */
:
:
/* フィルタコールバック関数 */
static void user_filter_callback_func(void *obj,
CriSint32 num_channels, CriSint32 num_samples, void *data[])
{
CriSint32 i, j;
if (format == CRIATOM_PCM_FORMAT_SINT16) {
for (i = 0; i < num_channels; i++) {
CriSint16 *pcm = (CriSint16*)data[i];
for (j = 0; j < num_samples; j++) {
pcm[j] >>= 1;
}
}
} else if (format == CRIATOM_PCM_FORMAT_FLOAT32) {
for (i = 0; i < num_channels; i++) {
CriFloat32 *pcm = (CriFloat32*)data[i];
for (j = 0; j < num_samples; j++) {
pcm[j] *= 0.5f;
}
}
}
}
void criAtomExPlayer_SetFilterCallback(CriAtomExPlayerHn player, CriAtomExPlayerFilterCbFunc func, void *obj)
波形フィルターコールバック関数の登録
CriAtomExPlaybackId criAtomExPlayer_Start(CriAtomExPlayerHn player)
再生の開始
CriAtomExPlayerObj * CriAtomExPlayerHn
プレーヤーハンドル
Definition: cri_atom_ex.h:3656
CriAtomExPlayerHn criAtomExPlayer_Create(const CriAtomExPlayerConfig *config, void *work, CriSint32 work_size)
AtomExPlayerの作成
void criAtomExPlayer_SetCueId(CriAtomExPlayerHn player, CriAtomExAcbHn acb_hn, CriAtomExCueId id)
音声データのセット(キューID指定)
CriUint32 CriAtomExPlaybackId
再生ID
Definition: cri_atom_ex.h:3756
enum CriAtomPcmFormatTag CriAtomPcmFormat
PCMフォーマット
渡されてくるPCMデータのフォーマットはプラットフォームによって異なるため、両ケース記述しています。
PC環境では常に32ビット浮動小数点数(-1.0~1.0)で渡されます。
注意
フィルタコールバック関数内でPCMデータに対して時間が変化する加工(タイムストレッチ等)を行うことはできません。