[TOC]

0x00 需求

单曲循环播放歌曲,要求过度连贯,听不出来卡顿感觉。

0x01 解决思路

MediaPlayer

对于常见的音乐播放,我们第一时间想到的应该就是它,它有一个方法

MediaPlayer.setLooping(true);

就是用来进行单曲循环的。但是很遗憾,如果你简单的这么做,上面的目的是达不到的,会出现上一遍结束出现一个明显的停止才开始播放下一次的现象。

不过最后就是用的这个组件,不过不是简单的设置 setLooping(true)。

SoundPool

一段时间内可能会播放很多音乐的时候,我们首先应该选择这个。

第三方组件

如果没有特殊的需求,这个不是首选,特别是当引入的组件特别重的时候。

因为之前踩过坑:iOS上直接播放mp3文件,单曲循环的时候播放的间隙特别长,卡顿的感觉无法接受,解决方法是将mp3转换成m4a,基本上听不出中间的过度间隙。

首先尝试了使用 MediaPlayer 来播放,在我的机器(MX4 Pro)上播放还勉强能接受,间隙不是非常明显,换到配置差一点的机器上就不能忍了。然后尝试了 SoudPool ,无论是预加载一次循环播放,还是预加载两次循环播放,中间的卡顿感觉和用 MediaPlayer.setLooping(true); 一样一样的。再然后,尝试macOS 下编译 vlc for android ,我失败了╮(╯▽╰)╭)问题总要解决的,再找其他办法。

0x02 死循环

找了很多资料,最后使用一个循环播放的方法解决了这个问题:

创建第一个播放器,播放;

同时创建第二个播放器,准备;

第一个播放器播放完毕立马启动第二个;

然后创建第三个播放器,准备;

如此往复,直到用户停止...

由于对 MediaPlayer 没有过深入的研究和使用,这个思路来一时半会自己还是想不出来的(总是会想只要创建一个播放器就够了)。这么做下来真的循环播放就没有间隙感了……

由于 mPlayer.setLooping(true); 是native方法,所以没有去跟具体的实现逻辑。猜测可能是重新加载或者其他原因导致单曲循环中间间隙较大(原谅我的懒,没有去拿大文件尝试)。而使用上面的方式,当播放时间大于预加载时间的时候,第一个播放器播放的时候有第二个播放器有充足的机会去完成加载然后等待播放(播放时间小于加载时间的可能性不是很大)。

private MediaPlayer mPlayer, mNextPlayer;

private int mPlayResId = R.raw.water;

public void testLoopPlayer() {

mPlayer = MediaPlayer.create(this, mPlayResId);

mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mediaPlayer) {

mPlayer.start();

}

});

createNextMediaPlayer();

}

private void createNextMediaPlayer() {

mNextPlayer = MediaPlayer.create(this, mPlayResId);

mPlayer.setNextMediaPlayer(mNextPlayer);

mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override

public void onCompletion(MediaPlayer mp) {

mp.release();

mPlayer = mNextPlayer;

createNextMediaPlayer();

}

});

}

0x03 总结

这更像一个开脑洞的问题。

参考:

—— EOF ——

