首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >frameCapacity在AVAudioPCMBuffer初始化程序中的值是多少?

frameCapacity在AVAudioPCMBuffer初始化程序中的值是多少?
EN

Stack Overflow用户
提问于 2022-09-26 01:26:51
回答 1查看 39关注 0票数 2

我正在用AVAudioEngineAVAudioPlayerNodeAVAudioPCMBuffer制作节拍器。缓冲区的创建方式如下:

代码语言:javascript
运行
复制
/// URL of the sound file
let soundURL = Bundle.main.url(forResource: <filename>, withExtension: "wav")!
/// Create audio file
let audioFile = try! AVAudioFile(forReading: soundURL)
let audioFormat = audioFile.processingFormat
    
/// Create the buffer - what value to put for frameCapacity?
if let buffer = AVAudioPCMBuffer(pcmFormat: audioFormat, frameCapacity: ???) {
    buffer.frameLength = audioFrameCount
    try? audioFile.read(into: buffer)
        
    return buffer
}

我在frameCapacity初始化器中为AVAudioPCMBuffer设置了什么值?

文档中说,frameCapacity应该是“PCM示例帧中缓冲区的容量”。那是什么意思?这是一个静态值,还是从音频文件中获取?

EN

回答 1

Stack Overflow用户

发布于 2022-09-26 04:20:06

frameCapacityAVAudioPCMBuffer可以容纳的最大帧数。你不需要使用所有的框架。AVAudioPCMBuffer的使用者只应该参考frameLength框架和frameLength <= frameCapacity。如果您正在处理N帧块中的音频,并且无论出于什么原因,您都可以得到一个简短的读取,与长度不同的容量可能很有用:

代码语言:javascript
运行
复制
let buffer = AVAudioPCMBuffer(pcmFormat: audioFormat, frameCapacity: N)

while readChunk(chunk) {
    let frameLength = min(buffer.frameCapacity, chunk.lengthInFrames)
    // copy frameLength frames into buffer.floatChannelData[0] or something
    buffer.frameLength = chunkLength // could be less than N
}

但是,如果您只打算存储audioFrameCount帧(文件的长度?)在缓冲区中,然后将frameCapacity设置为:

代码语言:javascript
运行
复制
let buffer = AVAudioPCMBuffer(pcmFormat: audioFormat, frameCapacity: audioFrameCount)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73848877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档