Как перемешиваются различные музыкальные проигрыватели
Мне было интересно, может ли быть установлен фиксированный шаблон / алгоритм, используемый различными музыкальными проигрывателями для перетасовки списка воспроизведения. Из своего предположения я мог бы понять, что эти медиаплееры используют тот же алгоритм для перетасовки. Я говорю так, что практически я экспериментировал с функцией перемешивания различных игроков в одном и том же списке воспроизведения. Таким образом, если это так, то что это за алгоритм?
Опять же, если мое предположение неверно, и каждый игрок использует свой собственный алгоритм тасования, то почему я могу получить одинаковую последовательность песен после тасования от разных игроков с одинаковым списком воспроизведения?
РЕДАКТИРОВАТЬ:
Мой вопрос заключается в том, чтобы узнать, используют ли все музыкальные проигрыватели общий алгоритм перемешивания. если ДА, то какой алгоритм? Если нет, то почему я получил ту же последовательность песен после перетасовки одного и того же списка воспроизведения с моего мобильного телефона Nokia 5233, 5300, VLC media Player, Windows Media Player и т. д.
3 ответа
Существует ряд различных алгоритмов случайного перемешивания, причем Фишер-Йейтс является одним из самых популярных. Даже если игрок использует этот алгоритм, его реализация будет зависеть от ряда других факторов (язык кодирования, поддержка случайных чисел). Если игрок непосредственно не скопирует код из другой программы, он будет отличаться по реализации.
Кроме того, хотя большинство игроков "перетасовывают" плейлист, я видел те, которые всегда случайным образом выбирают следующую песню для воспроизведения (в результате одна и та же песня воспроизводится дважды подряд).
Странно, что вы утверждаете, что разные игроки "перемешивают" один и тот же список воспроизведения в одном и том же порядке. Даже использование одного и того же алгоритма (или одного и того же игрока) должно приводить к случайному списку воспроизведения каждый раз, когда он перемешивается.
Из того, что я наблюдал на продуктах Apple, в то время как у shuffle есть случайный элемент для выбора того, какой элемент будет воспроизводиться следующим, также существует ранжирование каждого элемента на основе истории воспроизведения, рейтинга пользователя (звездочек) и включения в плейлисты. Предметы с более высоким рейтингом чаще появляются раньше в случайном порядке.
Некоторое время назад я сделал небольшой медиаплеер для PSP (я никогда не рассказывал об этом) и реализовал функцию случайного воспроизведения следующим образом:
- Каждой песне на вашем музыкальном проигрывателе вы назначаете целое число без знака в диапазоне от 0 до
n
(будучиn
количество песен в плеере). - Создайте случайное число, используя текущее время (мс) плюс идентификатор последней песни в качестве начального числа, сделайте его целым числом и модулем с
n
(количество песен):|random(time+last_id)|%n
, Таким образом, псевдослучайный идентификатор будет в диапазоне от 0 доn
и это не повторится, если промежуток между "перемешиваниями" будет меньше миллисекунды, потому чтоrandom(time)
даст то же число, если случайное семя (time
в этом случае) тоже то же число. - Держите список
m
последние проигранные песни, поэтому новая псевдослучайно выбранная песня не повторяется, по крайней мере, междуm
разные песни. Если новая песня находится в списке, повторите шаг 2.
Это работало довольно хорошо для меня, используя список длины .9*n
Я никогда не получу повторяющуюся песню в более чем 90% от общего количества песен. Это, конечно, далеко не эффективно с библиотеками песен со многими песнями. Но PSP мог хранить только несколько сотен, так что все было в порядке.