gpt4 book ai didi

iphone - 如何附加到录制的 MPEG4 AAC 文件?

转载 作者:太空狗 更新时间:2023-10-30 03:52:57 28 4
gpt4 key购买 nike

我正在使用具有以下设置的 AVAudioRecorder 在 iPhone 上录制音频:

NSMutableDictionary *recordSettings = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
[NSNumber numberWithFloat:44100.0], AVSampleRateKey,
[NSNumber numberWithInt:1], AVNumberOfChannelsKey,
[NSNumber numberWithInt:12800], AVEncoderBitRateKey,
[NSNumber numberWithInt:16], AVLinearPCMBitDepthKey,
[NSNumber numberWithInt: AVAudioQualityHigh], AVEncoderAudioQualityKey,
nil];

(我可以灵活地处理这些设置中的大部分,但我必须使用 MPEG4 AAC。)

我将音频保存到文件中。

用户需要能够在以后返回并继续录制到同一个文件。似乎没有直接使用 AVAudioRecorder 执行此操作的选项,因此我正在录制到一个新文件并将它们连接起来。

目前我使用 AVMutableCompositionAVMutableCompositionTrack 作为 here 附加文件, 但对于较长的录音来说它真的很慢所以这真的不可行。

我认为,如果我可以从第二个文件中去除 header ,将音频数据附加到第一个文件,然后更改组合文件的 header 以反射(reflect)新的持续时间,会快得多。据我所知,这两个文件是使用完全相同的设置创建的,我认为 header 中的其他详细信息应该是相同的。

不幸的是,我找不到任何关于标题格式的信息,或者是否可以用这种方式组合文件。

所以我的问题是:

  • 在 iPhone 上创建的 MPEG-4 AAC 文件头的格式是什么?
  • 我可以通过像这样弄乱标题来合并两个音频文件吗?
  • 有没有更好的方法几乎可以同时附加两个 MPEG-4 AAC 音频文件?

最佳答案

虽然我们要求 AVAudioRecorder 以 MPEG4-AAC 格式录制,但它总是生成 .caf(核心音频格式)文件。然而,这只是一种包装格式,它包含的实际音频数据是 AAC 格式。

最后,附加文件归结为逐字节操作 .caf 文件。核心音频格式文件的规范是 here .消化这份文件并相应地处理文件一开始有点令人不快,但事实证明规范非常清晰和完整,所以并不太繁琐。

正如规范所解释的那样,.caf 文件由以四字节名称开头的 block 组成。对于 AAC 文件,总是有一个 desc block 和一个 kuki block 。我们知道我们的两个原始文件格式相同,我们可以将这些 block 原封不动地复制到输出文件中。

还有一个pakt block 和一个data block 。我们不能保证这些在输入文件中的顺序。可能有也可能没有 free block - 但它只包含填充 0x00,所以我们不需要将它复制到输出文件。

要组合 pakt block ,我们需要检查 block 头并生成一个新的 pakt block ,其 mNumberPacketsmNumberValidFrames 字段是输入文件中那些字段的总和。 mPrimingFramesmRemainderFrames 始终为零 - 这些仅与流媒体相关。大部分 pakt block (即实际的数据包表数据)可以直接连接起来。

data block 类似:mChunkSize 字段需要求和,然后可以连接大部分数据。

从这些文件中的所有二进制数字字段读取数据时要小心:文件是大端,但 iPhone 是小端。

为了加分,您可能还想考虑从文件中删除音频片段,或将一个音频文件插入另一个音频文件的中间。这有点棘手,因为您必须解析 pakt block 的内容。同样是遵循规范的情况:有一个很好的描述如何将数据包大小存储在可变长度整数中,因此您必须解析这些以找出每个数据包在 data< 中占用了多少字节 block ,并相应地计算它们的位置。

总而言之,这比我希望的要麻烦得多。也许有一个开源库可以为您完成所有这些工作,但我找不到。

但是,与在原始问题中使用 AVMutableCompositionAVMutableCompositionTrack 相比,像这样处理原始文件快得让人眼花缭乱——将一个小时的录音插入另一个相同的文件中长度大约需要两秒钟。

祝你好运!

关于iphone - 如何附加到录制的 MPEG4 AAC 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5154125/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com