我最近在游戏中加入了声音。每次用户触摸屏幕时,都会拍摄箭头,并播放声音。我正在使用以下代码播放声音:
- (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上播放“重叠”的声音,还是有解决此错误的方法?
谢谢
最佳答案
如果始终是相同的音频,请使用内存缓冲区中的播放而不是打开文件。声明一些本地缓冲区:
NSData* data;
然后在您的方法中:
if(!data) {
data = [NSData dataWithContentsOfURL:url options:NSDataReadingMappedIfSafe error:&err];
}
arrowShootPlayer = [[AVAudioPlayer alloc] initWithData:data error:nil];
if (arrowShootPlayer) {
[arrowShootPlayer play];
}