斯威夫特:AVAudioPCMBuffer vs AVAudioBuffer vs AVAudioCompressedBuffer

Posted

技术标签:

【中文标题】斯威夫特:AVAudioPCMBuffer vs AVAudioBuffer vs AVAudioCompressedBuffer【英文标题】:Swift: AVAudioPCMBuffer vs AVAudioBuffer vs AVAudioCompressedBuffer 【发布时间】:2017-06-06 12:29:41 【问题描述】:

我目前正在使用 AVAudioPCMBuffer 在一个简单的游戏中播放 .wav 文件。但是,在查看它的文档时,我发现了另外两种我从未在其他任何地方看到过的缓冲区,标题中的缓冲区:AVAudioBuffer 和 AVAudioCompressedBuffer。

我的问题是,我应该使用哪一个,为什么?我试图弄清楚另外两个,但我找不到一个例子。任何帮助将不胜感激!

【问题讨论】:

有人可以回复吗:( 【参考方案1】:

AVAudioBufferAVAudioPCMBufferAVAudioCompressedBuffer 的超类。

你不应该在实践中处理AVAudioBuffer它,通常你只使用它的子类。

AVAudioPCMBuffer 用于播放未压缩的 PCM 编码数据(例如 .wav 文件包含的内容) AVAudioCompressedBuffer 支持不同的压缩格式(见Supported Audio file formats in iPhone)

对于您的特定用例,我建议使用更简单的方式来播放文件:AVAudioFile(forReading: URL),您可以使用 scheduleFile(_:, at:) 直接将其输入到 AVAudioPlayerNode,这将自动处理缓冲。

【讨论】:

以上是关于斯威夫特:AVAudioPCMBuffer vs AVAudioBuffer vs AVAudioCompressedBuffer的主要内容,如果未能解决你的问题,请参考以下文章

访问 AVAudioPCMBuffer 的浮点样本进行处理

将 Int16 写入 AVAudioPCMBuffer swift

将 pcm 加载到 AVAudioPCMBuffer

使用 AVAudioEngine 从 AVAudioPCMBuffer 播放音频

使用 Swift 中的 Accelerate 框架来自 AVAudioPCMBuffer 的频谱图

将 AVAudioPCMBuffer 写入压缩的 AVAudioFile