最近遇到一个控制音频播放速度的问题,常用的方法是使用SoundPool
。
但是这个方法有一个问题就是在我的努比亚手机上只能播放3秒,我没有在源码里面找到设置的地方,但是打印的日志信息里面有这么一条:D/MMParserExtractor: Using default parser out buffer size = 3000
,而且只能播放本地文件或者保存在raw
中文件,无法直接播放网络文件,只能弃掉。
翻遍Google之后找到了另一个办法:
http://stackoverflow.com/questions/10849961/speed-control-of-mediaplayer-in-android
方法是:
MediaPlayer mp = ...; //Whatever
float speed = 0.75f;
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));
不过这种方法只能在API等于23及以上使用。目前找到的就这两种办法。
一是按照SoundPool
的要求改造音频文件;
二是放弃API小于23以下的手机,或者打一顿产品经理。
顺便记下获取raw
资源ID的方法:
int resId=context.getResources().getIdentifier(raw, "raw", context.getPackageName());
Uri uri=Uri.parse("android.resource://" + context.getPackageName() + "/raw/" + resId);