目次 - API(機能別) - 再生と録音 - SDL_LockAudioDevice

SDL_LockAudioDevice

指定のオーディオデバイスのコールバック関数の呼び出しをロックする

構文

void SDL_LockAudioDevice(SDL_AudioDeviceID dev)

引数

devロックするオーディオデバイスのID

詳細

これらのロック操作関数は, SDL_OpenAudioDevice()で設定したコールバック関数を停止する. SDL_LockAudioDevice()SDL_UnlockAudioDevice()の間は, オーディオデバイスを一時停止していなくてもコールバック関数は実行されないことが保障されている. あるオーディオデバイスがロックされている間でも, 別のロックされていないオーディオデバイスは再生が一時停止されていない限り実行される.

コールバック関数の中でこの関数を呼ぶ必要はない. SDLはコールバック関数を呼ぶ前にロックしている. そして関数を抜けるとロックを解除する.

必要以上に長くロックするべきではない. ロックが長すぎると, 再生の抜けが発生する. 理想的には, ロックした後はいくつかの変数に代入するだけにして, すぐにロック解除するべきだ. オーディオデバイスをロックしている間に重い処理をしてはならない.

オーディオデバイスを複数回ロックしても, 同じ回数ロック解除すれば安全である. この場合もコールバック関数は完全にロック解除されるまで実行されない. アプリケーションがオーディオデバイスの正常なロック解除に失敗すれば, コールバック関数は呼ばれなくなる. この場合, 同じ音が繰り返し聞こえるだろう. 恐らくSDL_CloseAudioDevice()もデッドロック状態になる.

内部的には, オーディオデバイスのロックはmutexである. 2つのスレッドで同時にロックすると, コールバック関数が停止するだけでなく, 他のスレッドも停止する.

関連項目(関数)

SDL_UnlockAudioDevice

SDL Wikiへのリンク

SDL_LockAudioDevice - SDL Wiki