打开文件或复制它会使缓冲区的大小爆炸。
tape1.write(from: tape2.pcmBuffer)
保存文件然后再次打开它后会发生同样的事情(在编写 ie 之后)
AKAudioFile(forReading: url, commonFormat: .pcmFormatFloat32, interleaved: true)
这也需要大量内存,15 分钟的录制大约是 300mb 内存,iPhone 5s 无法处理。有没有办法做得更好?如何减小缓冲区大小?
要复制文件,您应该使用FileManager.copyItem FileManager.default.copyItem(at: src, to: dst)
。如果这是您的意图,您也可以毫无问题地从同一个 URL 创建两个文件播放器。
AKAudioFile 在实例化时不会读入缓冲区,因此内存使用在其他地方。AKAudioFile.floatChannelData 和 AKAudioFile.pcmBuffer 会将整个文件读入缓冲区,从文件中创建 AKAudioPlayer 也是如此。
如果您正在播放长文件,您应该尝试AKClipPlayer。它从磁盘流式传输文件,因此内存使用率很低。
let clip = AKFileClip(url: url)
let clipPlayer = AKClipPlayer(clips: [clip])