经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android MediaPlayer 音频倍速播放,调整播放速度
来源:cnblogs  作者:RustFisher  时间:2019/9/26 8:50:02  对本文有异议

本文链接: Android MediaPlayer 倍速播放,调整播放速度

现在市面上的很多音视频App都有倍速播放的功能,例如把播放速度调整为0.5、1.5、2倍等等。

从Android API 23 (Android M)开始,MediaPlayer支持调整播放速度。
使用的方法是setPlaybackParams,传入一个代表播放属性的类PlaybackParams。

本文介绍如何使用MediaPlayer调整播放速度。

MediaPlayer.setPlaybackParams 说明

播放速度设置在PlaybackParams对象中,再将此对象传入setPlaybackParams。

setPlaybackParams是一个native方法。
如果MediaPlayer没有准备(在prepared之前),调用此方法并不会改变MediaPlayer的状态。
在MediaPlayer成功prepare之后,如果设置的速度为0,相当于调用了pause方法;如果设置速度不为0,相当于调用了start方法。

异常情况

如果MediaPlayer没有初始化或者已经被释放,即处于Idle或End状态,调用setPlaybackParams方法会抛出IllegalStateException异常。

如果传入的PlaybackParams不被支持,则抛出IllegalArgumentException异常。

如果设置速度小于0,则抛出java.lang.IllegalArgumentException异常。

MediaPlayer.setPlaybackParams 方法示例

设置播放速度。先判断当前系统版本。

  1. private boolean setPlaySpeed(float speed) {
  2. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  3. PlaybackParams params = mediaPlayer.getPlaybackParams();
  4. params.setSpeed(speed);
  5. mediaPlayer.setPlaybackParams(params);
  6. return true;
  7. }
  8. return false;
  9. }

getPlaybackParams可以获取到MediaPlayer当前的PlaybackParams对象。
也可以给这个方法加上try catch,结合返回的boolean值判断设置速度是否成功。

  1. private boolean setPlaySpeed(float speed) {
  2. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  3. try {
  4. PlaybackParams params = mediaPlayer.getPlaybackParams();
  5. params.setSpeed(speed);
  6. mediaPlayer.setPlaybackParams(params);
  7. return true;
  8. } catch (Exception e) {
  9. Log.e(TAG, "setPlaySpeed: ", e);
  10. return false;
  11. }
  12. }
  13. return false;
  14. }

参考代码 https://github.com/RustFisher/android-MediaPlayer

PlaybackParams 包含的速度值

调整MediaPlayer播放速度时,我们使用了PlaybackParams对象。AudioTrack也会用到这个类。

PlaybackParams包含着播放时候的一些属性。例如speed就是播放速度。

PlaybackParams.setSpeed(float speed)

传入速度倍率值。会标记当前设置过了速度。

  1. public PlaybackParams setSpeed(float speed) {
  2. mSpeed = speed;
  3. mSet |= SET_SPEED;
  4. return this;
  5. }

PlaybackParams.getSpeed()

获取已设置的速度值。如果之前没设置过速度,则抛出IllegalStateException异常。

  1. public float getSpeed() {
  2. if ((mSet & SET_SPEED) == 0) {
  3. throw new IllegalStateException("speed not set");
  4. }
  5. return mSpeed;
  6. }

原文链接:http://www.cnblogs.com/rustfisher/p/11587086.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号