AVAudioPlayer- 从声音缓冲区播放

Posted

技术标签:

【中文标题】AVAudioPlayer- 从声音缓冲区播放【英文标题】:AVAudioPlayer- play from sound buffer 【发布时间】:2015-08-26 08:23:42 【问题描述】:

我一直在研究使用 AVAudioPlayer 播放声音。这里的问题是格式 - 我在缓冲区中有一堆 WAV 样本,但根本没有 WAV 标头。 AVAudioPlayer 似乎不允许您只设置格式,它必须尝试从 NSData 缓冲区中解释它。在开始播放之前必须复制整个声音对我的用户来说并不是一个好的体验。

如果我有一个 WAV 样本缓冲区(不是内存中的 WAV 文件),我如何使用 AVAudioPlayer 播放它而不用巨大的副本削弱我的性能?

【问题讨论】:

【参考方案1】:

不要复制整个(巨大的)声音,只需在现有缓冲区的第一个样本前面复制一个 WAV 文件头即可。最初将波形数据获取到内存中(文件加载、下载或合成等)时,请确保前面至少有 44 个字节的填充,以便有空间复制标头。如果是缓冲区 sn-p ,保存一点数据,把WAV头复制进去,播放声音,然后恢复原来的44字节。

【讨论】:

以上是关于AVAudioPlayer- 从声音缓冲区播放的主要内容,如果未能解决你的问题,请参考以下文章

在其他 swift 文件中调用时,AVAudioPlayer 不会播放声音

使用 AVAudioPlayer 播放声音时出现问题?

关于 AudioQueue 的 XCODE AVAudioPlayer 错误:请求从包含 1152 帧的缓冲区中修剪 0 + 1676 = 1676 帧

AVAudioPlayer 间歇性不播放声音

声音播放完毕后 AVAudioPlayer 实例会发生啥? [关闭]

touchesMoved中的SpriteKit + AVAudioPlayer:杀死fps