2010-11-20 19 views
1

J'ai besoin d'un algorithme "shuffle albums" pour mon lecteur audio comme dans foobar2k. Le problème est donc: j'ai une liste de pistes, triées selon certains critères pour que les pistes avec le même album soient toutes adjacentes. Maintenant, je dois pouvoir lire des chansons de la playlist en mode "shuffle albums", c'est-à-dire, si la piste suivante vient du même album, il suffit de la jouer, sinon, aller à la première piste d'un album aléatoire suivant. Si l'utilisateur veut jouer la piste précédente, faites la même chose mais en arrière. La question est donc: comment puis-je savoir quel était l'album précédent? Je ne veux vraiment pas garder un historique des albums joués, ou garder une liste séparée. Actuellement, j'implémente le mode shuffle régulier en donnant à chaque piste un index aléatoire aléatoire, de sorte que je puisse trouver les pistes précédentes et suivantes en trouvant les pistes avec le plus grand indice de shuffle plus petit que le courant et le plus petit index aléatoire. Mais cela ne fonctionne pas pour le mode d'albums shuffle. Quelqu'un peut-il m'aider avec ça?Algorithme Groupes de Shuffle

entrée de l'échantillon:

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 

Supposons que la piste en cours est la piste 1, piste album A. Ensuite sera la piste 2, Album A. Piste suivante est pas du même album, donc une première piste d'une L'album aléatoire devrait être choisi, disons, Track 1, Album C. Ce que je fais maintenant, c'est choisir la piste suivante comme si c'était un mode shuffle normal, puis aller à la première piste de son album, perdant ainsi l'information d'où je venais à cet album. Donc, quand l'utilisateur veut aller à l'album précédent, je n'ai aucune information comment je suis arrivé là. J'espère que cela rend la question plus claire.

Merci.

+0

Vous devez afficher un exemple d'entrée avec des exemples de votre processus. – Yehonatan

+0

Si vous avez vraiment besoin de revenir en arrière dans une liste non-séquentielle, vous devez stocker l'historique ... –

Répondre

2

Vous pouvez réutiliser votre technique d'index aléatoire pour indexer des albums. Maintenant, un index de piste est une paire (index de shuffle d'album, piste pos). Pour naviguer, incrémenter/décrémenter la piste pos; S'il sort des limites, mettez à jour l'index de l'album.

Cela dit, vous devriez reconsidérer ne pas garder un historique; cela vous permettrait de revenir beaucoup plus vite avec un grand nombre d'albums.

+0

Merci, vous m'avez indiqué de manière correcte de réutiliser mes index de shuffle. Je n'ai pas gardé d'index de shuffle séparés pour l'album, mais juste utilisé seulement les premières pistes d'albums dans mon algorithme de shuffle régulier. –