Reproducir un sonido muy corto (~ 0.5s) produce un hipo (como un retraso) en mi juego SpriteKit iOS programado en Swift. En otras preguntas, leí que debería prepareToPlay()
el sonido, lo cual hice.
Incluso utilicé una variable (soundReady
) para verificar si el sonido está preparado antes de reproducirlo. También vuelvo a preparar el sonido cuando termina de tocar (audioPlayerDidFinishPlaying()
) Aquí están las partes relevantes del código:
class GameScene: SKScene, AVAudioPlayerDelegate {
var splashSound = NSURL()
var audioPlayer = AVAudioPlayer()
var soundReady = false
override func didMoveToView(view: SKView) {
let path = NSBundle.mainBundle().pathForResource("plopSound", ofType: "m4a")
splashSound = NSURL(fileURLWithPath: path)
audioPlayer = AVAudioPlayer(contentsOfURL: splashSound, error: nil)
audioPlayer.delegate = self
soundReady = audioPlayer.prepareToPlay()
}
func playSound(){
if(soundReady){
audioPlayer.play()
soundReady = false
}
}
func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool){
//Prepare to play after Sound finished playing
soundReady = audioPlayer.prepareToPlay()
}
}
No tengo idea de dónde me he equivocado en este caso. Siento que lo he intentado todo (incluso, pero no limitado a: solo prepararme una vez, prepararme justo después de jugar, no usar una variable, sino solo prepararToPlay ()).
Información Adicional:
- El sonido se reproduce sin demora.
- La rapidez con que se reproduce el sonido después del último final no parece afectar el retraso.