ios - AVAudioPCMBuffer - 读取(进入缓冲区 : AVAudioPCMBuffer) memory crash?(缓冲区溢出)

标签 ios swift buffer avfoundation avaudiopcmbuffer

以下代码适用于我所有设备(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/

相关文章:

ios - 核心数据加载 Swift 后异步刷新 UITableView

iphone - 如何用不同的变量重复一个 Action ?

SwiftUI:无法推断引用成员的上下文基础

ios - 我如何制作五彩纸屑?

c++ - 双缓冲区与双数组 C++

ios - iOS模拟器可以模拟3指或者4指点击吗?

ios - session 正在记录,但事件未记录在 Flurry for iPhone 应用程序中

ios - 在同一项目中同时使用 SPM 和 Cocoapods

security - Shellcode 作为缓冲区溢出(或其他)漏洞的有效负载以 root 身份执行?

debugging - 如何告诉GDB刷新正在调试的程序的stdio