0

最近、ゲームにサウンドを実装しました。ユーザーが画面をタッチするたびに矢が放たれ、サウンドが再生されます。次のコードを使用してサウンドを再生しています。

- (void)arrowShoot {
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/arrow.mp3", [[NSBundle mainBundle] resourcePath]]];
    arrowShootPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    if (arrowShootPlayer != nil) {
        [arrowShootPlayer play];
    }
}

arrowShootPlayer毎回にメモリを割り当てたのは、ユーザーが画面をすばやくタップできるようにするためであり、サウンドをオーバーラップさせたいからです。それ以外の場合、サウンドは前のサウンドの再生が終了した後にのみ再生されます。

とにかく、私はこのエラーが発生しています:

<com.apple.main-thread> shm_open failed: "AppleAudioQueue.36.5755" (23) flags=0x2 errno=24

このエラーが発生すると、サウンドの再生が停止します。他のすべては問題ありません。矢印の音だけが再生を停止します。

iPhone でこのような「オーバーラップ」サウンドを再生するより良い方法はありますか、またはこのエラーを回避する方法はありますか??

ありがとう

4

1 に答える 1

2

常に同じオーディオである場合は、ファイルを開く代わりに、メモリ バッファーからの再生を使用します。いくつかのローカル バッファーを宣言します。

NSData* data;

次に、あなたの方法で:

if(!data) {
   data = [NSData dataWithContentsOfURL:url options:NSDataReadingMappedIfSafe error:&err];
}
arrowShootPlayer = [[AVAudioPlayer alloc] initWithData:data error:nil];
if (arrowShootPlayer) {
    [arrowShootPlayer play];
}
于 2012-10-28T11:40:51.403 に答える