android音乐播放器 单曲循环,[Android] MediaPlayer单曲循环不卡顿相关推荐

  1. android 音乐播放器论文,毕业论文:ANDROID音乐播放器

    用于设置歌曲播放进度条和显示当前播放时间和总时间.第四个用于显示播放控制和音量进度条. (3)界面的初始化操作 Android的每一个可视化界面,都有其的唯一的布局配置文件,该文件里面有各种布局方式, ...

  2. Android音乐播放器word文档,Android音乐播放器

    Android音乐播放器 一个很简单很简单的音乐播放器 需要在res目录下新建raw文件夹,音乐文件放在里面,格式为后缀为.mp3格式的音乐 这里我们定义的音乐文件名称为big.mp3 layout布 ...

  3. android音乐播放器课程设计报告,android音乐播放器课程设计报告11.doc

    最新精品文档,知识共享! android音乐播放器课程设计报告 基于Android音乐播放器的设计与实现 滨江学院 <移动通信程序设计> 课程设计 题 目 院 系 专 业学生姓名 学 号 ...

  4. android 音乐播放器专辑图片旋转,Android应用开发之简易、大气音乐播放器实现专辑倒影效果...

    今天要实现的功能是实现专辑倒影效果,这个功能已经属于图像处理方面的了,对图像处理我不怎么在行,等一下会介绍一个很实用的工具类,专门用来进行图像处理的.这个工具类不是我写的,我只是拿来用到自己的项目当中 ...

  5. android音乐播放器的历史,基于Android音乐播放器的研究

    Android平台是目前智能移动终端的主流系统.随着人们生活.工作节奏的加快,乘车.运动.学习等碎片时间的增多,音乐播放器成为人们所关心的必备应用之一,广受大家欢迎. 目前,Android市场上以酷狗 ...

  6. android音乐播放器 毕业论文,毕业论文-- 基于Android系统的音乐播放器的实现 .doc...

    毕业论文-- 基于Android系统的音乐播放器的实现 .doc 还剩 31页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! ...

  7. Android音乐播放器eclipse,简单的Android音乐播放器 eclipse开发的基于Android平台的音乐播放器 - 下载 - 搜珍网...

    压缩包 : 音乐播放器.zip 列表 音乐播放器/ 音乐播放器/.classpath 音乐播放器/.project 音乐播放器/.settings/ 音乐播放器/.settings/org.eclip ...

  8. android音乐播放器简书,打造 Android 网络音乐播放器 [2]

    前言 在上一篇中,我们把播放器的基本播放功能实现了,今天我们就把基本的界面实现以下吧. 目标 界面的话没打算实现太复杂的,就做现在比较流行的 Drawer+Tab+ViewPager 这种界面.下面给 ...

  9. android 音乐播放器评测,七大主流Android音乐播放器横向评测

    本文导航第3页:应用细节 第2页:操作体验 第4页:在线曲库.软件大小 在线曲库.软件大小 四.在线曲库丰富程度 在线曲库方面,我们随机选取了十首歌曲作为样本,分别是:信仰在空中飘扬.盛开.喝不完的酒 ...

  10. android 音乐播放器专辑图片旋转,Android实现网易云音乐的旋转专辑View

    本文实例为大家分享了Android实现网易云音乐的旋转专辑View,供大家参考,具体内容如下 一.前言 最近做过 类似网易云音乐专辑唱片的效果,这里记录下开发思路,仅供参考.但需求不完全与网易云音乐一 ...

最新文章

  1. 2022-2028年中国社区体育产业深度调研及投资前景预测报告
  2. 题目1460:Oil Deposit
  3. 【Linux】一步一步学Linux——uname命令(72)
  4. Linux查看网卡UUID另一方法
  5. python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法
  6. Linux 命令之 cd 命令-切换目录
  7. Transformer如何并行化? self-attention公式中的归一化有什么作用?
  8. 穷人的孩子真的早当家吗?
  9. 步进电机选型计算实例_滚珠丝杠选型和电机选型计算
  10. 在计算机应用领域中媒体是指,在计算机中,媒体是指什么
  11. JS判断是否在微信浏览器打开
  12. sql格式化工具-SQL Pretty Printer
  13. Win10开启IPv6
  14. 软件系统测试报告范文,软件系统测试报告模板.docx
  15. lcms质谱仪_岛津LCMS-8045三重四极杆质谱仪
  16. session跨域共享
  17. 算法——Horner scheme
  18. MySQL数据库 -- 库和表的操作
  19. TLS 地面三维激光扫描仪
  20. Windows ping General failure.

热门文章

  1. 怎么才学了两天就感觉自己变“笨”了呢?
  2. Python 字符串过滤
  3. CentOS7 Docker搭建私有镜像仓库
  4. Avast 和 AVG 杀软中的两个高危漏洞已存在10年?!影响数百万设备
  5. Netty 快速开始(netty websocket客户端使用流程)
  6. 电脑屏幕变小了左右黑_记者走进温州市中心粮仓,看“黑科技”助力守护“米袋子”——每一粒粮食都在视线范围内...
  7. 模式识别hw2-------基于matconvnet,用CNN实现人脸图片性别识别
  8. 大并发量socket 通信框架
  9. oracle中group by用法报错ORA-00979: not a GROUP BY expression
  10. 元宇宙能成为下一个互联网吗?