iOSアプリ開発:OpenALで音連続再生時にエラー発生

投稿者: | 投稿日時: 2014/10/26 15:27 | 更新日時: 2020/8/8 22:07

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);
}

iOSアプリ開発:OpenALで音連続再生時にエラー発生」への1件のフィードバック

  1. ピンバック: 一覧:開発関連 – KittenKitten

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください