以下代码适用于我所有设备(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 进行处理,但是我想看看(即使需要更长的时间)我是否可以严格从手表读取缓冲区。