android - ExoPlayer shuffle 不会重现所有歌曲
问题描述
我正在使用 exoplayer 库创建一个音乐播放器。一切正常,除了不符合我预期的洗牌。
我遇到的问题如下:
假设我有 5 首歌曲:
歌曲 1
歌曲 2
歌曲 3
歌曲 4
歌曲 5
我在第一个。然后我点击 shuffle 按钮并启用 shuffled using exoPlayer.shuffleModeEnabled = true
。那么现在的顺序如下:
歌曲 4
歌曲 2
歌曲 5
歌曲 1
歌曲 3
就像我在歌曲 1 中一样,之后它会转到歌曲 3,然后它会在不重现歌曲 4、2 和 5 的情况下完成。我指定的行为是以随机顺序重现所有歌曲。有什么办法可以用 exoplayer 实现吗?
解决方案
您可以实现自己的 ShuffleOrder 来实现这一点。一种方法是扩展DefaultShuffleOrder类并使用成员字段来存储起始索引(在您的示例中,它应该是歌曲 1)。您应该覆盖以下方法:
getNextIndex(int index)
getPreviousIndex(int index)
getFirstIndex()
getLastIndex()
这个想法是让它成为一个循环列表。在您的示例中,假设洗牌顺序是 4、2、5、1、3 和 1 当前正在播放,您getFirstIndex()
应该返回 1,并且getLastIndex()
应该返回 5。对于getNextIndex(int index)
and getPreviousIndex(int index)
,做它应该做的事情,但是当你到达头/尾只是循环它。
然后,当您想激活洗牌时,您可以:
concatenatingMediaSource.setShuffleOrder(new MyShuffleOrder());
推荐阅读
- oracle - 将 Nifi ExecuteSQLRecord 与参数化 SQL 语句一起使用?
- spring-security-oauth2 - Spring OIDC 支持 JWKS 旋转
- flutter - “构建失败,出现异常。” 在尝试使用 sqflite 或 path_provider 时颤抖
- python - 我怎样才能让 python 总是检查时间?
- python - 我的不和谐令牌检查器没有从 .txt 文件中正确删除行。(Python 3)
- ios - 无法使用 Swift 中的协议将数据从 VC1 传输到 VC2
- python - 来自“Pro Coder”示例的 Python 二叉搜索树
- r - 围绕 x 轴标签居中 ggplot2 输出图像
- angular - 如何在浏览器上运行 e2e 测试(angular-9)
- javascript - 了解回调和承诺。这个对吗?