Открыть список
Как стать автором
Обновить

О всемогущем рандоме

Интерфейсы
image

Умный shuffle для плееров



В топике хотелось бы поделиться мыслями насчет того, каким должно быть «случайное воспроизведение» в плеерах (особенно это касается портативных плееров типа iPod)
Сам я являюсь владельцем iPod touch и постоянно пользуюсь им в машине, подключая его через AUX к магнитоле.
Фирма Apple изобрела какой-то «умный плейлист» — так называемый genius, но он как-то использует интернет и мнения других пользователей itunes.

Хотелось бы слышать и слушать именно то, что хочется слышать. Под катом собственно суть идеи.

Итак возьмем для начала самый простой «шуфлай»

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

image
  • Не требует аппаратных нагрузок
  • Не требует каких-либо баз данных
  • Не требует сохранения ID-тегов
  • Да вааще ничего не требует, может работать хоть на вибромассажере

image
  • До безобразия туп
  • Есть шанс повторения подряд одной и той же песни
  • Благодаря закону Мерфи шанс повторения одной и той же нелюбимой песни выше, чем у любимой

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

Второй вариант:

заранее перемешать список и воспроизводить по очереди.
Именно таким способом я пользовался в винампе, пока там не появился рычажок настройки псевдослучайности :)
image
  • Нет шансов проиграться одной и той же песне
  • Почти все преимущества предыдущего подхода


image
  • Нагрузка — необходимо постоянно хранить полный плейлист и обращаться к нему.
  • Опять тупость, никакой интерактивности


3. Система рейтингов itunes и dj-playlist в нем


Позволяет проставлять рейтинги для произведений, и диджей автоматически составляет плейлист на основе этих рейтингов. Причем это работает только в itunes, в плеерах ipod этой фишки нет.

image
  • Маломальский интелект
  • Мы слушаем то, что оценили как любимое


image
  • Необходимо оценивать. Например, доставать плеер, разблокировать его и тыкать рейтинг
  • Не учитывается, что песня может надоесть, необходимо постоянно править рейтинги у огромной кучи композиций
  • Необходимость использования БД


Пока ничего более навороченного я не встречал.

Основы


Итак, в топике я хотел поделиться задумками о том, каким должен быть «шуфлай» на плеерах (как комповых, так и мультимедийных)

Суть идеи:
Ввести несколько параметров для каждой песни, на основе которых «шуфлай» и будет выбирать когда какую песню врубать.
Разработать систему «интерактивного» рейтинга, где не надо выставлять сколько-то звездочек произведению. Да и вааще ничего не надо выставлять.
Использовать понятие «надоедания песни» — вот вы бы хотели чтобы ваша любимая песня (с пятью звездочками) проигрывалась каждый час, да не по разу? Ведь надоест!

Интерактивный рейтинг

Итак как можно оценивать песню, не спрашивая пользователя о количестве звездочек?
Понаблюдав за собой и некоторыми знакомыми, я выявил несколько действий, которые все совершают, когда проигрываемое произведение нравится:
  • Повышение громкости
  • Нажатие какой-либо дополнительной кнопки интерфейса, с изображением той же звездочки
  • Понижение громкости следующего трека после повышения текущего (то есть если громкость повышали именно ради этого трека)
  • Выборочное включение именно этой песни из списка

Не нравится:
  • Переключение трека
  • Понижение громкости

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

Рейтинг будет задаваться числом: от 0 до 100, по умолчанию у всех треков рейтинг будет 50 (нейтральный).
При ручном переключении трека в первые 30 секунд рейтинг упадет на 10, более 30 секунд — на 5.
Все цифры примерные, нужно будет подгонять после реализации.
image
Полное прослушивание песни не означает, что она нам как-либо понравилась, ибо мы могли в данный момент ее даже не слушать, в увеличении рейтинга поможет одна дополнительная кнопка интерфейса, доступная даже на заблокированном плеере (например, на iPod touch двойное нажатие кнопки home вызывает три кнопки управления воспроизведением).
Как раз вместо кнопки «предыдущий трек» было бы удобно разместить эту новую кнопку, однократно повышающую рейтинг, и выглядеть она может как стрелка вверх или звездочка.
Нажатие на эту кнопку разово прибавляет к рейтингу 10 баллов. За одно прослушивание больше одного раза поднять рейтинг нельзя, повторное нажатие должно понижать рейтинг обратно (под сомнением)

Надоедание

Любая песня не может быть настолько любимой, чтобы слушать ее по 10 раз за час. Это обязательно необходимо учитывать.
Для учета надоедания необходимо ввести еще одну переменную, которая будет повышаться при каждом включении песни и понижаться со временем.
Итак, введем переменную от 0 до… хоть скольки, думаю байта хватит (255).
При полном проигрывании песни добавим туда 2, при частичном (выключили плеер, переключили трек, нажали «стоп») но проигралось более 20% трека — добавим 1.
Каждый божий день у всех треков убавляем по одной единице.

Расчеты

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

Для начала необходимо высчитать результирующий показатель с учетом рейтинга и надоедания. Точнее это будет «влияние надоедания на рейтинг», но так как надоедание со временем меняется, то эту величину придется высчитывать постоянно.

Получаем

Результат=Рейтинг — надоедание*коэффициент надоедания

Коэффициент каждый пользователь должен выбрать сам индивидуально (в настройках плеера). Например, коэффициент, равный 50, не позволит прослушать один и тот же трек в один день, ибо первое же прослушивание тут же уронит рейтинг до нуля даже у топовых треков. Оптимальным коэффициентом на мой взгляд будет число около 5…

Выборка

Теперь собственно переходим к самому главному — выбору следующего трека для воспроизведения.
Простейшим вариантом было бы идти по топу, то есть ищем произведения с максимальным результирующим рейтингом, воспроизводим их, у них автоматически падает результирующий рейтинг (так как они «надоедают») и т.д.
Но таким образом мы получим, что воткнув с утра наушники и спя в пути на работу, мы прослушаем все топовые песни и днем мы будем слушать второсорт :) Думаю, что это не рационально.

Необходимо отделить топовые песни (процентов 10 от общей кучи, имеющие максимальный рейтинг) от остальных. Выборку производить из общей кучи, и каждый пятый трек брать из топа (опционально).
Тогда мы получим равномерную нагрузку любимых песен на протяжении всего дня.

На правах патента

_______________________________________
Спасибо тем, кто осилил данный топик, пожалуйста поделитесь своими мыслями на данную тему.

Я понимаю что произвести плеер с такой фишкой у нас нет возможности. Но программно вшить в обычные комповые плееры думаю это не так сложно.
Я знаю что у amarok'а похожая систем рейтингов, но ей сложно пользоваться и он не учитывает надоедания.
Я знаю что в Apple сидят не дураки, и если они поставили кнопку предыдущий трек, значит она необходима. Но я владею плеером уже около 2 лет и ни разу не нажимал на нее.
Теги:плеерыrandomshuffleалгоритмэргономика
Хабы: Интерфейсы
Всего голосов 77: ↑64 и ↓13 +51
Просмотры6.6K

Похожие публикации

QA
до 80 000 ₽Директ КредитМосква
Flutter программист
от 100 000 до 150 000 ₽ECOSМосква
Senior Fullstack developer
от 250 000 ₽AyoМосква
PHP developer (Symfony)
от 100 000 до 200 000 ₽SibedgeСанкт-ПетербургМожно удаленно
Программист-разработчик
до 100 000 ₽АксиомМожно удаленно

Лучшие публикации за сутки