LINUX.ORG.RU

Почему во многих плеерах такой убогий шафл-режим?

 , , ,


0

1

Есть такие плееры, что если у тебя 1000 музыки, они будут играть от силы 100 в режиме случайного воспроизведения, причем одно и то же.

Если бы вы писали рендомайзер, как бы вы закодили случайный выбор песни и почему такое случается? Есть какие-то неочевидные подводные камни?

★★★★

классика же

Генерим случайное число i в интервале [0; n), меняем местами i-тый элемент и n-1, уменьшаем n на единицу, повторяем.

mix_mix ★★★★★ ()
Ответ на: классика же от mix_mix

Как назло, все плееры с отстойным шаффлом закрытые. Мне скорее интересно, не как сделать хорошее, а почему так много одинаково ведущих себя отстойных. Причем у меня такое и на айфоне было, и теперь на андроиде.

cdshines ★★★★ ()

Я бы держал два списка - уже проигранные песни, и которые будут воспроизведены.

Соответственно, выбирал бы из второго списка песню под случайным номером и перекладывал ее в первый.

Так бы я решал бы заодно и проблему воспроизведения песен в том же порядке, если мы бы все время жали назад.

chkalov ()

Если бы я писал рандомайзер песен, то я бы использовал два списка: «проигранные» и «не проигранные». После того, как композиция была проиграна, перекладываем ее в список «проигранные».

blackst0ne ★★★★★ ()
Последнее исправление: blackst0ne (всего исправлений: 1)

Потому что разработчики ленивые жопы, а продукты тупые скоты.

anonymous ()
return ( rand() % (max - min) + min );

Ну и далее как лис сказал — откладывать уже отыгранные, а когда не осталось ни одного не отыгранного, обнулять метки и повторять.

deep-purple ★★★★★ ()

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

mm3 ★★★ ()
Ответ на: комментарий от cdshines

Как назло, все плееры с отстойным шаффлом закрытые. Мне скорее интересно, не как сделать хорошее, а почему так много одинаково ведущих себя отстойных. Причем у меня такое и на айфоне было, и теперь на андроиде.

в Music (стоковом андроид-плеере) шафл как раз реализован рандомизированным списком, и сам плеер опенсорс.

То что ты описал, называется не шафл, а рандом. В некоторых плеерах как раз нет шафла. Если его нет в ифоновом стоковом плеере — я очень удивлюсь :)

Есть какие-то неочевидные подводные камни?

нет.

waker ★★★★★ ()
Ответ на: комментарий от waker

Что? Какая разница, как это называется, суть в том, что у их ГПСЧ период около 100, я не знаю, чем нужно пользоваться, чтобы такое получить.

cdshines ★★★★ ()
Ответ на: комментарий от mm3

Лишняя генерация рандома может кушать батарею/память/время, вот и экономят.

blexey ★★★★ ()

Подтверждаю ситуацию на айподах. Если включить шафл 2-3 раза подряд с одной и той же песни, с большой вероятностью будет играть одно и тоже.

unt1tled ★★★★ ()
Ответ на: комментарий от cdshines

Что? Какая разница, как это называется, суть в том, что у их ГПСЧ период около 100, я не знаю, чем нужно пользоваться, чтобы такое получить.

у шаффла нет зависимости от периода ГПСЧ. плейлист, по сути, перемешивается, и потом проигрывается в этом перемешанном порядке, пока не проиграют все песни. повторений быть не может.

вероятно, то что ты слышишь происходит после рестарта плеера, из-за плохой инициализации random seed. в итоге, в каждом сеансе перемешанный список получается одинаковый (как описал unt1tled). это, действительно, распространенная проблема.

waker ★★★★★ ()
Ответ на: комментарий от waker

У меня в плеере это называется Shuffle on/off, но список не перемешивается, а скачет как попало с малым периодом. Короче, терминология в контексте того, что сейчас кождый погромист сам себе все, не имеет смысла.

Вот я и говорю - как можно «прлохо инициализировать random seed»? Я не знаю, что нужно написать, чтобы даже дефолтный Random так себя вел. Причем это много где.

cdshines ★★★★ ()
Ответ на: комментарий от cdshines

Это очень просто. Вообще не инитить «семечко», тогда оно будет повторяться всегда.

deep-purple ★★★★★ ()
Ответ на: комментарий от cdshines

Вот я и говорю - как можно «прлохо инициализировать random seed»?

как минимум 2 стандартных способа: 1. не инициализировать совсем, 2. инициализировать таймером от старта программы, который равен 0 в момент инициализации:)

waker ★★★★★ ()

Самый правильный шафл — кнопка «перемешать список» и дальнейшее последовательное воспроизведение с начала.

backburner ()
Ответ на: комментарий от cdshines

Видимо потому что во многих ЯП не нужно сид инитить, и многие думают что можно сразу дергать ранд и не париться.

deep-purple ★★★★★ ()
Ответ на: комментарий от cdshines

это я не знаю.. за последние ~8 лет я пользовался только 2 плеерами, и в них нет такой проблемы.

waker ★★★★★ ()
Ответ на: комментарий от waker

Я как раз обнаружил, что эти два плеера, которые я тестил, не умеют cue, сейчас импортирую в дедбиф, если осилит, даже куплю ключ от рекламы.

cdshines ★★★★ ()

А зачем он вообще нужен?

UNiTE ★★★★★ ()
Ответ на: комментарий от cdshines

потому что погроммисты сиплюсплюс копипастят в свои проприетарные проЭкты говнокод с одних и тех же форумов

MyTrooName ★★★★★ ()

Почему в убогих плеерах такой убогий шафл-режим?

как-то так

chg ★★★★★ ()

Если бы вы писали рендомайзер, как бы вы закодили случайный выбор песни и почему такое случается?

простейший рандомный выбор по номеру трека из играемой директории, соответственно если нужно играть только 100 песен, создаётся папка, в ней делаются жёсткие ссылки на треки и вперёд.

а когда дошли бы руки — запилил бы плейлисты, как альтернативу.

next_time ★★★★ ()
Ответ на: комментарий от cdshines

я не знаю, чем нужно пользоваться, чтобы такое получить.

std::array<string> shuffle_list(100) же

next_time ★★★★ ()

Потому что разработчики сами не пользуются этой ненужной функцией.

anonymous ()
Ответ на: комментарий от waker

То что ты описал, называется не шафл, а рандом.

Спец дело говорит. Кажется в годных аппаратных плеерах запиливали и то, и то.

t184256 ★★★★★ ()

странные дела говорите. Шафл просто перемешивает списко и там не может такого быть, а вот с рандомом у меня тот же ритмбокс вполне нормально проигрывает. Еще заметил, что музыка, которая помечена звездами (рейтинХ), появляется чаще.

anonymous ()
Ответ на: комментарий от next_time

а какая разница) погроммисты сиплюсплюс могут погроммировать любой язык

MyTrooName ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.