This is the first time I use SKAudioNode. First I declared a property at the top of my GameScene
class:
var backgroundMusic: SKAudioNode!
Now I added a helper method:
func playBackgroundMusic(name: String) {
if backgroundMusic != nil {
backgroundMusic.removeFromParent()
}
backgroundMusic = SKAudioNode(fileNamed: name)
backgroundMusic.autoplayLooped = true
addChild(backgroundMusic)
}
Now I called this method like this:
playBackgroundMusic("ABC.caf")
It throws an fatal error on this line:
backgroundMusic.autoplayLooped = true
Saying: unexpected found nil while unwrapping optional value.
I did make sure the following
- ABC.caf is in my project and is listed in the copy bundle resources.
- It is spelled correctly.
Now where else should I check for errors?
EDIT:
Here are my configuration info:
- Xcode 7.3
- iPhone with iOS 9.3.2
- Simulator with iOS 9.3
Both the device and the simulator doesn't work.
EDIT2:
I changed my codes to the following:
func playBackgroundMusic(name: String) {
if backgroundMusic != nil {
backgroundMusic.removeFromParent()
}
let temp = SKAudioNode(fileNamed: name)
temp.autoplayLooped = true
backgroundMusic = temp
//backgroundMusic = SKAudioNode(fileNamed: "SpaceGame.caf")
//backgroundMusic.autoplayLooped = true
addChild(backgroundMusic)
}
Now my app doesn't crash anymore but it has no sounds. Any ideas?
P.S. Few minute after I last edited that question I tried replacing everything in that method with:
runAction(SKAction.playSoundFileNamed(name, waitForCompletion: false))
Still no sound. Perhaps a problem with the sound file?
I was having a similar issue with
SKAudioNode(fileNamed:)
and it looked from the autocomplete and from the problems I was having like there are two distinct initializers with the same parameter signature, one returningSKAudioNode
and one returningSKNode
and I was somehow getting the wrong one. I switched to usingSKAudioNode(url:)
instead (getting the URL usingBundle.main.url(forResource:withExtension:)
) and everything worked as expected.