使用 NSData 在 iPhone 上将音频文件正确组合为一个

Posted

技术标签:

【中文标题】使用 NSData 在 iPhone 上将音频文件正确组合为一个【英文标题】:Combining Audio Files as One Properly on iPhone with NSData 【发布时间】:2009-10-17 20:43:56 【问题描述】:

我正在使用 AVAudioRecorder 每 15 秒保存一次音频文件,方法是停止录制,使用 NSMutableData 对象并使用 appendData 方法将该数据附加到先前的录音机文件中。

然后我以相同的方法再次录制,因此录制是“连续的”。问题是,只要您执行 [recorder stop],它就会在指定的 url 处保存/关闭音频文件。这很好,因为我可以用它填充一个 NSData 对象并将其附加到我的 NSMutableObject 中,然后写入相同的文件 url。

问题是标题信息一定有问题,因为它只播放音频的第一部分。

我的问题是如何正确组合文件,甚至像组合两个音频文件并让 AVAudioPlayer 将其视为一个文件一样简单。我在想,当我将第二个记录附加到第一个记录时,文件长度/持续时间的标题信息可能会搞砸。

有什么想法吗?

【问题讨论】:

【参考方案1】:

音频文件有一个标题,它指定文件中有多少样本以及数据块应该多长。附加到现有文件的任何数据都将被忽略。这就是为什么您只听到第一个录音的原因。

您不能只是附加或连接音频文件,就好像它们是原始数据一样。您必须从每个文件中提取样本数据块,仅连接数据,然后编写一个新的文件头,其中正确填写数据长度和样本数量的字段,最后是连接的声音数据块本身。

【讨论】:

【参考方案2】:

iPhone 音频 API 允许您创建一个非常大/长的音频文件,而无需执行任何过于复杂的操作。请参阅 SpeakHere 示例代码,它会创建一个随时间增长的声音文件,可能会达到非常大的大小。

【讨论】:

以上是关于使用 NSData 在 iPhone 上将音频文件正确组合为一个的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 上合并音频文件

iPhone - 来自本地文件 URL 的 NSData

从 iPhone 中的音乐文件中获取 NSData

在 iPhone 上将声音录制为 WAV

使用 NSData 解决生产者-消费者问题(用于音频流)

使用 Aimersoft DVD Ripper 在 Mac 上将家庭 DVD 转换为视频/音频?如何编辑 DVD 电影?