int MIX_Generate(MIX_Mixer *mixer, void *buffer, int buflen);
| MIX_Mixer * | mixer | 問い合わせるミキサー |
| void * | buffer | オーディオデータの書込先バッファへのポインタ |
| int | buflen | 書込先バッファのバイト長 |
MIX_CreateMixerDevice()ではなくMIX_CreateMixer()を呼ぶことでSDL_mixerはオーディオデバイスと接続しないMIX_Mixerオブジェクトを生成できる. このようなミキサーは, この関数で明確に要求しない限り出力を生成しない.
呼び出し側はオーディオの形式を自由に要求できるが, buflenがミキサー生成時に指定したサンプルフレームサイズの倍数である必要がある. (例えば, Sint16ステレオオーディオを要求する場合, buflenはチャネル当たり2バイト×2チャネルのため4の倍数の必要がある.)
ミキサーは時間ではなくサンプルフレーム単位で処理を行い可能な限り速くミックスを行うため, 膨大なオーディオデータを短い時間で生成できる可能性がある.
成功すると, この関数はbufferにbuflenバイトのオーディオデータを常に書き込む. 全ての再生トラックのミックスが完了した場合, 残りのバッファには無音が書き込まれれる.
この関数の呼び出しのたびに残りの部分から始まるため, トラックのミックスは前回の呼び出しで完了した部分から再開される. ミキサーの状態はトラックの追加, 再生, 停止, 変更, 削除などの様々な目的の関数の呼び出しのたびに変更される. 実質的に, この関数はオーディオデバイスが再生のために追加のオーディオデータを要求するときSDL_mixerが内部で行う処理と同様のことを行う.
この関数はMIX_CreateMixerDevice()で生成したミキサーに対しては使えない. 音声は必要に応じて内部に生成される.
この関数は実際にミックスされたバイト数を戻す. これはbuflenより少ない場合もある.
バッファのbuflenバイト全てが初期化されるが, ミックスされるトラックが足りない場合は, バッファの後ろは無音で初期化される.
この無音部分は戻り値には含まれないため, 呼び出し側はバッファに実際のデータと無音がどれだけ書き込まれたかを判断することができる.
そのため, 成功のとき0以上値を戻す.
失敗のとき(メモリ不足, 無効なパラメータなど)は-1を戻す.
この関数はどのスレッドからも安全に呼べる.