我正在尝试为iPhone编写一个波形可视化工具,我遇到了一个关于ExtAudioFileRead的有趣问题。
我正在从VBR的MP3文件中读取。我的客户端格式是44.1 mono,单声道。
我将寻找一个我想要可视化的位置,并在1024帧中阅读。我看到的是70%或80%的情况下,在前512帧左右,我会得到0。读取器报告它已成功读取所有请求的帧。
此外,我已经证实我正在寻求正确的位置。如果我将读取结果放入音频队列中,它显然是文件中的正确位置。
那是怎么回事呢?有没有想过为什么会出现这种情况?我在文档中找不到任何与这个问题相关的东西。
发布于 2012-04-04 06:26:47
我设法解决了这个问题,方法是在请求帧的位置之前定位1024帧,读取1024 + requestedLength帧,然后从缓冲区中取出最后的requestedLength帧。
我不确定为什么这个解决方案有效,但我有一个理论(以防有人正在阅读本文)
在压缩格式中,音频文件被分成多个包。帧mid分组需要对任何先前的帧(来自同一分组)进行解码以便被理解。
猜测将追随
也许当您使用ExtAudioFileSeek查找包中时,此解码不会发生,并且会返回零,直到您到达下一个包边界。
我的解决方案可能会起作用,因为我回溯了足够远的距离,可以在同一个包中读取我想要的帧之前的所有帧,所以解码确实发生了。
https://stackoverflow.com/questions/9977971
复制相似问题