Как перемешиваются различные музыкальные плееры?

3903
Mohsin Akhtar

Мне было интересно, может ли быть какой-то фиксированный шаблон / алгоритм, которым следуют различные музыкальные проигрыватели для перемешивания списка воспроизведения. Из своего предположения я мог бы понять, что эти медиаплееры используют тот же алгоритм для перетасовки. Я говорю так, что практически я экспериментировал с функцией перемешивания разных игроков в одном и том же плейлисте. Таким образом, если это так, то что это за алгоритм?

Опять же, если мое предположение неверно, и каждый игрок использует свой собственный алгоритм тасования, то почему я могу получить одинаковую последовательность песен после тасования от разных игроков с одинаковым списком воспроизведения?

РЕДАКТИРОВАТЬ:

Мой вопрос заключается в том, чтобы узнать, используют ли все музыкальные проигрыватели общий алгоритм перемешивания. если ДА, то какой алгоритм? Если нет, то почему у меня такая же последовательность песен после перетасовки одного и того же списка воспроизведения с моего мобильного телефона Nokia 5233, 5300, VLC media Player, Windows Media Player и т. д.

2
Все дело в том, что если он должен быть «случайным», то вы не сможете сказать, какой алгоритм используется, если не получите исходный код или не спросите разработчика. Конечно, есть медиа-плееры с открытым исходным кодом. Но быстрый Google показывает, что нечто подобное очень часто используется: http://en.wikipedia.org/wiki/Fisher-Yates_shuffle James P 11 лет назад 3
+1 Я думаю, что вы правы. Трудно сказать, какой именно алгоритм используется. И я тоже думаю, что самый распространенный алгоритм - это Фишер-Йейтс. Благодарю. Просто сформулируйте это в ответе, чтобы я мог принять это. Mohsin Akhtar 11 лет назад 0
даже если алгоритмы одинаковы, результат перемешивания должен быть случайным, я имею в виду «вы не можете получить одинаковую последовательность песен после перемешивания от разных игроков с одинаковым списком воспроизведения», или нет необходимости перемешивать карты при игре в карточные игры. LiuYan 刘研 11 лет назад 0

3 ответа на вопрос

1
Brad Patton

There are a number of different shuffle algorithms with Fisher-Yates being one of the more popular. Even if a player uses that algorithm it's implementation will depend on a number of other factors (coding language, random number support). Unless a player directly copies code from another program it will be different in implementation.

Additionally while most players 'shuffle' a playlist I've seen ones that always randomly pick the next song to play (resulting in the same song played twice in a row).

It's strange that you claim that different players 'shuffle' the same playlist in the same order. Even using the same algorithm (or same player) should result in a random playlist each time it is shuffled.

1
Doug Ferguson

Из того, что я наблюдал на продуктах Apple, в то время как у shuffle есть случайный элемент для выбора того, какой элемент будет воспроизводиться следующим, также существует ранжирование каждого элемента на основе истории воспроизведения, рейтинга пользователя (звездочек) и включения в плейлисты. Предметы с более высоким рейтингом чаще появляются раньше в случайном порядке.

1
arielnmz

Некоторое время назад я сделал небольшой медиаплеер для PSP (я никогда не рассказывал об этом) и реализовал функцию случайного воспроизведения следующим образом:

  • Каждой песне на музыкальном проигрывателе вы присваиваете целое число без знака в диапазоне от 0 до n( nколичество песен в проигрывателе).
  • Генерирует случайное число, используя текущее время (мс) плюс последнюю песню идентификатор в качестве семени, сделать его целым и модуль с n(количеством песен) |random(time+last_id)|%n. Таким образом, псевдослучайный идентификатор будет в диапазоне от 0 до, nи он не будет повторяться, если интервал между «перемешиваниями» будет меньше миллисекунды, потому random(time)что даст то же число, если случайное начальное число ( timeв данном случае) также тот же номер.
  • Сохраните список mпоследних проигранных песен, чтобы новая псевдослучайно выбранная песня не повторялась, по крайней мере, между mразными песнями. Если новая песня находится в списке, повторите шаг 2.

Это сработало довольно хорошо для меня, используя список длины, .9*nкоторую я никогда не получу в повторяющейся песне, по крайней мере, в 90% от общего количества песен. Это, конечно, далеко не эффективно с библиотеками песен со многими песнями. Но PSP мог хранить только несколько сотен, так что все было в порядке.

Похожие вопросы