2

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

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

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

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

3 ответа3

1

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

1

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

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

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

1

Существует ряд различных алгоритмов случайного перемешивания, причем Фишер-Йейтс является одним из самых популярных. Даже если игрок использует этот алгоритм, его реализация будет зависеть от ряда других факторов (язык кодирования, поддержка случайных чисел). Если игрок непосредственно не скопирует код из другой программы, он будет отличаться по реализации.

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

Странно, что вы утверждаете, что разные игроки «перемешивают» один и тот же список воспроизведения в одном и том же порядке. Даже использование одного и того же алгоритма (или одного и того же игрока) должно приводить к случайному списку воспроизведения каждый раз, когда он перемешивается.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .