void Mix_HookMusic(void (*mix_func)(void *udata, Uint8 *stream, int len), void *arg)
ユーザの音楽プレイヤーを設定する. この関数のargはmix_funcが呼ばれたとき引数udataに渡される. 引数streamはlenバイトの音楽データが格納されたオーディオストリームバッファである. この音楽プレイヤーは必要なときに自動的に呼ばれる. この関数が呼ばれると音楽の再生がすぐに始まる. 全ての音楽の再生と停止の関数は, この後には無効になる. 一時停止と一時停止の解除は有効である. ユーザの音楽プレイヤーと内部の音楽プレイヤーは同時に使われない. ユーザの音楽プレイヤーが優先される. ユーザの音楽プレイヤーはMix_HookMusic(NULL, NULL)で使われなくなる.
メモ: コールバック関数内でSDL_mixerの関数やSDL_LockAudioを決して呼んではならない.
// 音楽再生関数を作る
// udataはintへのポインタを想定している
void myMusicPlayer(void *udata, Uint8 *stream, int len)
{
int i, pos=*(int*)udata;
// バッファに...うーん...音楽を書き込む
for(i=0; i<len; i++)
stream[i]=(i+pos)&ff;
// 次回のためのudataを設定する
pos+=len;
*(int*)udata=pos;
}
...
// myMusicPlayerで...うーん...音楽を再生する
int music_pos=0;
Mix_HookMusic(myMusicPlayer, &music_pos);