我有一个使用AUAudioFilePlayer构建的音频播放器应用,该应用需要未压缩的音频。我们之所以使用它,是因为它可以提供更准确的播放时间。
那么无论如何,我可以通过编程快速更改音频文件的播放速度并将其另存为新文件吗?我曾经使用AudioKit做到这一点,但是在iOS 13之后,该功能停止工作并打印大量AUBuffer.h:61:GetBufferList: EXCEPTION (-1) [mPtrState == kPtrsInvalid is false]: ""
我的代码是这样的,
let url = URL(fileURLWithPath: fileName!.relativePath)
let aFile = try AKAudioFile(forReading: urli)
let player = AKPlayer(audioFile: aFile)
let dur = aFile.duration
let timePitch = AKTimePitch(player)
timePitch.overlap = 8.0
timePitch.rate = ps
AudioKit.output = timePitch
guard let lesson = lesson else { return }
let songName = lesson.title
let slowAudioFileName = ps.isEqual(to: 0.5) ? "\(songName)Fifty" : "\(songName)SeventyFive"
let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("\(slowAudioFileName).wav")
let format = AVAudioFormat(commonFormat: .pcmFormatInt16, sampleRate: aFile.sampleRate, channels: 2, interleaved: false)
let tape = try! AKAudioFile(forWriting: url, settings: format!.settings)
try AudioKit.renderToFile(tape, duration: player.duration/ps) { _ in
UserDefaults.standard.set(tape.duration, forKey: "CurrentDuration")
player.play()
}```
Any other way to render the file or any fix for this function?