2017-10-09 59 views
3

打开文件或复制文件会导致缓冲区大小爆炸。再次保存文件,然后打开它(合成即后)耗费大量ram的AudioKit缓冲区

tape1.write(from: tape2.pcmBuffer) 

同样的事情发生

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

这需要大量的内存为好,15分钟录音〜300MB RAM和iPhone 5S能不处理它。 有没有办法做得更好?如何减少缓冲区大小?

回答

4

要复制文件,您应该使用FileManager.copyItemFileManager.default.copyItem(at: src, to: dst)。如果这是您的意图,您也可以从相同的URL创建两个文件播放器,而不会出现问题。

AKAudioFile在实例化时不读入缓冲区,因此内存使用位于其他位置。 AKAudioFile.floatChannelData和AKAudioFile.pcmBuffer会将整个文件读入缓冲区,就像从该文件创建一个AKAudioPlayer一样。

如果你正在播放长文件,你应该尝试AKClipPlayer。它从磁盘流式传输文件,因此内存使用保持低。

let clip = AKFileClip(url: url) 
let clipPlayer = AKClipPlayer(clips: [clip]) 
+0

谢谢你,我会检查AKClip播放器,我已经跟踪确实播放器初始化和重新加载导致问题 –