AVAudioPCMBuffer - 读取(进入缓冲区:AVAudioPCMBuffer)内存崩溃? (缓冲区溢出)
AVAudioPCMBuffer - read(into buffer: AVAudioPCMBuffer) memory crash? (buffer overflow)
以下代码适用于我所有设备(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 崩溃 运行ning(尽管可以在 Apple Watch Simulator 上运行)。用 Program ended with exit code: 0
。
观察调试工具,显然这个过程在 Apple Watch 上比 iPhone 更费力。我试过 运行 它在不同的线程、背景等上无济于事。
我知道我可以将缓冲区发送到 iPhone 进行处理,但是我想看看(即使需要更长的时间)我是否可以严格地从手表读取缓冲区。
44.1kHz 的 5 分钟单声道 LPCM float32 音频将是 5*60*44100*4 字节,或大约 53MB。双倍立体声。我不知道手表的内存限制是多少,但我认为你超出了它们。
以下代码适用于我所有设备(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 崩溃 运行ning(尽管可以在 Apple Watch Simulator 上运行)。用 Program ended with exit code: 0
。
观察调试工具,显然这个过程在 Apple Watch 上比 iPhone 更费力。我试过 运行 它在不同的线程、背景等上无济于事。
我知道我可以将缓冲区发送到 iPhone 进行处理,但是我想看看(即使需要更长的时间)我是否可以严格地从手表读取缓冲区。
44.1kHz 的 5 分钟单声道 LPCM float32 音频将是 5*60*44100*4 字节,或大约 53MB。双倍立体声。我不知道手表的内存限制是多少,但我认为你超出了它们。