让AVAudioEngine重复一个声音

我一直在麻烦,使下面的代码重复一遍又一遍在audioURL的声音。 现在它只是在视图打开时播放一次,然后停止。

import UIKit import AVFoundation class aboutViewController: UIViewController { var audioUrl = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("chimes", ofType: "wav")!) var audioEngine = AVAudioEngine() var myPlayer = AVAudioPlayerNode() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. audioEngine.attachNode(myPlayer) var audioFile = AVAudioFile(forReading: audioUrl, error: nil) var audioError: NSError? audioEngine.connect(myPlayer, to: audioEngine.mainMixerNode, format: audioFile.processingFormat) myPlayer.scheduleFile(audioFile, atTime: nil, completionHandler: nil) audioEngine.startAndReturnError(&audioError) myPlayer.play() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

谢谢!

经过几小时和一小时的search,这样做了:

 class aboutViewController: UIViewController { var audioEngine: AVAudioEngine = AVAudioEngine() var audioFilePlayer: AVAudioPlayerNode = AVAudioPlayerNode() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let filePath: String = NSBundle.mainBundle().pathForResource("chimes", ofType: "wav")! println("\(filePath)") let fileURL: NSURL = NSURL(fileURLWithPath: filePath)! let audioFile = AVAudioFile(forReading: fileURL, error: nil) let audioFormat = audioFile.processingFormat let audioFrameCount = UInt32(audioFile.length) let audioFileBuffer = AVAudioPCMBuffer(PCMFormat: audioFormat, frameCapacity: audioFrameCount) audioFile.readIntoBuffer(audioFileBuffer, error: nil) var mainMixer = audioEngine.mainMixerNode audioEngine.attachNode(audioFilePlayer) audioEngine.connect(audioFilePlayer, to:mainMixer, format: audioFileBuffer.format) audioEngine.startAndReturnError(nil) audioFilePlayer.play() audioFilePlayer.scheduleBuffer(audioFileBuffer, atTime: nil, options:.Loops, completionHandler: nil) }