2016-03-02 62 views
1

錯誤測試我的應用程序,並發現一個有趣的東西,每當一個聲音文件播放(任何聲音文件)。我注意到較小的聲音文件會增加大約0.01 mb的內存,並且不會在釋放內存之後釋放內存,播放後較長的內容會增加大約1.8 - 2.0 MB。Swift iOS聲音內存泄漏?

我使用儀器泄漏檢查來測試應用程序,看看究竟發生了什麼,我收集到它確實是音頻文件。

我通常使用SKAction.playSoundFileNamed()播放音頻文件。不知道這與它有什麼關係。

let gameOver = SKAction.playSoundFileNamed("gameOver.wav", waitForCompletion: false) 
sprite.runAction(gameOver) 

不知道這只是我的問題還是它的一個已知問題。或者它甚至是一個問題?只是好奇。

Screenshot

+0

你可以發表一些關於你如何創建和播放聲音的代碼嗎? –

+0

是的,虐待更新與一些代碼的職位。 – Electric

+0

還沒有找到解決方案。如果有人知道,我會非常有興趣瞭解爲什麼。 – Electric

回答

0

我幾個月前就遇到了這個問題,所以我嘗試了AudioToolbox框架作爲替代,它的作品一樣好,沒有內存泄漏。

我有一些我想用於遊戲的聲音效果,所以我創建了一個函數,如波紋管,它在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的替代品。