フィルタコールバック

サンプルのディレクトリ

/cri/pc/samples/criatomex/filter_callback

サンプルの解説

フィルタコールバック機能とは、AtomExプレーヤーに対しコールバック関数を指定することにより、デコード後のPCMデータをアプリケーション側で加工することができる機能です。
フィルタコールバック機能を使用することで、音声波形の音圧やピークを計測したり、独自エフェクトをかけることができます。
フィルタコールバック機能の使用手順は以下のとおりです。
  1. criAtomExPlayer_Create 関数で AtomEx プレーヤーを作成する。
  2. criAtomExPlayer_SetFilterCallback 関数を使用し、 AtomEx プレーヤーにフィルタコールバック関数を登録する。
  3. criAtomExPlayer_SetCueId 関数等で、再生する音声データを指定する。
  4. criAtomExPlayer_Start 関数で再生を開始する。
  5. フィルタコールバック関数が実行され、デコード後のPCMデータが引数に渡されます。
以下、フィルタコールバック内でデコード後PCMデータの振幅を1/2に加工するサンプルを示します。
    CriAtomExPlayerHn player;
        :
    player = criAtomExPlayer_Create(NULL, NULL, 0);
    /* フィルタコールバック関数をセット */
    criAtomExPlayer_SetFilterCallback(player, user_filter_callback_func, NULL);
    /* キューをセットして再生開始 */
    criAtomExPlayer_SetCueId(player, 0);
    criAtomExPlayer_Start(player);
        :
        :

/* フィルタコールバック関数 */
static void user_filter_callback_func(void *obj,
    CriAtomExPlaybackId id, CriAtomPcmFormat format,
    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;
            }
        }
    }
}
渡されてくるPCMデータのフォーマットはプラットフォームによって異なるため、両ケース記述しています。
PC環境では常に32ビット浮動小数点数(-1.0〜1.0)で渡されます。
注意:
フィルタコールバック関数内でPCMデータに対して時間が変化する加工(タイムストレッチ等)を行うことはできません。

CRI Middleware logo Copyright (c) 2006-2018 CRI Middleware Co., Ltd.