在内存中为AVAudioPlayer initWithData生成LPCM缓冲区

ite*_*ter 6 iphone audio core-audio avaudioplayer

我想以编程方式生成声波并与AVAudioPlayer一起播放.我有代码将我的波形编码为线性PCM,44100Hz,单声道,每个样本8位.

我不清楚我需要在这个缓冲区周围包裹什么类型的信封,以便AVAudioPlayer将其识别为PCM.

rcw*_*cw3 5

PCM只是模拟音频信号的数字表示.不幸的是,它没有封装任何有关音频信道,比特深度或采样率的元数据 - 所有这些都是正确读取所述PCM数据所必需的.我假设AVAudioPlayer会接受包含在NSData对象中的PCM数据,只要您能够在AVAudioPlayer对象中手动设置这些变量即可.不幸的是,这些变量是只读的,所以即使文档说AVAudioPlayer可以处理Core Audio可以处理的任何内容,它也无法处理原始LPCM数据.

正如zoul所说,我认为最简单的方法就是抛出一个WAV标题,因为标题会告诉AVPlayer上述必要的变量.它是44个字节,很容易被模拟,并且很好地定义 - 我使用上面给出的相同定义来实现wav头编码和解码.此外,它只是在您未经修改的 LPCM数据之前.


zou*_*oul 4

也许添加WAV 标头会有帮助?

  • “WAV 编码器”没有太多内容,您所要做的就是编写一个由大约 44 个字节左右组成的简单标头。然后您可以附加已有的 LPCM 数据。 (2认同)