msampaio
msampaio

Reputation: 3433

Problems playing multiple sounds with TheAmazingAudioEngine

I'm implementing a low-latency drum set with TheAmazingAudioEngine framework. I have a scene with a single button and a viewController with the methods below. This code works very well if I touch the button slowly. But if I touch it many times in a short period of time --- 10 times per second, for instance ---, the sound is not played in some touches, without error messages. The audio sample is short (less than 2 seconds).

Why does it happen? What is wrong in my implementation?

I choose TheAmazingAudioEngine instead of AVAudioPlayer to get low-latency between the touch and the sound.

override func viewDidLoad() {
    super.viewDidLoad()

    // Enable multiple touch for the button
    for v in view.subviews {
        if v.isKindOfClass(UIButton) {
            v.multipleTouchEnabled = true
        }
    }

    // Init audio
    audioController = AEAudioController(audioDescription: AEAudioController.nonInterleavedFloatStereoAudioDescription())

    audioURL = NSBundle.mainBundle().URLForResource("shortSound", withExtension: "wav")!

    do {
        try audioController?.start()
    } catch {
        print("AudioController start Error")
    }

}

override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)

    audioController?.stop()
}

@IBAction func playSound(sender: UIButton) {
    do {
        let player = try AEAudioFilePlayer(URL: audioURL)
        player.removeUponFinish = true
        audioController?.addChannels([player])
    } catch {
        print("Player start Error")
    }
}

Upvotes: 1

Views: 94

Answers (0)

Related Questions