错误测试我的应用程序,并在播放声音文件(任何声音文件)时注意到一些有趣的东西。我注意到较小的声音文件会增加大约0.01 MB的内存而不会释放内存,完成播放后较长的内存会增加大约1.8 - 2.0 mb。
我使用了仪器泄漏检查测试应用程序,看看到底发生了什么,我收集到它确实是音频文件。
我通常使用SKAction.playSoundFileNamed()播放我的音频文件。不确定这与它有什么关系。
let gameOver = SKAction.playSoundFileNamed("gameOver.wav", waitForCompletion: false)
sprite.runAction(gameOver)
不确定这只是我的问题还是已知的问题。或者它甚至是一个问题?只是很好奇。
答案 0 :(得分:0)
几个月前我遇到了这个问题,所以我尝试了AudioToolbox
框架作为替代方案,它也可以正常工作,没有内存泄漏。
我有一些想要用于游戏的声音效果,所以我创建了一个像bellow这样的函数来设置sfx数组中的所有systemSoundID
。
var sfx = [SystemSoundID]()
func createSfx() {
var i = 0
while i < 8 {
var fileName = ""
switch i {
case 0:
fileName = "coinCollected"
case 1:
fileName = "laserGun"
case 2:
fileName = "laserBeamShutOff"
case 3:
fileName = "powerDown"
case 4:
fileName = "shipMovement"
case 5:
fileName = "openBlockade"
case 6:
fileName = "invisibilityOn"
case 7:
fileName = "outOfFuel"
default:
print("Error creating sfx")
}
sfx.append(SystemSoundID())
let filePath = NSBundle.mainBundle().pathForResource(fileName, ofType: "wav")
let soundURL = NSURL(fileURLWithPath: filePath!)
AudioServicesCreateSystemSoundID(soundURL, &sfx[i])
i += 1
}
}
然后您可以使用AudioServicesPlaySystemSound
播放声音效果的数组索引,如:
AudioServicesPlaySystemSound(sfx[1]) // Plays laserGun sound effect
也正如你所知,我在使用它时发现了一个问题。如果您使用AVAudioPlayer
播放背景音乐,则音效的音量不会超过设备的中途点。我不确定为什么会发生这种情况,但是我浪费了很多时间试图寻找声音效果的替代方案,这是最好的选择,尽管存在轻微的音量问题。
希望这有助于一些正在寻找SKAction替代品的人。