AVAudioPlayerNode продолжает повторять звук - PullRequest
0 голосов
/ 18 марта 2019

Я сейчас нахожусь в процессе создания музыкального приложения и позволю пользователю изменять высоту звука и скорость, с которой воспроизводится звук. Я использую кнопки в качестве инициаторов звука, и каждый раз, когда нажимается кнопка, начинает воспроизводиться соответствующий звук.

Это мой текущий код:

 audioPlayer.stop()
    engine.stop()
    pitchControl.pitch = 0.0
    engine = AVAudioEngine()
    audioPlayer.volume = 1.0

    let precursor = audioFiles[audioFileLinks[sender.tag]]
    let path = Bundle.main.path(forResource: precursor, ofType: "mp3")!
    let url = NSURL.fileURL(withPath: path)
    let file = try? AVAudioFile(forReading: url)
    let buffer = AVAudioPCMBuffer(pcmFormat: file!.processingFormat, frameCapacity: AVAudioFrameCount(file!.length))

    do {  
           try file!.read(into: buffer!)
        } catch _ {}
        engine.attach(audioPlayer)
        engine.attach(pitchControl)
        engine.attach(speedControl)
        engine.connect(audioPlayer, to: speedControl, format: buffer?.format)
        engine.connect(speedControl, to: pitchControl, format: buffer?.format)
        engine.connect(pitchControl, to: engine.mainMixerNode, format:  buffer?.format)        
        engine.prepare()
        do {
           try engine.start()
        } catch _ {}

        audioPlayer.play()

Смысл этого кода в том, чтобы узнать, какую звуковую дорожку воспроизводить, основываясь на теге кнопки, нажатой пользователем. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я нажимаю кнопку, он воспроизводит звук, но продолжает воспроизводить его бесконечно, даже если сам файл .mp3 длится всего 2 секунды. Я не уверен, что я делаю неправильно. Я не думаю, что я делаю что-то не так, я чувствую, что просто неправильно устанавливаю какое-то значение.

Вся помощь приветствуется! Заранее спасибо!

...