※Qiitaで書いていた記事をお引っ越ししてきました。
3934views、9LGTMありがとうございました。
今後はこちらで更新していきます。
現象
画面をタッチしたら音を再生させるようにし、
画面を連続タッチしたら下記処理でエラーが出ました。
alSourcei(source, AL_BUFFER, buffer);
if ((error = alGetError()) != AL_NO_ERROR) {
NSLog(@"Err alSourcei AL_BUFFER %x", error);
}
エラーログの内容は下記の通りです。
Err alSourcei AL_BUFFER a004
調査
al.hで調べた所、下記が一致します。
#define AL_INVALID_OPERATION 0xA004
OpenAL公式リファレンス
によると、35Pに解説がありました。
ソースの状態がAL_PLAYINGかAL_PAUSEDの時、
AL_BUFFERをするとAL_INVALID_OPERATIONが発生するそうです。
音が鳴り終わる前に、次の音を鳴らそうと準備する所でエラーが出ているようです。
対応
ソースの状態を取得し、AL_BUFFER出来ない状態なら停止させておくようにしたら、エラー出なくなりました。
// 追加 start -----
// ソースの状態取得
alGetSourcei(mSource, AL_SOURCE_STATE, &state);
NSLog( @"alGetSourcei state:%x",state );
if ((error = alGetError()) != AL_NO_ERROR) {
NSLog(@"Err alGetSourcei AL_SOURCE_STATE %x", error);
}
// 再生中、一時停止中にソースを設定するとエラーとなるため、まず停止させる
if (state == AL_PLAYING || state == AL_PAUSED) {
alSourceStop(mSource);
}
// 追加 end -----
alSourcei(source, AL_BUFFER, buffer);
if ((error = alGetError()) != AL_NO_ERROR) {
NSLog(@"Err alSourcei AL_BUFFER %x", error);
}
ピンバック: 一覧:開発関連 – KittenKitten