Swift Sound en repetición

Tengo esta function, que realizo en la primera escena:

func ThemeSound() { if let path = NSBundle.mainBundle().pathForResource("InfinityThemeMain", ofType: "wav") { let enemy1sound = NSURL(fileURLWithPath:path) println(enemy1sound) var error:NSError? ThemePlayer = AVAudioPlayer(contentsOfURL: enemy1sound, error: &error) ThemePlayer.prepareToPlay() ThemePlayer.play() } } 

pero el problema es que reproduce el tema solo una vez. Necesito que se reproduzca repetido. Y pensé que sabía cómo hacer que esto sucediera.

 runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(ThemePlayer), SKAction.waitForDuration(2.55)])) 

Pero no puedo pegar en ViewController, porque runAction necesita un hijo para adjuntarlo. ¿Alguna otra forma podría hacerlo?

Simplemente establezca la propiedad numberOfLoops en un número negativo.

 ThemePlayer.numberOfLoops = -1 

De la documentation :

numberOfLoops Número de veces que un sonido regresará al principio, al llegar al final, para repetir la reproducción.

var numberOfLoops: Int

Un valor de 0, que es el pnetworkingeterminado, significa reproducir el sonido una vez. Establezca un valor integer positivo para especificar el número de veces para volver al inicio y volver a jugar. Por ejemplo, al especificar un valor de 1 se obtienen un total de dos reproducciones del sonido. Establezca cualquier valor integer negativo para enlazar el sonido indefinidamente hasta que llame al método stop .

Es posible que también deba convertir su AVAudioPlayer en una propiedad, en lugar de una variable local . Tal y como está, con el recuento automático de references, creo que su instancia local de ThemePlayer probablemente sea desasignada por ARC. Alguien que conozca AVAudioPlayer mejor que yo podría comentar sobre eso.

(Como un aparte, es posible que desee seguir la convención de Apple de nombrar instancias de object comenzando con letras minúsculas, p. ThemePlayer ., themePlayer lugar de ThemePlayer . Le facilitará el código a otras personas para leer).

Lo hago repetir usando Timer() aquí está mi código:

 import UIKit import AVFoundation class ViewController: UIViewController { var player = AVAudioPlayer() var timer = Timer() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func play(_ sender: UIButton) { // var player = AVAudioPlayer() let soundURL = Bundle.main.url(forResource: "beeb", withExtension: "wav") do { player = try AVAudioPlayer(contentsOf: soundURL!) } catch { print("No sound found by URL") } alertation(title: "click stop to stop", msg: "") } func alertation(title:String,msg:String) { player.play() self.timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: true, block: { (timer) in self.player.play() }) var alert = UIAlertController(title: title, message: msg, prefernetworkingStyle: .alert) var stop = alert.addAction(UIAlertAction(title: "STOP", style: .default, handler: { (action) in self.player.stop() self.timer.invalidate() })) self.present(alert, animated: true, completion: nil) } }