目次 - 4.関数 - 4.6エフェクト - Mix_RegisterEffect

Mix_RegisterEffect

int Mix_RegisterEffect(int chan, Mix_EffectFunc_t f, Mix_EffectDone_t d, void *arg)

chan
関数fと関数dを登録するチャネル番号. MIX_CHANNEL_POSTとするとミキシングの後の処理
f
エフェクト関数へのポインタ
d
チャネルでのサンプリング音声の再生が終了したとき呼ばれる関数へのポインタ. メモリや動的データを解放する必要がない場合はNULLとしてよい
arg
関数fと関数dの引数udataに渡されるポインタ. 特に同時に複数のチャネルを扱えるように作る場合は, 処理関数が状態データを保存する場所として使うとよい. 必要なければNULLにできる.

channelにエフェクトをつける後処理を行う処理関数fをフックする. 読み込んだデータを単に表示する処理や, ストリームにエコーをつける処理などを行える. 多くの処理関数は状態データの領域を確保する必要がある. その場合はargポインタに保存するとよい. 処理関数を使い終えたとき, 処理関数のargの領域のデータに対して終了処理を行う関数dが呼ばれる. このエフェクトはリンクされたリスト構造になっていて, 常に末尾に追加される. つまり, 前に登録されたエフェクトの出力が次の入力になる. エフェクトは何度でも追加できる. エフェクトはこのように連なっている.

戻り値: チャネルが存在しないなど失敗のとき0(偽)

サンプルコード

// 何もせず素通りする関数を作る
void noEffect(int chan, void *stream, int len, void *udata)
{
    // ここにストリームの処理を書ける...
}
...
// 何もしない後処理を登録する
if(!Mix_RegisterEffect(MIX_CHANNEL_POST, noEffect, NULL, NULL)) {
    printf("Mix_RegisterEffect: %s\n", Mix_GetError());
}

参照

Mix_UnregisterEffect, Mix_UnregisterAllEffects

原文へのリンク

4.6.1 Mix_RegisterEffect