Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android MediaPlayer 音频倍速播放,调整播放速度

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

作者头像
AnRFDev
发布于 2021-02-01 07:20:42
发布于 2021-02-01 07:20:42
4.4K00
代码可运行
举报
文章被收录于专栏:AnRFDevAnRFDev
运行总次数:0
代码可运行

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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值判断设置速度是否成功。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public PlaybackParams setSpeed(float speed) {
    mSpeed = speed;
    mSet |= SET_SPEED;
    return this;
}

PlaybackParams.getSpeed()

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public float getSpeed() {
    if ((mSet & SET_SPEED) == 0) {
        throw new IllegalStateException("speed not set");
    }
    return mSpeed;
}

更多参考:

Android MediaPlayer 基础简介

Android MediaPlayer 播放音频

Android 使用URLConnection下载音频文件

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

Android音视频相关文章请参考 https://rustfisher.com/tags/Android-Media/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android音视频——系统播放器介绍(三)
开发者可以设置一些监听器,监听MediaPlayer的状态,错误事件等等。开发者应在同一个线程中创建MediaPlayer与设置的监听器。
程思扬
2022/01/11
1K0
Android多媒体之视频播放器(基于MediaPlayer)
获取帧.png 基本上也就这么多了,最后讲一下视频封面帧图片的获取:数了一下这帧大概在15秒 测试了一下秒数越大,获取图片的速度越慢,也就是越卡,所以还是给0吧 如果在Adapter里实时加载会很卡,最好查询的时候就把bitmap放到实体类里,由于封面图不要很大 别把原图给放进去了,小心直接OOM。Bitmap的操作本文就不赘述了。
张风捷特烈
2019/03/15
5.6K0
Android多媒体之视频播放器(基于MediaPlayer)
Android 音频播放速率调整实现
最近接触到的一个项目, 有音频播放、切换播放速率和拖动进度到某处播放的需求 ,由于之前只是见过并没有尝试过切换播放速率 , 于是开始调研并最终实现,下面简单记录一下这次的调研过程。
程思扬
2022/01/11
1.3K0
4款知名播放器比较:ijkPlayer、VLC、SmartPlayer、ExoPlayer
ijkPlayer是BiliBili公司维护的一个开源工程,基于ffmpeg开发的一个播放器软件,支持Android和iOS平台,整个ijkplayer就是以ffplay为基础,如果只是使用它进行播放,集成也较为简单,使用也和MediaPlayer差不多,但是要定制化需求,就有一定的门槛高度。支持软硬编解码,支持倍速播放,可以定制化集成需要的功能,集成占用体积也很小,更详细的解释参看下面官方介绍:
音视频牛哥
2021/03/18
8.9K0
视频播放器倍速、清晰度切换、m3u8下载
视频上很容易就可以做到倍速播放,一般的视频格式都是每秒固定的帧数,按比例跳帧就可以了。音频上其实也可以用这种方式来直接删除一些周期,因为电脑里的音频也是数字化离散化地储存的。但是为了使声音不失真,应该都用了稍复杂一点的算法的,比方说把相邻时钟周期内的声音电平信号取平均,或者用高斯平均值代替原信号,再精细点可以自适应地在音调信号比较丰富的地方设置比较高的权重来尽量少压缩保持音色,总之有很多种方法都可以做到啦。因为没有关注过这个,所以并不知道在软件里具体是怎么实现的,但是数字信号的缩放、滤波这些算法应该都差不多是这么做的,音频的加速也不像是需要使用更复杂的非线性自适应滤波的样子。
xiangzhihong
2022/11/30
1.2K0
MediaPlayer(总结)--从对象生命周期理解MediaPlayer状态
为了方便先重复贴一下MediaPlayer的状态图和MediaPlayer 的基本框架
小蚂蚁与大象
2020/04/21
1.1K0
MediaPlayer(总结)--从对象生命周期理解MediaPlayer状态
Android MediaPlayer 播放音频
主要介绍使用MediaPlayer播放音频的方式。关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPlayer 基础简介。
AnRFDev
2021/02/01
2.3K0
Android ExoPlayer 音画同步代码分析
音画同步旨在通过时钟参考的方式,将音频、视频、歌词等播放时间对应起来,确保画面和声音同步。音视频播放器开发中,音画同步是一项非常重要的工作,直接影响用户的视听体验。
QQ音乐技术团队
2023/08/16
1.7K0
Android ExoPlayer 音画同步代码分析
Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐
项目请在真机(自己的手机)上测试运行,因为我不喜欢用虚拟机。 为了不浪费您的时间,先看一下运行的效果图, 一进去先进行音乐扫描,然后列表展示出来,点击即可播放。
晨曦_LLW
2020/09/25
3.1K0
05.视频播放器内核切换封装
05.视频播放器内核切换封装 目录介绍 01.视频播放器内核封装需求 02.播放器内核架构图 03.如何兼容不同内核播放器 04.看一下ijk的内核实现类 05.看一下exo的内核实现类 06.如何创建不同内核播放器 07.看一下工厂类实现代码 08.后期如何添加新的内核 00.视频播放器通用框架 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer可以自由切换 对于视图状态切换和后期维护拓展,避免功能和业务出现耦合。比如需要
杨充
2020/10/16
2.4K0
Android MediaPlayer音频播放器详解
音频播放,是比较常见或常用的功能,比如音乐播放器、新闻播报、听书等等,而恰巧如果你想自定义一个音频播放器的话,本文一定对你有帮助!
yechaoa
2022/06/10
1.5K0
Android MediaPlayer音频播放器详解
Android 实现视屏播放器、边播边缓存功能、外加铲屎(IJKPlayer)
Android上最为人熟知的MediaPlayer,对,就是这货,在上两篇音频文章中频频露脸的家伙,这次又有它的身影,然而还是这次不讲他,就连他的封装类VideoView也不讲<( ̄︶ ̄)>,呸呸呸,又扯了一堆没用的。
GSYTech
2018/08/22
2.8K0
Android 实现视屏播放器、边播边缓存功能、外加铲屎(IJKPlayer)
MediaPlayer(八)--start()流程
frameworks/base/media/java/android/media/MediaPlayer.java
小蚂蚁与大象
2020/04/21
1.1K0
Android MediaPlayer 播放prepareAsync called in state 8解决办法
使用android MediaPlayer播放音频文件时,有时会出现prepareasync called in state 8错误。
黄啊码
2020/05/29
1.2K0
AVPlayer 添加音频播放功能
大家好,本文是 iOS/Android 音视频开发专题 的第八篇,该专题中 AVPlayer 项目代码将在 Github 进行托管,你可在微信公众号(GeekDev)后台回复 资料 获取项目地址。
100001509164
2019/09/29
2.2K0
音视频开发之旅(45)-ExoPlayer 音频播放器实践(一)
通过上一篇的学习实践,我们了解了ExoPlayer的优缺点以及基本用法,今天我们进入ExoPlayer的音频播放实践,我们来一起实现一个简单的音频播放器。
音视频开发之旅
2021/05/29
5.5K1
音视频开发之旅(45)-ExoPlayer 音频播放器实践(一)
相关推荐
Android音视频——系统播放器介绍(三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验