2012-04-02 26 views
2

我正在尝试为iPhone编写波形可视化工具,而且我遇到了ExtAudioFileRead有趣的问题。ExtAudioFileSeek后跟ExtAudioFileRead返回很多顺序0样本(不可能)

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

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

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

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

回答

3

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

我不知道知道为什么这个解决方案的工作,但我有一个理论(万一有人在读这)

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

投机遵循

当你寻求与ExtAudioFileSeek中间包这个解码不会发生,和零点将被退回,直到你遇到下一个数据包边界也许

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

+1

我读过关于这个问题的其他地方有一个非常类似的问题描述。问题在于,返回的帧是从下面的数据包开始的,而不是从寻找应该导致的位置开始。那里的解决方案是找到其中间包的开始,然后寻找那个开始并跳过足够的数据以到达期望的位置。 – 2013-08-28 09:25:26

+1

给定一个mp3文件所需的寻道时间(以秒为单位),你如何计算想要寻找的帧数? – kevlar 2013-09-16 02:35:55