目次 - 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