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; } } } }