Алгоритм случайных групп - PullRequest
1 голос
/ 20 ноября 2010

Мне нужен алгоритм "случайного воспроизведения альбомов" для моего аудиоплеера, как в foobar2k.Итак, проблема в том, что у меня есть список треков, отсортированный по некоторым критериям, чтобы все треки с одним альбомом были смежными.Теперь мне нужно иметь возможность воспроизводить песни из списка воспроизведения в режиме «случайного воспроизведения альбомов», то есть, если следующий трек находится в том же альбоме, просто воспроизведите его, в противном случае перейдите к первому треку следующего случайного альбома.Если пользователь хочет воспроизвести предыдущий трек, сделайте то же самое, но в обратном направлении.Итак, вопрос в том, откуда мне знать, каким был предыдущий альбом?Я действительно не хочу хранить историю проигранных альбомов или вести отдельный список.

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

Пример ввода:

Track 1, Album A
Track 2, Album A
Track 1, Album B
Track 2, Album B
Track 3, Album B
Track 1, Album C
Track 2, Album C
Track 3, Album C

Допустим, текущим треком является трек 1, альбом A. Следующим треком будет трек 2, альбом A. Следующим треком нетиз того же альбома, поэтому следует выбрать первый трек из случайного альбома, скажем, трек 1, альбом C. Теперь я выбираю следующий трек, как если бы это был обычный режим случайного воспроизведения, а затем переходил к первому треку.его альбома, таким образом теряя информацию, откуда я пришел в этот альбом.Поэтому, когда пользователь хочет перейти на предыдущий альбом, у меня нет информации, как я туда попал.Надеюсь, это прояснит вопрос.

Спасибо.

1 Ответ

2 голосов
/ 20 ноября 2010

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

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

...