当AVAudioPlayerNode停止和重新启动时跳过声音的问题通常是由于调用了scheduleBuffer方法多次导致的。为了解决这个问题,我们可以使用以下方法:
var isPlaying = false
if isPlaying {
return
}
playerNode.stop()
let audioFile = try! AVAudioFile(forReading: url)
let audioBuffer = AVAudioPCMBuffer(pcmFormat: audioFile.processingFormat, frameCapacity: AVAudioFrameCount(audioFile.length))
try! audioFile.read(into: audioBuffer)
playerNode.scheduleBuffer(audioBuffer, completionHandler: nil)
isPlaying = true
isPlaying = false
playerNode.stop()
这样,当AVAudioPlayerNode重新启动时,之前的声音将会被清除,并且不会跳过声音。