音乐播放随机算法

常见的音乐随机播放算法主要有两种:一是Shuffle算法;二是Random算法。

一 Shuffle算法

Shuffle算法和排序算法正好相反,是从有序到乱序的一个过程,俗称洗牌算法。它将播放列表中的歌曲顺序打乱,变成一个和原来歌曲顺序没有任何关系的乱序的播放列表,之后进行歌曲的播放,并支持当用户点击“上一首”时,能够回到刚刚播放的那一首歌曲。

二 Random算法

Random算法是在选取即将播放的歌曲时,进行一个随机数的运算,得到即将播放的歌曲在播放列表中的索引,播放列表本身并没有被打乱,只是利用随机函数从播放列表中选取一首歌曲进行播放而已。

现在比较普遍的随机数生成算法是基于线性同余算法实现的,例如C语言标准库函数rand()就是利用它产生随机数的。线性同余算法能够产生均匀分布的随机数,但是它依赖于给定的随机数的上限,如果上限越小,产生的随机数重复的概率就越大。

Random算法另一个缺陷是当点击“上一首”时,跟“下一首”功能完全一样,都是重新生成随机数,并利用它从播放列表中选取歌曲进行播放,而不会回到刚刚播放的那一首歌。当然,这个缺陷可以通过提供历史记录来弥补,只是需要花费额外的空间。

 

Android 4.4用的Shuffle算法,在播放第一首或者第二首的时候是回不到上一首的:

   public void onClick(View v) {
            if (mService == null) return;
            try {
                int shuffle = mService.getShuffleMode();
                int histSize = mService.getHistSize();
                if (mService.position() < 2000) {
                    if ((shuffle == MediaPlaybackService.SHUFFLE_NORMAL) && (histSize == 0 || histSize == 1)) {
                        mService.seek(0);
                        mService.play();
                    } else {
                        mService.prev();
                    }
                } else {
                    mService.seek(0);
                    mService.play();
                }
            } catch (RemoteException ex) {
            }
        }


 

 

你可能感兴趣的:(Mediaplay)