AudioKit缓冲区消耗了大量内存

时间:2017-10-09 06:58:09

标签: ios swift audiokit

打开文件或复制文件会导致缓冲区大小爆炸。

tape1.write(from: tape2.pcmBuffer)

在保存文件然后再次打开文件之后(在编写之后)会发生同样的事情。

AKAudioFile(forReading: url, commonFormat: .pcmFormatFloat32, interleaved: true)

这也需要大量的内存,15分钟的记录是〜300mb ram而iPhone 5s无法处理它。 有没有办法做得更好?如何减少缓冲区大小?

1 个答案:

答案 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])