以下代码适用于我所有设备(iPhone、Apple Watch、模拟器)上持续时间较短的音频文件:
let file = try! AVAudioFile(用于阅读:url!)
let format = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: file.fileFormat.sampleRate, channels: file.fileFormat.channelCount, interleaved: false)
让 buf = AVAudioPCMBuffer(pcmFormat: 格式!, frameCapacity: UInt32(file.length))
尝试! file.read(进入:buf!)
崩溃发生在try! file.read(into: buf!)
然而,尝试读取一个 5 分钟的长音频文件会导致我的 Apple Watch 运行崩溃(尽管可以在 Apple Watch Simulator 上运行)。 程序以退出代码结束:0
。
观察调试工具,显然这个过程在 Apple Watch 上比在 iPhone 上要费力得多。我试图在不同的线程、背景等上运行它,但无济于事。
我知道我可以将缓冲区发送到 iPhone 进行处理,但是我想看看(即使需要更长的时间)我是否可以严格地从 watch 读取缓冲区。
最佳答案
44.1kHz 的 5 分钟单声道 LPCM float32 音频将是 5*60*44100*4 字节,或大约 53MB。双倍立体声。我不知道 watch 的内存限制是多少,但我认为你超出了它们。
关于ios - AVAudioPCMBuffer - 读取(进入缓冲区 : AVAudioPCMBuffer) memory crash?(缓冲区溢出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45776633/