С 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.
    }
}

Спасибо!

1 ответ

Решение

После часов и часов поиска это сделало это:

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)
        }
Другие вопросы по тегам