当前位置: 移动技术网 > IT编程>移动开发>Android > Android MediaPlayer 音频倍速播放,调整播放速度

Android MediaPlayer 音频倍速播放,调整播放速度

2019年09月25日  | 移动技术网IT编程  | 我要评论

兰陵缭乱第二部,软件界面设计欣赏,齐天大圣异界行txt

本文链接: 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 方法示例

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

private boolean setplayspeed(float speed) {
    if (build.version.sdk_int >= build.version_codes.m) {
        playbackparams params = mediaplayer.getplaybackparams();
        params.setspeed(speed);
        mediaplayer.setplaybackparams(params);
        return true;
    }
    return false;
}

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

private boolean setplayspeed(float speed) {
    if (build.version.sdk_int >= build.version_codes.m) {
        try {
            playbackparams params = mediaplayer.getplaybackparams();
            params.setspeed(speed);
            mediaplayer.setplaybackparams(params);
            return true;
        } catch (exception e) {
            log.e(tag, "setplayspeed: ", e);
            return false;
        }
    }
    return false;
}

参考代码 https://github.com/rustfisher/android-mediaplayer

playbackparams 包含的速度值

调整mediaplayer播放速度时,我们使用了playbackparams对象。audiotrack也会用到这个类。

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

playbackparams.setspeed(float speed)

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

public playbackparams setspeed(float speed) {
    mspeed = speed;
    mset |= set_speed;
    return this;
}

playbackparams.getspeed()

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

public float getspeed() {
    if ((mset & set_speed) == 0) {
        throw new illegalstateexception("speed not set");
    }
    return mspeed;
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网