本文部分内容翻译自 Apple 官方开发者论坛中来自Apple开发者的一份声明,Working with AVAudioPCMBuffer
背景
AVAudioBuffer
是苹果最新音频框架 AVFAudio(即 AVFoundation Audio 部分)中最基础的音频缓存帧结构
但是目前该结构仅能在 AVAudioEngine
的整体使用中由 AVAudioFile
的 readIntoBuffer:frameCount:error:
方法读出,没有自定义构建并填充数据的途径。
因此 Apple 官方开发人员对此做出了回应并给出了一些建议
构建帧结构
一些开发者有问过怎样不通过 AVAudioFile 的读解码方法 readIntoBuffer… 创建 AVAudioPCMBuffer 并填充数据。
AVAudioPCMBuffer
是 AVAudioBuffer
在 PCM 格式下的子类。对 Core Audio 有所了解的人会注意到,基本上这些缓存类设计都会把 AudioStreamBasicDescription
(AVAudioFormat
中)和 AudioBufferList/AudioBuffer
结构包装进来。
因为在为 AudioBufferList/AudioBuffer(s) 分配内存时,需要知道具体的格式和缓存大小,所以在创建 AVAudioPCMBuffer 实例时,需要指定缓存格式。缓存中可以存储的最大帧数通过只读属性 frameCapacity 限定,它的注释是:“缓存中音频采样帧的容量(只读)”
frameLength 属性表示缓存中当前可用帧数量,这个数量可能会被修改,特别是直接操作底层 AudioBuffers 的时候。这个数量值不能超过缓存容量值。修改这个数量属性时,底层 AudioBuffers 里的 mDataByteSize 字段会相应被更新。
AVAudioPCMBuffer 为访问容器中的音频数据提供了三个属性:
- floatCh