AIMP Forum

AIMP for Windows => Плагины / Plugins => Дополнения / Addons => Плагины-дополнения / Addons => Topic started by: Artem on May 12, 2013, 22:14:25

Title: ShuffleBasedOnRating (случайное воспроизведение на основе оценки)
Post by: Artem on May 12, 2013, 22:14:25
Вот, можете попробовать. В архиве две версии - релизная и дебажная, последняя снабжена отладочным окном, которое показывает текущее состояние очереди.

Плагин до конца не доделан, в частности:
1) Не работают опции из группы "По окончанию плейлиста", плеер упирается в последний файл и играет его бесконечности
2) Алгоритм рандомизации не проверят соседние треки - одни и теже треки могут идти подряд в очереди.

P.S. Для компиляции лучше использовать XE3 и последний SDK
Title: Re: Re: Случайное воспроизведение на основе оценки
Post by: Artem on May 12, 2013, 23:56:26
(http://f-bit.ru/uploads/131719.png)

Больше никакой "отсебятины"  ;)
Это новая формула для расчета рейтинга трека. Все данные можно получить из тегов файла и из статистики фонотеки, "время добавления самого старого файла" думаю что можно получить из первой записи в статистике фонотеки.
Она нужна, чтобы уравнивать рейтинг старых и новых треков. И по расчетам в Excel должна работать.

Скажите, эту формулу вы сами придумали или откуда-то взяли?
Title: Re: Re: Случайное воспроизведение на основе оценки
Post by: Ang Reload on May 13, 2013, 05:43:28
Скажите, эту формулу вы сами придумали или откуда-то взяли?
Сам. Если б где была, готовую взял. Так понимаю, что с ней проблемы?

Создал плейлист с 7ю файлами. 5зв,3зв,2зв - по 1шт., 1зв - 4шт. Новый сл. файл выпадал 14раз, потом зациклился. Те. закончилась сл. последовательность (14=5+3+2+1*4). Ошибка, быть может, не в окончании плейлиста, а в проверке на необходимость создания новой последовательности.
Title: Re: Re: Случайное воспроизведение на основе оценки
Post by: Artem on May 13, 2013, 13:58:56
Сам. Если б где была, готовую взял. Так понимаю, что с ней проблемы?

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

Создал плейлист с 7ю файлами. 5зв,3зв,2зв - по 1шт., 1зв - 4шт. Новый сл. файл выпадал 14раз, потом зациклился. Те. закончилась сл. последовательность (14=5+3+2+1*4). Ошибка, быть может, не в окончании плейлиста, а в проверке на необходимость создания новой последовательности.

Вы можете попользовать дебажную версию - там сразу видно и очередь, и текущее положение в ней. Я пока не делал пересоздания последовательности.
Title: Re: Re: Случайное воспроизведение на основе оценки
Post by: Ang Reload on May 13, 2013, 14:41:35
Картинка показывает воспроизведение треков: зеленого, красного и синего. Нужно расчитать частоту T1, T2 и T3 соответственно для каждого трека, чтобы продолжить последовательность.
(http://f-bit.ru/uploads/133904.png)

Расчет рейтнига подразумевает частоту проигрывания трека по отношению к остальным.
T = count/time_end (T1=0,67, T2=0,28 и T3=0,09) - как сейчас
Для этого необходимо исключить из общего количества проигрываний, то время когда трек не мог воспроизводиться.
T = count/(time_end - time_start) (T1=0,67, T2=0,45 и T3=0,50) - по той формуле
(Тут видно, что первый файл все равно имеет больший рейтинг, это из-за того что он в начале не имел конкурентов. Как просто решить эту проблему я не знаю. Может так и оставить?)

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


По дебагеру заметно, что файлы добавляются не блоками с какой-то позиции по какую-то, а похоже что рандомно (интересно как).
При этом новые треки не перемешиваются с уже добавлеными. Это реализует все n! перестановок?
Title: Re: Re: Случайное воспроизведение на основе оценки
Post by: Artem on May 13, 2013, 17:55:58
По дебагеру заметно, что файлы добавляются не блоками с какой-то позиции по какую-то, а похоже что рандомно (интересно как).
При этом новые треки не перемешиваются с уже добавлеными. Это реализует все n! перестановок?

Посмотрите код, в архиве он есть. Алгоритм там сейчас примитивный.