目前我在项目中需要对播放的音频设置不同的速率(0.8、1、1.3倍),存在如下的疑惑:
1.使用MediaPlayer,这个类是使用的最广泛的,但不提供相应的设置速率的方法。
2.SoundPool,适合播放游戏中的急促 短暂的音效,只能播放大概10秒的音频,且不提供读完音频的回调方法。
3.AudioTrack,这个类可以进行速率的设置,但只能播放已经解码的PCM文件流,如果是文件的话只支持wav格式音频,目前项目中的文件都是MP3格式的,需要转换以及解码。
4.OpenSL ES是通过JNI和NDK进行底层实现的,自己去实现和集成并封装到自己的项目中,难度会比较大,但这个方法可能也是最彻底的。
个人认为有两种方法:
1.最笨的方法,增加两套对应速率(0.8、1.3倍)的音频文件,一是会增加相关部门的制作资源的工作量。二是增加用户的存储控件。
2.通过OPenSL ES的集成到项目中去,如果是这样的话就需要:一是把JNI和NDK打通,二是封装集成到现有的项目中,之前的MediaPlayer不用,上一句和下一句的切换以及其他的功能需要重新进行封装。