全てのサウンド再生が終了しているのを見計らって、いざalDeleteBuffers()を実行しても、エラーコードAL_INVALID_OPERATIONで失敗してしまうというのは世界中よくやるミスのようです。
検索すると、ゴロゴロと出てきました。
そんな時は、サウンドデータ(バッファ)が、ソースにバインドされたままである可能性を疑ってみる必要がありそうです。
以下は、ソースのステータスが再生かPAUSE中でなければ、バッファをアンバインドするサンプルコードです。再生中でも停止してからアンバインドするのでも良いかもしれません。
ALint val;
alGetSourcei(sid, AL_SOURCE_STATE, &val);
if ( (val!=AL_PLAYING) && (val!=AL_PAUSED) ) {
alSourcei(sid, AL_BUFFER, NULL);
}
これを行ってから再度、alDeleteBuffers()でバッファを解放してみて下さい。次は、うまくいくかもしれませんよ。
0 件のコメント:
コメントを投稿