以下代码适用于我所有设备(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模拟器上运行)。和Program ended with exit code: 0在一起。
观察调试工具,很明显,这个过程对Apple Watch来说比iPhone要繁重得多。我尝试过在不同的线程、后台等上运行它,但都无济于事。
我知道我可以将缓冲区发送到iPhone进行处理,但是我想看看(即使这需要更长一点的时间)是否可以完全从手表读取缓冲区。
发布于 2017-08-20 08:22:30
在44.1 53MB下,5分钟的单声道LPCM float32音频将是5*60*44100*4字节,或大约53MB。立体声是这个数字的两倍。我不知道这款手表的内存限制是多少,但我认为你已经超出了限制。
https://stackoverflow.com/questions/45776633
复制相似问题