Это продолжение предыдущей статьи об умном радио, не умирающем при потере Интернета. Похоже, что первый блин был скорее комом: большинству пользователей приложение не понравилось. Критика в основном разделилась на два фронта:
- Одни и те же треки очень часто повторяются, а новые появляются очень редко.
- Нету возможности ни выбрать любимые жанры, ни минусовать негодные треки, чтобы не приходилось их мучительно пропускать.
Вторая проблема сильно усугублялась первой, поскольку пропуски очень часто приводили к повторам всё тех же треков, пусть и в другой последовательности.
Рад сообщить, что мне удалось решить первую проблему (обновление уже в Play Store). Под катом будет описание выбранного алгоритма выбора и ротации треков, а также сути исправления, которое, как я ожидаю, должно кардинально улучшить пользовательский опыт.
Базовая идея выбора треков появилась практически сразу: вероятность выбора композиции для воспроизведения пропорциональна её "оценке предпочтения". Последняя рассчитывается как отношение среднего времени прослушивания трека к его продолжительности. Такой способ выбора приводит к частому воспроизведению тех композиций, которые более предпочтительны для слушателя. К сожалению, эта оценка не всегда будет соответствовать реальному предпочтению, но должна хорошо с ним коррелировать.
По первоначальной задумке ротация треков должна происходить в момент, когда все треки прослушаны не менее двух раз (одного раза казалось недостаточным для достоверной оценки трека). В момент ротации удалялись треки, чья оценка предпочтений была ниже определённого уровня, а также загружалось новая порция треков.
Этот алгоритм на практике приводил к очень редкой ротации. В самом деле треки, которые были быстро пропущены, надолго теряли возможность быть прослушанными ещё раз. Поэтому мне пришлось искусственно завышать оценку предпочтения для треков, прослушанных менее двух раз, чтобы поднять вероятность их воспроизведения.
Кроме того, чтобы исключить повторение только что воспроизведённых треков, было принято решение искусственно занижать оценку предпочтения для десяти последних проигранных треков.
На практике это довольно неплохо работало, но лишь при условии более-менее сформированного профиля предпочтений, когда из первых двадцати загруженных треков подавляющее большинство не вызывают отторжения. Новый же пользователь получал набор совершенно случайных треков, которые был вынужден бесконечно пропускать. В первом случае пропуски были довольно редкими, и не вызывали раздражение. Во втором — слушатель просто не мог дождаться следующей итерации ротации.
Так было в первоначальной версии приложения, которая была опубликована на момент написания предыдущей статьи. Теперь о том, что было сделано, чтобы улучшить пользовательский опыт:
- Для следующей итерации ротации теперь достаточно, чтобы все треки были прослушаны только раз (раньше было два раза).
- При наличии непрослушанных композиций их оценка предпочтения резко увеличивается, для всех остальных — резко уменьшается (и то и другое — на порядок).
Эти изменения привели к тому, что при наличии Интернет-соединения треки теперь проигрываются только по одному разу (как и в обычном радио), но понравившиеся треки оседают в кэше, вытесняя остальные. Как только Интернет-соединение пропадает, включается старый механизм, воспроизводящий отобранные треки пропорционально их оценке предпочтения.
P.S. Был также исправлен баг, связанный с отсутствием распознавания появившегося WiFi.
Автор: Семён Приходько