【问题标题】:How do I write AVAudioCompressedBuffer to an AAC file in iOS?如何在 iOS 中将 AVAudioCompressedBuffer 写入 AAC 文件?
【发布时间】:2018-04-23 23:43:24
【问题描述】:

我已经成功地将 AVAudioPCMBuffers 从 AVAudioEngine 转换为 AAC 格式的 AVAudioCompressedBuffers。现在我正在尝试将这些缓冲区写入文件,但不知道该怎么做。 AVAudioFile 只接受 AVAudioPCMBuffers。

任何帮助将不胜感激!

【问题讨论】:

    标签: ios swift avaudioengine avaudiofile avaudiopcmbuffer


    【解决方案1】:

    最简单的方法是在转换为压缩之前写入 AVAudioFile,或者转换回 PCM 缓冲区并写入 AVAudioFile。

    如果不能选择简单的方法,我相信你会被Audio File Services 卡住。您将使用 AVAudioCompressedBuffer 的 AudioBufferList 属性的数据指针作为 AudioFileWriteBytes 的 inBuffer 参数。与 C API 交互可能会很快变得难看,但这是将直接数据写入音频文件的唯一方法,无法手动完成。

    let data  = myAVAudioBufferlist.audioBufferList[0].mBuffers.mData
    

    【讨论】:

    • 嗨!如何从压缩转换为 PCM?我试过了,但是转换后 PCM 缓冲区是静默的:(
    • @dave234 非常感谢代码示例,当简单的方法不是一个选项时:)
    【解决方案2】:

    我发现最简单的方法是将未压缩的AVAudioPCMBuffer 转换为CMSampleBuffer,然后使用AVAssetWriter 将音频样本写入文件。资产编写器可以将格式压缩处理为 AAC。

    这个我没试过,不过你也可以使用AVAudioCompressedBuffer的音频缓冲区列表,构造CMSampleBuffers。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      相关资源
      最近更新 更多