AudioKit 缓冲区消耗大量内存
AudioKit buffer consuming a lot of ram
打开文件或复制文件会使缓冲区的大小激增。
tape1.write(from: tape2.pcmBuffer)
同样的事情发生在保存文件然后再次打开它(即在编写之后)
AKAudioFile(forReading: url, commonFormat: .pcmFormatFloat32, interleaved: true)
这也需要很多内存,15 分钟的录音是 ~300mb 内存,iPhone 5 秒无法处理。
有没有办法做得更好?如何减少缓冲区大小?
要复制文件,您应该使用 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])
打开文件或复制文件会使缓冲区的大小激增。
tape1.write(from: tape2.pcmBuffer)
同样的事情发生在保存文件然后再次打开它(即在编写之后)
AKAudioFile(forReading: url, commonFormat: .pcmFormatFloat32, interleaved: true)
这也需要很多内存,15 分钟的录音是 ~300mb 内存,iPhone 5 秒无法处理。 有没有办法做得更好?如何减少缓冲区大小?
要复制文件,您应该使用 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])