Audio Repeat AVAudioEngine

I'm having trouble creating code that repeats the sound in audio url again and again. Now he just plays it once, when the view opens, and then stops.

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

Thanks!

+5
source share
1 answer

After hours and hours of searching, this did the following:

 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) } 
+8
source

Source: https://habr.com/ru/post/1206588/


All Articles