错误24(打开文件太多) - iPhone

时间:2012-10-28 11:22:06

标签: iphone ios avfoundation avaudioplayer

我最近在我的游戏中实现了声音。每次用户触摸屏幕时,都会拍摄箭头并播放声音。我使用以下代码播放声音:

- (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上播放这样的“重叠”声音,还是有办法绕过这个错误?

由于

1 个答案:

答案 0 :(得分:2)

如果始终是相同的音频,请使用内存缓冲区中的播放而不是打开文件。声明一些本地缓冲区:

NSData* data;

然后在你的方法中:

if(!data) {
   data = [NSData dataWithContentsOfURL:url options:NSDataReadingMappedIfSafe error:&err];
}
arrowShootPlayer = [[AVAudioPlayer alloc] initWithData:data error:nil];
if (arrowShootPlayer) {
    [arrowShootPlayer play];
}