Como o embaralhamento é feito por vários players de música [closed]

2

Eu queria saber se poderia haver um padrão / algoritmo fixo sendo seguido por vários players de música para embaralhar a playlist. Do meu palpite eu poderia descobrir que esses players de mídia usam o mesmo algoritmo para embaralhar. Eu digo que praticamente experimentei o comportamento da função shuffle de vários jogadores na mesma playlist. Assim, se este é o caso, então o que é esse algoritmo?

Novamente, se meu palpite estiver errado e cada jogador usar seu próprio algoritmo de shuffling, como posso obter a mesma sequência de músicas depois de embaralhar vários players com a mesma playlist?

EDITAR:

Minha pergunta é saber se todos os players de música compartilham um algoritmo comum para o shuffling. se sim, então qual algoritmo? se não, então como é que eu tenho a mesma sequência de músicas depois de embaralhar a mesma lista de reprodução do meu Nokia 5233, 5300, VLC Media Player, Windows Media Player, etc.

    
por Mohsin Akhtar 20.03.2013 / 11:23

3 respostas

1

Existem vários algoritmos aleatórios diferentes com Fisher-Yates sendo um dos mais popular. Mesmo se um jogador usar esse algoritmo, sua implementação dependerá de vários outros fatores (linguagem de codificação, suporte a números aleatórios). A menos que um jogador copie diretamente o código de outro programa, ele será diferente na implementação.

Além disso, enquanto a maioria dos jogadores 'shuffle' uma lista de reprodução eu vi aqueles que sempre escolhem aleatoriamente a próxima música para tocar (resultando na mesma música tocada duas vezes seguidas).

É estranho que você afirme que jogadores diferentes 'embaralham' a mesma playlist na mesma ordem. Mesmo usando o mesmo algoritmo (ou mesmo jogador) deve resultar em uma lista de reprodução aleatória cada vez que é embaralhada.

    
por 22.03.2013 / 21:49
1

Pelo que observei em produtos da Apple, embora o shuffle tenha um elemento aleatório para selecionar o item a ser reproduzido, também parece haver uma classificação de cada item com base no histórico de reprodução, na classificação do usuário (estrelas) e na inclusão em playlists. Itens mais bem classificados são mais propensos a aparecer mais cedo no shuffle.

    
por 14.05.2014 / 20:24
1

Eu fiz um pequeno media player para um PSP há algum tempo (nunca o reformei) e implementei o recurso de shuffle assim:

  • Você dá a cada música do seu reprodutor de música um inteiro sem sinal , variando de 0 a n (sendo n do número de músicas no player).
  • Gere um número aleatório usando o tempo atual (ms) mais o último id da música como seed, torne-o inteiro e módulo com n (o número de músicas): |random(time+last_id)|%n . Assim, o id pseudo-aleatório estaria no intervalo de 0 a n e não repetiria se o espaço entre "shuffles" fosse menor que um milissegundo porque random(time) produziria o mesmo número se a semente aleatória (o time neste caso) é também o mesmo número.
  • Mantenha uma lista das últimas m das músicas reproduzidas para que a nova música selecionada aleatoriamente não seja repetida, pelo menos, entre m de músicas diferentes. Se a nova música estiver na lista, repita o passo 2.

Funcionou muito bem para mim, usando uma lista de tamanho .9*n Eu nunca teria uma música repetida em pelo menos 90% do total de músicas. Isso, claro, não é nada eficiente com bibliotecas de músicas com muitas músicas. Mas um PSP poderia armazenar apenas algumas centenas, então tudo bem.

    
por 14.05.2014 / 22:05