我有一个应用程序,每次触摸屏幕时都会播放声音文件。出于某种原因,应用程序会偶尔崩溃,并出现以下错误:
reason: 'Resource tick.mp3 can not be loaded'
如果您需要它,以下是每次点击屏幕时我播放文件的方式:
runAction(SKAction.playSoundFileNamed("tick.mp3", waitForCompletion: false))
这种情况不会经常发生,可能是应用程序的10次运行中的1次。大多数时候一切都按预期工作。我希望我知道我在做什么导致崩溃,但我不知道!我只是在它没有崩溃的时候看起来没有什么不同。然后突然间我得到了这个问题......
答案 0 :(得分:4)
首先,看起来你正在使用mp3文件播放(短)音效。使用mp3时,音频会被压缩。在内存中,它将具有不同的,更大的尺寸。还存在解码性能损失(解码花费CPU时间)。最重要的是,我在谈论mp3文件的原因可以在docs:
中找到使用硬件辅助解码时,设备只能播放 一次支持的格式之一的单个实例。对于 例如,如果您正在使用硬件播放立体声MP3声音 编解码器,第二个同步MP3声音将使用软件解码。 同样,您无法同时播放AAC和ALAC声音 使用硬件。如果iPod应用程序正在播放AAC或MP3声音 在后台,它声称硬件编解码器;你的申请 然后使用软件解码播放AAC,ALAC和MP3音频。
正如您所看到的,问题是一次只能使用硬件播放一个mp3文件。如果你一次播放多个mp3,它们将被软件解码,这很慢。
所以,我建议你使用.wav或.caf文件来播放声音效果。 mp3可能对背景音乐很有用。
关于崩溃问题:
答案 1 :(得分:3)
如果您通过playSound
功能播放声音,它将起作用
var soundFile = SKAction.playSoundFileNamed("bark.wav", waitForCompletion: false)
playSound(soundFile)
playSound:
func playSound(soundVariable : SKAction)
{
runAction(soundVariable)
}