AVAudioPCMBuffer - 读取(进入缓冲区:AVAudioPCMBuffer)内存崩溃? (缓冲区溢出)

时间:2017-08-19 21:57:00

标签: ios swift buffer avfoundation avaudiopcmbuffer

以下代码适用于所有设备(iPhone,Apple Watch,模拟器)上的短时间音频文件:

let file = try! AVAudioFile(forReading: url!) let format = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: file.fileFormat.sampleRate, channels: file.fileFormat.channelCount, interleaved: false) let buf = AVAudioPCMBuffer(pcmFormat: format!, frameCapacity: UInt32(file.length)) try! file.read(into: buf!)

崩溃发生在try! file.read(into: buf!) 然而,尝试读取5分钟,例如长音频文件导致我的Apple Watch上运行崩溃(虽然可以在Apple Watch Simulator上运行)。使用Program ended with exit code: 0

观看调试工具,显然这个过程对Apple Watch比iPhone更加沉重。我试图在不同的线程,背景等上运行它无济于事。

我知道我可以将缓冲区发送到iPhone进行处理,但是如果我能从手表上严格读入缓冲区,我希望看到(即使需要更长的时间)。

1 个答案:

答案 0 :(得分:0)

44.1kHz的5分钟单声道LPCM float32音频将是5 * 60 * 44100 * 4字节,或大约53MB。立体声的双倍。我不知道手表的内存限制是什么,但我认为你超过了它们。