ExtAudioFileSeek后跟ExtAudioFileRead返回许多连续的0个样本(不可能)

时间:2012-04-02 14:06:24

标签: ios audio ios5 core-audio

我正在尝试为iPhone编写波形可视化工具,而且我遇到了ExtAudioFileRead的一个有趣问题。

我正在阅读VBR MP3文件。我的客户端格式是44.1kHz LPCM,mono。

我会寻找一个我想要想象的位置,并在1024帧中读取。我所看到的是70%或80%的时间,我在前512个左右的帧中得到零。该报告表明它已成功读取所有请求的帧。

此外,我已经证实我正在寻找正确的位置。如果我将读取结果放入音频队列,它显然是文件中的正确位置。

那是什么给出的?有关为什么会出现这种情况的任何想法?我在与此问题相关的文档中找不到任何内容。

1 个答案:

答案 0 :(得分:3)

我设法通过在请求帧的位置之前寻找位置1024帧,读取1024 + requestedLength帧,然后将最后requestedLength帧拉出缓冲区来解决此问题。

我不确定为什么这个解决方案有效,但我有一个理论(如果有人正在读这个)

在压缩格式中,音频文件被分成数据包。中间帧的帧需要解码任何先前的帧(来自相同的分组)才能被理解。

推测

可能当您使用ExtAudioFileSeek搜索中间数据包时,此解码不会发生,并且将返回零,直到您到达下一个数据包边界。

我的解决方案可能工作,因为我回溯到足以在同一个数据包之前读取所有帧之前的所有帧,因此解码确实发生。