Я сейчас нахожусь в процессе создания музыкального приложения и позволю пользователю изменять высоту звука и скорость, с которой воспроизводится звук. Я использую кнопки в качестве инициаторов звука, и каждый раз, когда нажимается кнопка, начинает воспроизводиться соответствующий звук.
Это мой текущий код:
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 секунды. Я не уверен, что я делаю неправильно. Я не думаю, что я делаю что-то не так, я чувствую, что просто неправильно устанавливаю какое-то значение.
Вся помощь приветствуется! Заранее спасибо!