关于音乐播放器中随机播放的两种模式
来源:互联网 发布:北邮ipv4网络电视网站 编辑:程序博客网 时间:2024/05/24 02:22
众所周知,一个有完整功能的音乐播放器应该能够让用户自主选择播放模式,例如单曲循环,随机播放,列表循环,全部播放......本文主要讨论其中的随机播放,在实现随机播放的功能可以有两种方法,即random算法和shuffle算法。两者各有利弊,笔者就试着以自己短浅的认识来谈谈这两种算法:(都是JAVA代码)
一.random算法实现随机播放
通过random实现随机播放的优点是能够实现完全随机的播放,即下一首播放出来前谁都不知道将会播放什么,达到完全随机的目的,但是其缺点也会凸显出来,就是上一曲和下一曲其实已经没有任何差异,都是完全随机的(想要上一曲不一样的,就得实现历史记录,这个比较复杂,一般的随机播放就是上一曲和下一曲一样,都是随机的,至于上一曲实现记忆功能下面会说到),这就相当于将上一曲这个按键的功能抹去了,但是这点小牺牲完全可以承受,一般大多数播放器的随机播放都是采用random算法,相信也是有一定的原因的。
废话不多说,上代码:
Calendar ca = Calendar.getInstance();//这个是用来获取系统当前时间的int i;Random rand =new Random(ca.get(Calendar.MINUTE)*ca.get(Calendar.SECOND));//将随机数的种子设置为当前系统时间的分*秒,是为了种子不定,随机数不定,该方法不唯一i=rand.nextInt(maxnum);//maxnum是随机数最大不超过得值这段代码只是把大概的一个思路,一个方法贴出来,至于要是使用的话可以借鉴思路,还得根据你自己的要求自己更改。
二.shuffle算法实现随机播放
通过shuffle算法实现的随机播放相比random实现的有一个最大的好处就是能够将上一曲按键的功能体现出来,能够实现记忆播放,对于刚接触shuffle算法的人来说一时间难以理解,这个算法到底是干啥的?说个简单的例子估计你就懂了,给你若干数字,让你排序估计你能想到很多算法,比如冒泡排序、插入排序、快速排序.......一大串各种各样的算法来达到要求,那么接下来就容易多了,那就是shuffle算法就是将一串有序的数字变得无序,就是排序的逆算法,一个是将杂乱的变的有序,而另一个则是将有序的变得杂乱无序,这下好理解多了吧,就是搞破坏,就是将有序的变得无序,但是它还是一个特定的序列,对,它还是个序列,既然是序列那么肯定就会有某种必然的规律,有一定的位置,那么上一曲的实现是不是容易多了,但是要考虑到的是越界的问题(即出现第一个元素的上一个,最后一个元素的后一个这种情况),最后说说shuffle算法的缺点吧,那就是相比random算法他不能算的上是完全随机,因为那个杂乱的序列一旦确定就无法改变,剩下的就是按剧本演戏,按部就班。这个算法在好多编程语言里面都提供给开发者了现成的使用方法,一般不需要自己再重写,但是要是不能满足自己的要求的话,就得自己写了,我建议刚开始接触这个算法的人自己写写,会加深对这个算法的理解,下面我提供自己写的,还有就是要避免每次生成的无序序列都是一样的,这样的算法不是一个好的算法,至少对音乐播放器来说。
public void shuffle(int a)
{
int tm[] = new int[a];
int temp,first,next;
for(int i = 0;i<a;i++)
{
tm[i]=i;
}
for(int i = 0;i<a;i++)
{
Calendar ca = Calendar.getInstance();
Random rand =new Random(i+ca.get(Calendar.MINUTE)*ca.get(Calendar.SECOND));
Random rand1 =new Random(rand.nextInt(songnum));
first=rand1.nextInt(tm.length);
temp = tm[i];
next=tm[first];
tm[i]=next;
tm[first]=temp;
}
}
- 关于音乐播放器中随机播放的两种模式
- 音乐的随机播放
- android 音乐播放器中播放模式的设计
- 随机播放音乐的代码
- 随机音乐播放的算法
- 关于音乐播放器
- 关于音乐播放器中歌词同步显示的实现
- 音乐随机播放算法
- 音乐随机播放算法
- 音乐随机播放算法
- 音乐播放随机算法
- 音乐随机播放算法
- 音乐随机播放算法
- 音乐播放器之播放模式的构思
- 简单的播放内存卡中音乐的播放器
- Python随机播放电脑里的音乐
- 音乐播放器中Service的使用:
- 音乐播放器中Service的使用
- java 单向链表的操作
- VS2010菜单资源详解
- html 实现自动填表
- NSSet类型以及与NSArray区别
- 梯度下降(gradient descent)
- 关于音乐播放器中随机播放的两种模式
- 架构师之路
- HDU 1811 Rank of Tetris(topsort)
- selenium-java-Firefox 特殊异常:界面找不到元素
- spdy_proxy(一)
- test
- Navicat for MySQL
- 由2+2=5对缓存池进行粗略了解
- 2014年10-16日中信网络以及欢聚时代笔试记录