void Mix_HookMusic(void (SDLCALL *mix_func)(void *udata, Uint8 *stream, int len), void *arg)
mix_func | 新しいミックス後のコールバックになる関数 |
arg | コールバックにそのまま渡されるポインタ |
この関数はMix_SetPostMix()と似ているが, 大きな違いがある. アプリケーションはこの関数とMix_SetPostMix()を同時に使えることに注意すること. この関数は組み込まれた音楽再生ルーチンを, 自分で作成したデコーダまたはサウンド生成器と置き換えることができる.
指定されたコールバックは, SDL_Mixerがオーディオデバイスへのさらなるデータの供給を準備するたびに呼び出される. SDLオーディオコールバックの内部で実行されるため, コールバックからは早く戻らなければならない. さもないとオーディオ再生の問題になりうる.
コールバックの実行は, SDL_mixerがさらなる音声をミックスしようとしたとき最初に行われる. 入力時にバッファには無音が書き込まれている. よってコールバックは既にあるデータとのミックスやバッファの初期化を行う必要はない.
この関数でコールバックを設定している間はSDL_mixerはあらゆる音楽のミックスを行わず, 代わりに設定したコールバックが使われることに注意すること. コールバックを無効にする(これにより組み込みの音楽再生が再び有効化される)ためには, この関数でNULLをコールバックにすること.
コールバックが書き込むデータはオープンされたオーディオデバイスの形式で, コールバックから戻ったときSDL_mixerは再生中の全チャンク(音楽を除く)とバッファ内でミックスする. コールバックはバッファサイズを変えられない(よって, 必要な量と正確に一致するデータを用意するか, 無音のままにする必要がある).
argポインタにはコールバックに渡されたものがそのまま渡され, コールバックはこれを(トラックの進行状況や設定など)自由に使える.
ミックスされる音楽「チャネル」は1つしかないため, コールバックは1つしか使えない. 複数の入力をミックスする場合は, 1つの関数で扱えるようにする必要がある.