void SDL_PauseAudioDevice(SDL_AudioDeviceID dev, int pause_on)
dev | SDL_OpenAudioDevice()で開いたオーディオデバイスのID |
pause_on | 0以外のとき一時停止, 0のとき一時停止解除 |
extern SDL_AudioDeviceID devid;
SDL_PauseAudioDevice(devid, 1); // この関数から戻ったときオーディオコールバックは一時停止する
SDL_Delay(5000); // オーディオデバイスは5秒間無音
SDL_PauseAudioDevice(devid, 0); // オーディオコールバックが再び実行される
この関数は指定のデバイスのコールバック処理を一時停止と一時停止の解除を行う. 新しく開いたオーディオデバイスは一時停止から始まる. よって, 指定の開いたオーディオデバイスの再生を始めるためには, この関数をpause_on=0で呼ぶ必要がある. これにより, オーディオデバイスを開いた後でも, コールバック関数のデータを安全に初期化できる. 一時停止中はオーディオデバイスに無音が書き込まれる. そしてコールバック関数は呼ばれないことが保障されている. あるデバイスを停止しても, 他の一時停止していないデバイスのコールバックは停止しない.
一時停止状態はスタックではない. デバイスを複数回一時停止しても, 一度一時停止解除すると再生が始まる. これはSDL_LockAudioDevice()の動作とは異なる.
単にコールバック関数との競合からいくつかの変数を守るだけならば, オーディオデバイスの一時停止を使うべきではない. 再生の漏れを引き起こす可能性があるためである. 代わりにSDL_LockAudioDevice()を使うべきだ.