我正在编写一个Android应用程序,需要能够以高精度在大型mp3音频文件(约90分钟)内寻找特定点。
目前,我正在使用OpenSL方法,其中包含一个带有URI数据源的音频播放器对象,该数据源指定了mp3文件和MIME信息。
为了测试这一点,我使用播放器上的SLSeekITF接口来寻找特定的点(以毫秒为单位)。但是,我发现寻求表现很差且不一致。音频通常距离它应该是1-10秒。有时前进,有时落后。使用较短的mp3文件可以提高性能,但远不够近。
Seek模式(“准确”和“快速”)似乎对SLSeekITF没有任何影响。
在其他平台上,我可以使搜索位置非常准确< 50毫秒,几乎没有注意到,所以我知道这是可能的。
- 有谁知道如何从OpenSL音频播放器中获得更好的准确性? - 这个实现存在已知问题吗? - 是否有其他可用的mp3解码器提供更好的性能?
由于
答案 0 :(得分:0)
我也在Google NDK群组上发布了这个问题: https://groups.google.com/forum/#!topic/android-ndk/rzVr3A0DjBs
虽然我从来没有得到谷歌任何人的正式回答,但我收到的反馈似乎表明Media Player和/或播放来自OpenSL ES的URI的音频都是错误的。
我最终通过使用具有搜索能力的第三方mp3解码器和OpenSL ES中的缓冲区队列音频播放器对象来播放音频样本来解决此问题。
很难做到,但它确实有效。