3

打开文件或复制它会使缓冲区的大小爆炸。

tape1.write(from: tape2.pcmBuffer)

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

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

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

4

1 回答 1

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])
于 2017-10-09T14:28:04.250 回答