Shuffle nei lettori musicali

3

Ho sempre sentito quanto sia difficile implementare algoritmi shuffle per i lettori musicali, ma mai davvero la spiegazione per questo. Cosa lo rende difficile?

Prendiamo ad esempio come implementerei uno:

  1. Prima l'utente aggiunge 5 brani a una playlist
    let songs = [0, 1, 2, 3, 4];
  2. Quindi l'utente abilita shuffle
  3. Il programma copia quindi l'array songs in un nuovo array, ad esempio shuffle
  4. Quindi l'array shuffle verrà ordinato in modo casuale con qualsiasi algoritmo
  5. L'array shuffle è memorizzato in es. un file di testo per la persistenza, che viene caricato all'inizio della sessione
  6. Diciamo che l'array shuffle ora è [2, 4, 0, 1, 3]
  7. Quindi il giocatore riproduce questo array in ordine inverso
  8. Quando viene riprodotta una canzone, viene rimossa dall'array shuffle . Eg.

    // shuffle starts as [2, 4, 0, 1, 3]
    while (shuffle.length > 0) {
      player.play(shuffle[shuffle.length - 1]);
      shuffle.pop();
    }
    
    // First iteration plays song 3, and the array is then: [2, 4, 0, 1]
    // The second plays song 1, and the array is then: [2, 4, 0]
    // Third plays song 0, and the array is then: [2, 4]
    etc.
    
  9. Poi, quando tutti i brani sono stati riprodotti, un nuovo array verrebbe generato nuovamente in modo casuale da songs , a cui potrebbero essere stati aggiunti nuovi brani. Magari anche pronunciare un paio di canzoni prima dell'ultimo, in modo che il nuovo array sia pronto al momento della precedente.

  10. Potresti anche interrompere la riproduzione e riprendere più tardi e continuerai a sentire solo brani che non sono ancora stati riprodotti, poiché non sono ancora stati rimossi da shuffle

Anche se qualcuno ha 20000 brani, l'array sarà solo (dati riferimenti in numeri interi) un file di 125 KB.

    
posta Juha Untinen 25.07.2018 - 13:27
fonte

2 risposte

10

Lo shuffle è difficile per i lettori di musica perché ciò che le persone capiscono come casuali e ciò che in realtà è casuale sono due cose diverse. La difficoltà arriva nel soddisfare le aspettative degli utenti. Gli utenti diranno che le loro aspettative sono le canzoni selezionate a caso, ma ci sono molte cose che non vogliono da una selezione casuale. Non c'è niente di veramente sbagliato nel tuo schema per mescolare casualmente una playlist, a parte il fatto che non soddisfa le aspettative degli utenti in termini di shuffle.

  • Gli utenti non vogliono ascoltare la stessa canzone più volte di seguito.
  • Gli utenti non vogliono che lo stesso artista / album venga riprodotto in sequenza o troppo ravvicinato.
  • Gli utenti vogliono ascoltare 1-2 brani di ogni artista / genere nella loro raccolta prima che si ripeta.
  • Le sequenze casuali che corrispondono a modelli stabiliti sono visualizzate come non casuali e non gradite. Sarebbe come suonare la traccia 2 dagli album A, B, C, quindi riprodurre la traccia 3 da quegli album, o suonare la traccia 1 da A, la traccia 2 dalla B, la traccia 3 dalla C. Ciò sarebbe anche se le canzoni seguissero una roccia, country, rap, pop cycle o brani riprodotti in ordine alfabetico.
  • La riproduzione di artisti meno amati o la riproduzione di artisti preferiti crea insoddisfazione.
  • I sottogruppi di brani non devono essere riprodotti nello stesso ordine delle precedenti iterazioni. allo stesso modo le ultime X song non dovrebbero essere nelle prime X song nella successiva iterazione.

Gli utenti vogliono davvero qualcosa come una playlist curata che cicla attraverso la loro collezione e riproduce le canzoni in modo semi-casuale lungo una distribuzione equa. Questo è un compito molto più difficile del semplice scegliere una canzone a caso o ordinare una collezione in modo casuale. Molti di questi possono essere gestiti perché abbiamo stabilito abbastanza metadati sui brani che possono essere utilizzati e presi in considerazione, ma il loro bilanciamento è un compito difficile.

    
risposta data 25.07.2018 - 15:09
fonte
3

Nel tuo esempio di 5 canzoni quasi il 59,3% di shuffle comporterà la riproduzione di due brani adiacenti in ordine.

All'ascoltatore sembrerà non casuale.

Aggiungi a questo, come decidi quando rimescolare? Se l'utente spegne e riaccende il dispositivo, il dispositivo ripristinerà l'elenco "già ascoltato"?

Ma penso che la ragione principale sia saltare. L'utente salterà i brani che non gli piacciono, procedendo attraverso la lista mescolata molto più velocemente rispetto a quando fossero obbligati ad ascoltare ogni canzone.

Questo significa che è probabile che abbiano "Perché sceglie sempre Roxette?! ??!" più spesso temporalmente che le copie di "deve essere stato amore" si verificano ordinariamente nella lista mescolata *

* 4/5 devi avere le edizioni originali svedesi, scollegate, live ed estese

    
risposta data 25.07.2018 - 15:01
fonte

Leggi altre domande sui tag