打开文件或复制文件会导致缓冲区大小爆炸。
tape1.write(from: tape2.pcmBuffer)
在保存文件然后再次打开文件之后(在编写之后)会发生同样的事情。
AKAudioFile(forReading: url, commonFormat: .pcmFormatFloat32, interleaved: true)
这也需要大量的内存,15分钟的记录是〜300mb ram而iPhone 5s无法处理它。 有没有办法做得更好?如何减少缓冲区大小?
答案 0 :(得分:4)
要复制文件,您应使用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])