目次 - SDL_mixer - API(機能別) - 音楽 - Mix_HookMusic

Mix_HookMusic

ユーザ自身の音楽プレイヤーまたはさらなるミキサー関数を追加する

構文

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つの関数で扱えるようにする必要がある.

バージョン

SDL_mixer 2.0.0以降

関連項目(関数)

Mix_SetPostMix

SDL Wikiへのリンク

SDL2_mixer/Mix_HookMusic