目次 - 4.関数 - 4.5音楽 - Mix_HookMusic

Mix_HookMusic

void Mix_HookMusic(void (*mix_func)(void *udata, Uint8 *stream, int len), void *arg)

mix_func
音楽プレイヤーミキサー関数へのポインタ. NULLのとき音楽プレイヤーを使わず, 通常の内部の音楽プレイヤーで使用するミキサーに戻す
arg
mix_funcのudataに渡す引数

ユーザの音楽プレイヤーを設定する. この関数の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);

参照

Mix_SetMusicCMD, Mix_GetMusicHookData

原文へのリンク

4.5.8 Mix_HookMusic